Makefile revision 1.121
11.121Srillig# $NetBSD: Makefile,v 1.121 2022/01/26 23:00:55 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.40Sdsl 261.80Srillig# Whether to generate a coverage report after running the tests. 271.73SrilligUSE_COVERAGE?= no # works only with gcc; clang9 fails to link 281.73Srillig.if ${USE_COVERAGE} == "yes" 291.87SrilligGCOV?= gcov 301.90SrilligCOPTS+= --coverage -O0 -ggdb 311.111SrilligGCOV_PERL= if (/^File '(?:.*\/)?(\S+)'/) { 321.107SrilligGCOV_PERL+= $$file = $$1; $$func = ""; 331.107SrilligGCOV_PERL+= } elsif (/^Function '(\S+)'/) { 341.107SrilligGCOV_PERL+= $$func = $$1; 351.111SrilligGCOV_PERL+= } elsif (/^Lines executed:(\d+\.\d+)% of (\d+)/ && defined($$file)) { 361.111SrilligGCOV_PERL+= my ($$percent, $$lines) = ($$1, $$2); 371.119SrilligGCOV_PERL+= my $$uncovered = 381.119SrilligGCOV_PERL+= $$percent eq '100.00' ? '0' 391.119SrilligGCOV_PERL+= : $$file =~ /\.h$$/ ? '?' 401.115SrilligGCOV_PERL+= : `grep -c '\#\#\#\#\#:' < \$$(basename $$file.gcov)`; 411.115SrilligGCOV_PERL+= chomp($$uncovered); 421.115SrilligGCOV_PERL+= printf("%7.2f %4s/%4d %s%s\n", 431.111SrilligGCOV_PERL+= $$percent, $$uncovered, $$lines, $$file, $$func); 441.111SrilligGCOV_PERL+= $$file = undef; 451.107SrilligGCOV_PERL+= } 461.77SrilligLDADD+= --coverage 471.73Srillig.endif 481.85SrilligCLEANFILES+= *.gcda *.gcno *.gcov 491.73Srillig 501.80Srillig# Whether to compile using the Undefined Behavior Sanitizer (GCC, Clang). 511.77SrilligUSE_UBSAN?= no 521.77Srillig.if ${USE_UBSAN} == "yes" 531.77SrilligCOPTS+= -fsanitize=undefined 541.77SrilligLDADD+= -fsanitize=undefined 551.77Srillig.endif 561.77Srillig 571.87Srillig# Whether to compile with GCC 10 from pkgsrc, during development. 581.87SrilligUSE_GCC10?= no 591.87Srillig.if ${USE_GCC10} == "yes" 601.87Srillig# CC is set further down in this file 611.87SrilligCOPTS+= -Wno-attributes # for abs and labs 621.87SrilligCOPTS.arch.c+= -Wno-error=format-truncation 631.87SrilligCOPTS.dir.c+= -Wno-error=format-truncation 641.87SrilligCOPTS.main.c+= -Wno-error=format-truncation 651.87SrilligCOPTS.meta.c+= -Wno-error=format-truncation 661.87Srillig.endif 671.87Srillig 681.84Srillig# Whether to compile with GCC 9 from pkgsrc, during development. 691.84SrilligUSE_GCC9?= no 701.84Srillig.if ${USE_GCC9} == "yes" 711.84Srillig# CC is set further down in this file 721.84SrilligCOPTS+= -Wno-attributes # for abs and labs 731.84SrilligCOPTS.arch.c+= -Wno-error=format-truncation 741.84SrilligCOPTS.dir.c+= -Wno-error=format-truncation 751.84SrilligCOPTS.main.c+= -Wno-error=format-truncation 761.84SrilligCOPTS.meta.c+= -Wno-error=format-truncation 771.84Srillig.endif 781.84Srillig 791.87Srillig# Whether to compile with GCC 8 from pkgsrc, during development. 801.87SrilligUSE_GCC8?= no 811.87Srillig.if ${USE_GCC8} == "yes" 821.87Srillig# CC is set further down in this file 831.87SrilligCOPTS+= -Wno-attributes # for abs and labs 841.87SrilligCOPTS.arch.c+= -Wno-error=format-truncation 851.87SrilligCOPTS.dir.c+= -Wno-error=format-truncation 861.87SrilligCOPTS.main.c+= -Wno-error=format-truncation 871.87SrilligCOPTS.meta.c+= -Wno-error=format-truncation 881.87Srillig.endif 891.87Srillig 901.71SrilligUSE_META?= yes 911.51Ssjg.if ${USE_META:tl} != "no" 921.68Sriastrad 931.71SrilligSRCS+= meta.c 941.71SrilligCPPFLAGS+= -DUSE_META 951.68Sriastrad 961.71SrilligUSE_FILEMON?= ktrace 971.72Srillig. if ${USE_FILEMON:tl} != "no" 981.68Sriastrad 991.67Sriastrad.PATH: ${.CURDIR}/filemon 1001.71SrilligSRCS+= filemon_${USE_FILEMON}.c 1011.71SrilligCPPFLAGS+= -DUSE_FILEMON 1021.71SrilligCPPFLAGS+= -DUSE_FILEMON_${USE_FILEMON:tu} 1031.68Sriastrad 1041.72Srillig. if ${USE_FILEMON} == "dev" 1051.71SrilligFILEMON_H?= /usr/include/dev/filemon/filemon.h 1061.72Srillig. if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h" 1071.71SrilligCOPTS.filemon_dev.c+= \ 1081.71Srillig -DHAVE_FILEMON_H -I${FILEMON_H:H} 1091.72Srillig. endif 1101.72Srillig. endif 1111.72Srillig. endif 1121.65Smaxv.endif 1131.51Ssjg 1141.60SchristosSUBDIR.roff+= PSD.doc 1151.29Ssjg.if make(obj) || make(clean) 1161.71SrilligSUBDIR+= unit-tests 1171.29Ssjg.endif 1181.1Scgd 1191.112SrilligLINTFLAGS+= -T # strict bool mode, available since 2021-01-11 1201.116SrilligLINTFLAGS+= -w # treat warnings as errors 1211.114SrilligCLEANFILES+= *.o # for filemon objects 1221.75Srillig 1231.108SrilligCOPTS.arch.c+= ${GCC_NO_FORMAT_TRUNCATION} 1241.108SrilligCOPTS.dir.c+= ${GCC_NO_FORMAT_TRUNCATION} 1251.120SrilligCOPTS.job.c+= -Wno-format-nonliteral # custom shell templates 1261.108SrilligCOPTS.main.c+= ${GCC_NO_FORMAT_TRUNCATION} ${GCC_NO_STRINGOP_TRUNCATION} 1271.108SrilligCOPTS.meta.c+= ${GCC_NO_FORMAT_TRUNCATION} 1281.120SrilligCOPTS.var.c+= -Wno-format-nonliteral # strftime 1291.108Srillig 1301.71SrilligCPPFLAGS+= -DMAKE_NATIVE 1311.29Ssjg 1321.87Srillig.if ${USE_GCC10} == "yes" 1331.97SrilligGCC10BASE?= /usr/pkg/gcc10 1341.109SrilligLATE_CC= ${GCC10BASE}/bin/gcc 1351.87SrilligGCOV= ${GCC10BASE}/bin/gcov 1361.87Srillig.endif 1371.87Srillig 1381.84Srillig.if ${USE_GCC9} == "yes" 1391.87SrilligGCC9BASE?= /usr/pkg/gcc9 1401.109SrilligLATE_CC= ${GCC9BASE}/bin/gcc 1411.87SrilligGCOV= ${GCC9BASE}/bin/gcov 1421.87Srillig.endif 1431.87Srillig 1441.87Srillig.if ${USE_GCC8} == "yes" 1451.87SrilligGCC8BASE?= /usr/pkg/gcc8 1461.109SrilligLATE_CC= ${GCC8BASE}/bin/gcc 1471.87SrilligGCOV= ${GCC8BASE}/bin/gcov 1481.84Srillig.endif 1491.84Srillig 1501.72Srillig.if defined(TOOLDIR) 1511.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc. 1521.71SrilligCPPFLAGS+= -DUSE_EMALLOC 1531.71SrilligLDADD+= -lutil 1541.71SrilligDPADD+= ${LIBUTIL} 1551.38Schristos.endif 1561.37Schristos 1571.79SrilligCOPTS+= -Wdeclaration-after-statement 1581.79Srillig 1591.29Ssjg# A simple unit-test driver to help catch regressions 1601.91SsjgTEST_MAKE ?= ${.OBJDIR}/${PROG:T} 1611.73Srilligtest: .MAKE 1621.73Srillig cd ${.CURDIR}/unit-tests \ 1631.92Srillig && MAKEFLAGS= ${TEST_MAKE} -r -m / TEST_MAKE=${TEST_MAKE} ${TESTS:DTESTS=${TESTS:Q}} ${.TARGET} 1641.73Srillig.if ${USE_COVERAGE} == yes 1651.111Srillig ${MAKE} report-coverage 1661.73Srillig.endif 1671.73Srillig 1681.89Srilligaccept sync-mi: .MAKE 1691.96Srillig cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET} 1701.76Srillig 1711.76Srilligretest: 1721.76Srillig ${.MAKE} -C ${.CURDIR}/unit-tests cleandir 1731.76Srillig.if ${USE_COVERAGE} == yes 1741.76Srillig rm -f *.gcov *.gcda 1751.76Srillig.endif 1761.76Srillig ${.MAKE} test 1771.102Srillig 1781.102Srillig# Just out of curiosity, during development. 1791.102Srillig.SUFFIXES: .cpre .casm 1801.102Srillig.c.cpre: 1811.105Srillig ${COMPILE.c:S,^-c$,-E,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1821.102Srillig.c.casm: 1831.105Srillig ${COMPILE.c:S,^-c$,-S,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1841.109Srillig 1851.110Srilligtest-coverage: .PHONY 1861.110Srillig @make -s clean cleandir 1871.110Srillig @env USE_COVERAGE=yes COPTS="-O0 -ggdb" USER_CPPFLAGS="-DCLEANUP" \ 1881.110Srillig sh -c 'make -s all -j8 && make -s test' 1891.121Srillig @env USE_COVERAGE=yes make report-coverage > coverage.txt 1901.110Srillig 1911.118Srillig.if ${USE_COVERAGE} == "yes" 1921.111Srilligreport-coverage: .PHONY 1931.111Srillig @echo 'covered uncovered file' 1941.118Srillig @${GCOV} ${GCOV_OPTS} *.gcda \ 1951.111Srillig | perl -ne ${GCOV_PERL:Q} \ 1961.111Srillig | sort -nr 1971.111Srillig @sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov 1981.118Srillig.endif 1991.111Srillig 2001.109Srillig.include <bsd.prog.mk> 2011.109Srillig.include <bsd.subdir.mk> 2021.109Srillig 2031.109Srillig# For -DCLEANUP and similar feature toggles. 2041.109SrilligCPPFLAGS+= ${USER_CPPFLAGS} 2051.109Srillig# For overriding -std=gnu99 or similar options. 2061.109SrilligCFLAGS+= ${USER_CFLAGS} 2071.109Srillig.if defined(LATE_CC) 2081.109SrilligCC= ${LATE_CC} 2091.109Srillig.endif 210