Makefile revision 1.125
11.125Srillig# $NetBSD: Makefile,v 1.125 2023/06/19 20:14:45 rillig Exp $ 21.8Schristos# @(#)Makefile 5.2 (Berkeley) 12/28/90 31.1Scgd 41.1ScgdPROG= make 51.82SrilligSRCS= arch.c 61.82SrilligSRCS+= buf.c 71.82SrilligSRCS+= compat.c 81.82SrilligSRCS+= cond.c 91.82SrilligSRCS+= dir.c 101.82SrilligSRCS+= for.c 111.82SrilligSRCS+= hash.c 121.82SrilligSRCS+= job.c 131.82SrilligSRCS+= lst.c 141.82SrilligSRCS+= main.c 151.82SrilligSRCS+= make.c 161.82SrilligSRCS+= make_malloc.c 171.82SrilligSRCS+= metachar.c 181.82SrilligSRCS+= parse.c 191.82SrilligSRCS+= str.c 201.82SrilligSRCS+= suff.c 211.82SrilligSRCS+= targ.c 221.82SrilligSRCS+= trace.c 231.82SrilligSRCS+= var.c 241.82SrilligSRCS+= util.c 251.123SrilligWARNS= 6 261.40Sdsl 271.80Srillig# Whether to generate a coverage report after running the tests. 281.73SrilligUSE_COVERAGE?= no # works only with gcc; clang9 fails to link 291.73Srillig.if ${USE_COVERAGE} == "yes" 301.87SrilligGCOV?= gcov 311.90SrilligCOPTS+= --coverage -O0 -ggdb 321.111SrilligGCOV_PERL= if (/^File '(?:.*\/)?(\S+)'/) { 331.107SrilligGCOV_PERL+= $$file = $$1; $$func = ""; 341.107SrilligGCOV_PERL+= } elsif (/^Function '(\S+)'/) { 351.107SrilligGCOV_PERL+= $$func = $$1; 361.111SrilligGCOV_PERL+= } elsif (/^Lines executed:(\d+\.\d+)% of (\d+)/ && defined($$file)) { 371.111SrilligGCOV_PERL+= my ($$percent, $$lines) = ($$1, $$2); 381.119SrilligGCOV_PERL+= my $$uncovered = 391.119SrilligGCOV_PERL+= $$percent eq '100.00' ? '0' 401.119SrilligGCOV_PERL+= : $$file =~ /\.h$$/ ? '?' 411.115SrilligGCOV_PERL+= : `grep -c '\#\#\#\#\#:' < \$$(basename $$file.gcov)`; 421.115SrilligGCOV_PERL+= chomp($$uncovered); 431.115SrilligGCOV_PERL+= printf("%7.2f %4s/%4d %s%s\n", 441.111SrilligGCOV_PERL+= $$percent, $$uncovered, $$lines, $$file, $$func); 451.111SrilligGCOV_PERL+= $$file = undef; 461.107SrilligGCOV_PERL+= } 471.77SrilligLDADD+= --coverage 481.73Srillig.endif 491.85SrilligCLEANFILES+= *.gcda *.gcno *.gcov 501.73Srillig 511.80Srillig# Whether to compile using the Undefined Behavior Sanitizer (GCC, Clang). 521.77SrilligUSE_UBSAN?= no 531.77Srillig.if ${USE_UBSAN} == "yes" 541.77SrilligCOPTS+= -fsanitize=undefined 551.77SrilligLDADD+= -fsanitize=undefined 561.77Srillig.endif 571.77Srillig 581.71SrilligUSE_META?= yes 591.51Ssjg.if ${USE_META:tl} != "no" 601.68Sriastrad 611.71SrilligSRCS+= meta.c 621.71SrilligCPPFLAGS+= -DUSE_META 631.68Sriastrad 641.71SrilligUSE_FILEMON?= ktrace 651.72Srillig. if ${USE_FILEMON:tl} != "no" 661.68Sriastrad 671.67Sriastrad.PATH: ${.CURDIR}/filemon 681.71SrilligSRCS+= filemon_${USE_FILEMON}.c 691.71SrilligCPPFLAGS+= -DUSE_FILEMON 701.71SrilligCPPFLAGS+= -DUSE_FILEMON_${USE_FILEMON:tu} 711.68Sriastrad 721.72Srillig. if ${USE_FILEMON} == "dev" 731.71SrilligFILEMON_H?= /usr/include/dev/filemon/filemon.h 741.72Srillig. if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h" 751.71SrilligCOPTS.filemon_dev.c+= \ 761.71Srillig -DHAVE_FILEMON_H -I${FILEMON_H:H} 771.72Srillig. endif 781.72Srillig. endif 791.72Srillig. endif 801.65Smaxv.endif 811.51Ssjg 821.60SchristosSUBDIR.roff+= PSD.doc 831.29Ssjg.if make(obj) || make(clean) 841.71SrilligSUBDIR+= unit-tests 851.29Ssjg.endif 861.1Scgd 871.112SrilligLINTFLAGS+= -T # strict bool mode, available since 2021-01-11 881.116SrilligLINTFLAGS+= -w # treat warnings as errors 891.114SrilligCLEANFILES+= *.o # for filemon objects 901.75Srillig 911.124SlukemCOPTS.arch.c+= ${CC_WNO_FORMAT_TRUNCATION} 921.124SlukemCOPTS.dir.c+= ${CC_WNO_FORMAT_TRUNCATION} 931.120SrilligCOPTS.job.c+= -Wno-format-nonliteral # custom shell templates 941.124SlukemCOPTS.main.c+= ${CC_WNO_FORMAT_TRUNCATION} ${CC_WNO_STRINGOP_TRUNCATION} 951.124SlukemCOPTS.meta.c+= ${CC_WNO_FORMAT_TRUNCATION} 961.120SrilligCOPTS.var.c+= -Wno-format-nonliteral # strftime 971.108Srillig 981.71SrilligCPPFLAGS+= -DMAKE_NATIVE 991.29Ssjg 1001.72Srillig.if defined(TOOLDIR) 1011.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc. 1021.71SrilligCPPFLAGS+= -DUSE_EMALLOC 1031.71SrilligLDADD+= -lutil 1041.71SrilligDPADD+= ${LIBUTIL} 1051.38Schristos.endif 1061.37Schristos 1071.79SrilligCOPTS+= -Wdeclaration-after-statement 1081.79Srillig 1091.29Ssjg# A simple unit-test driver to help catch regressions 1101.91SsjgTEST_MAKE ?= ${.OBJDIR}/${PROG:T} 1111.73Srilligtest: .MAKE 1121.73Srillig cd ${.CURDIR}/unit-tests \ 1131.92Srillig && MAKEFLAGS= ${TEST_MAKE} -r -m / TEST_MAKE=${TEST_MAKE} ${TESTS:DTESTS=${TESTS:Q}} ${.TARGET} 1141.73Srillig.if ${USE_COVERAGE} == yes 1151.111Srillig ${MAKE} report-coverage 1161.73Srillig.endif 1171.73Srillig 1181.89Srilligaccept sync-mi: .MAKE 1191.96Srillig cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET} 1201.76Srillig 1211.76Srilligretest: 1221.76Srillig ${.MAKE} -C ${.CURDIR}/unit-tests cleandir 1231.76Srillig.if ${USE_COVERAGE} == yes 1241.76Srillig rm -f *.gcov *.gcda 1251.76Srillig.endif 1261.76Srillig ${.MAKE} test 1271.102Srillig 1281.102Srillig# Just out of curiosity, during development. 1291.102Srillig.SUFFIXES: .cpre .casm 1301.102Srillig.c.cpre: 1311.105Srillig ${COMPILE.c:S,^-c$,-E,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1321.102Srillig.c.casm: 1331.105Srillig ${COMPILE.c:S,^-c$,-S,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1341.109Srillig 1351.110Srilligtest-coverage: .PHONY 1361.110Srillig @make -s clean cleandir 1371.110Srillig @env USE_COVERAGE=yes COPTS="-O0 -ggdb" USER_CPPFLAGS="-DCLEANUP" \ 1381.110Srillig sh -c 'make -s all -j8 && make -s test' 1391.121Srillig @env USE_COVERAGE=yes make report-coverage > coverage.txt 1401.110Srillig 1411.118Srillig.if ${USE_COVERAGE} == "yes" 1421.111Srilligreport-coverage: .PHONY 1431.111Srillig @echo 'covered uncovered file' 1441.118Srillig @${GCOV} ${GCOV_OPTS} *.gcda \ 1451.111Srillig | perl -ne ${GCOV_PERL:Q} \ 1461.125Srillig | sort -r -k4 \ 1471.125Srillig | sort -nr -k1 1481.111Srillig @sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov 1491.118Srillig.endif 1501.111Srillig 1511.109Srillig.include <bsd.prog.mk> 1521.109Srillig.include <bsd.subdir.mk> 1531.109Srillig 1541.109Srillig# For -DCLEANUP and similar feature toggles. 1551.109SrilligCPPFLAGS+= ${USER_CPPFLAGS} 1561.109Srillig# For overriding -std=gnu99 or similar options. 1571.109SrilligCFLAGS+= ${USER_CFLAGS} 158