11.128Srillig# $NetBSD: Makefile,v 1.128 2025/01/19 10:57:10 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.128SrilligCPPFLAGS+= -DFORK_FUNCTION=fork 321.90SrilligCOPTS+= --coverage -O0 -ggdb 331.111SrilligGCOV_PERL= if (/^File '(?:.*\/)?(\S+)'/) { 341.107SrilligGCOV_PERL+= $$file = $$1; $$func = ""; 351.107SrilligGCOV_PERL+= } elsif (/^Function '(\S+)'/) { 361.107SrilligGCOV_PERL+= $$func = $$1; 371.111SrilligGCOV_PERL+= } elsif (/^Lines executed:(\d+\.\d+)% of (\d+)/ && defined($$file)) { 381.111SrilligGCOV_PERL+= my ($$percent, $$lines) = ($$1, $$2); 391.119SrilligGCOV_PERL+= my $$uncovered = 401.119SrilligGCOV_PERL+= $$percent eq '100.00' ? '0' 411.119SrilligGCOV_PERL+= : $$file =~ /\.h$$/ ? '?' 421.115SrilligGCOV_PERL+= : `grep -c '\#\#\#\#\#:' < \$$(basename $$file.gcov)`; 431.115SrilligGCOV_PERL+= chomp($$uncovered); 441.115SrilligGCOV_PERL+= printf("%7.2f %4s/%4d %s%s\n", 451.111SrilligGCOV_PERL+= $$percent, $$uncovered, $$lines, $$file, $$func); 461.111SrilligGCOV_PERL+= $$file = undef; 471.107SrilligGCOV_PERL+= } 481.77SrilligLDADD+= --coverage 491.73Srillig.endif 501.85SrilligCLEANFILES+= *.gcda *.gcno *.gcov 511.73Srillig 521.80Srillig# Whether to compile using the Undefined Behavior Sanitizer (GCC, Clang). 531.77SrilligUSE_UBSAN?= no 541.77Srillig.if ${USE_UBSAN} == "yes" 551.77SrilligCOPTS+= -fsanitize=undefined 561.77SrilligLDADD+= -fsanitize=undefined 571.77Srillig.endif 581.77Srillig 591.71SrilligUSE_META?= yes 601.51Ssjg.if ${USE_META:tl} != "no" 611.68Sriastrad 621.71SrilligSRCS+= meta.c 631.71SrilligCPPFLAGS+= -DUSE_META 641.68Sriastrad 651.71SrilligUSE_FILEMON?= ktrace 661.72Srillig. if ${USE_FILEMON:tl} != "no" 671.68Sriastrad 681.67Sriastrad.PATH: ${.CURDIR}/filemon 691.71SrilligSRCS+= filemon_${USE_FILEMON}.c 701.71SrilligCPPFLAGS+= -DUSE_FILEMON 711.71SrilligCPPFLAGS+= -DUSE_FILEMON_${USE_FILEMON:tu} 721.68Sriastrad 731.72Srillig. if ${USE_FILEMON} == "dev" 741.71SrilligFILEMON_H?= /usr/include/dev/filemon/filemon.h 751.72Srillig. if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h" 761.71SrilligCOPTS.filemon_dev.c+= \ 771.71Srillig -DHAVE_FILEMON_H -I${FILEMON_H:H} 781.72Srillig. endif 791.72Srillig. endif 801.72Srillig. endif 811.65Smaxv.endif 821.51Ssjg 831.60SchristosSUBDIR.roff+= PSD.doc 841.126Srillig.if make(obj) || make(clean) || make(cleandir) 851.71SrilligSUBDIR+= unit-tests 861.29Ssjg.endif 871.1Scgd 881.112SrilligLINTFLAGS+= -T # strict bool mode, available since 2021-01-11 891.116SrilligLINTFLAGS+= -w # treat warnings as errors 901.114SrilligCLEANFILES+= *.o # for filemon objects 911.75Srillig 921.124SlukemCOPTS.arch.c+= ${CC_WNO_FORMAT_TRUNCATION} 931.124SlukemCOPTS.dir.c+= ${CC_WNO_FORMAT_TRUNCATION} 941.120SrilligCOPTS.job.c+= -Wno-format-nonliteral # custom shell templates 951.124SlukemCOPTS.main.c+= ${CC_WNO_FORMAT_TRUNCATION} ${CC_WNO_STRINGOP_TRUNCATION} 961.124SlukemCOPTS.meta.c+= ${CC_WNO_FORMAT_TRUNCATION} 971.120SrilligCOPTS.var.c+= -Wno-format-nonliteral # strftime 981.108Srillig 991.71SrilligCPPFLAGS+= -DMAKE_NATIVE 1001.29Ssjg 1011.72Srillig.if defined(TOOLDIR) 1021.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc. 1031.71SrilligCPPFLAGS+= -DUSE_EMALLOC 1041.71SrilligLDADD+= -lutil 1051.71SrilligDPADD+= ${LIBUTIL} 1061.38Schristos.endif 1071.37Schristos 1081.79SrilligCOPTS+= -Wdeclaration-after-statement 1091.79Srillig 1101.29Ssjg# A simple unit-test driver to help catch regressions 1111.91SsjgTEST_MAKE ?= ${.OBJDIR}/${PROG:T} 1121.73Srilligtest: .MAKE 1131.73Srillig cd ${.CURDIR}/unit-tests \ 1141.92Srillig && MAKEFLAGS= ${TEST_MAKE} -r -m / TEST_MAKE=${TEST_MAKE} ${TESTS:DTESTS=${TESTS:Q}} ${.TARGET} 1151.73Srillig.if ${USE_COVERAGE} == yes 1161.111Srillig ${MAKE} report-coverage 1171.73Srillig.endif 1181.73Srillig 1191.89Srilligaccept sync-mi: .MAKE 1201.96Srillig cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET} 1211.76Srillig 1221.76Srilligretest: 1231.76Srillig ${.MAKE} -C ${.CURDIR}/unit-tests cleandir 1241.76Srillig.if ${USE_COVERAGE} == yes 1251.76Srillig rm -f *.gcov *.gcda 1261.76Srillig.endif 1271.76Srillig ${.MAKE} test 1281.102Srillig 1291.102Srillig# Just out of curiosity, during development. 1301.102Srillig.SUFFIXES: .cpre .casm 1311.102Srillig.c.cpre: 1321.105Srillig ${COMPILE.c:S,^-c$,-E,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1331.102Srillig.c.casm: 1341.105Srillig ${COMPILE.c:S,^-c$,-S,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1351.109Srillig 1361.110Srilligtest-coverage: .PHONY 1371.110Srillig @make -s clean cleandir 1381.110Srillig @env USE_COVERAGE=yes COPTS="-O0 -ggdb" USER_CPPFLAGS="-DCLEANUP" \ 1391.110Srillig sh -c 'make -s all -j8 && make -s test' 1401.121Srillig @env USE_COVERAGE=yes make report-coverage > coverage.txt 1411.110Srillig 1421.118Srillig.if ${USE_COVERAGE} == "yes" 1431.111Srilligreport-coverage: .PHONY 1441.111Srillig @echo 'covered uncovered file' 1451.118Srillig @${GCOV} ${GCOV_OPTS} *.gcda \ 1461.111Srillig | perl -ne ${GCOV_PERL:Q} \ 1471.125Srillig | sort -r -k4 \ 1481.125Srillig | sort -nr -k1 1491.127Srillig @sed -i \ 1501.127Srillig -e '1d' \ 1511.127Srillig -e 's,^\([^:]*\): *[0-9]*:,\1: ,' \ 1521.127Srillig -e 's, *$$,,g' \ 1531.127Srillig *.gcov 1541.118Srillig.endif 1551.111Srillig 1561.109Srillig.include <bsd.prog.mk> 1571.109Srillig.include <bsd.subdir.mk> 1581.109Srillig 1591.109Srillig# For -DCLEANUP and similar feature toggles. 1601.109SrilligCPPFLAGS+= ${USER_CPPFLAGS} 1611.109Srillig# For overriding -std=gnu99 or similar options. 1621.109SrilligCFLAGS+= ${USER_CFLAGS} 163