Makefile revision 1.113
11.113Srillig# $NetBSD: Makefile,v 1.113 2021/02/22 20:45:46 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.83SrilligSRCS+= enum.c 111.82SrilligSRCS+= for.c 121.82SrilligSRCS+= hash.c 131.82SrilligSRCS+= job.c 141.82SrilligSRCS+= lst.c 151.82SrilligSRCS+= main.c 161.82SrilligSRCS+= make.c 171.82SrilligSRCS+= make_malloc.c 181.82SrilligSRCS+= metachar.c 191.82SrilligSRCS+= parse.c 201.82SrilligSRCS+= str.c 211.82SrilligSRCS+= suff.c 221.82SrilligSRCS+= targ.c 231.82SrilligSRCS+= trace.c 241.82SrilligSRCS+= var.c 251.82SrilligSRCS+= util.c 261.82SrilligHDRS= buf.h 271.82SrilligHDRS+= config.h 281.82SrilligHDRS+= dir.h 291.83SrilligHDRS+= enum.h 301.82SrilligHDRS+= hash.h 311.82SrilligHDRS+= job.h 321.82SrilligHDRS+= lst.h 331.82SrilligHDRS+= make.h 341.82SrilligHDRS+= make_malloc.h 351.82SrilligHDRS+= meta.h 361.82SrilligHDRS+= metachar.h 371.82SrilligHDRS+= nonints.h 381.82SrilligHDRS+= pathnames.h 391.82SrilligHDRS+= trace.h 401.40Sdsl 411.80Srillig# Whether to generate a coverage report after running the tests. 421.73SrilligUSE_COVERAGE?= no # works only with gcc; clang9 fails to link 431.73Srillig.if ${USE_COVERAGE} == "yes" 441.87SrilligGCOV?= gcov 451.90SrilligCOPTS+= --coverage -O0 -ggdb 461.111SrilligGCOV_PERL= if (/^File '(?:.*\/)?(\S+)'/) { 471.107SrilligGCOV_PERL+= $$file = $$1; $$func = ""; 481.107SrilligGCOV_PERL+= } elsif (/^Function '(\S+)'/) { 491.107SrilligGCOV_PERL+= $$func = $$1; 501.111SrilligGCOV_PERL+= } elsif (/^Lines executed:(\d+\.\d+)% of (\d+)/ && defined($$file)) { 511.111SrilligGCOV_PERL+= my ($$percent, $$lines) = ($$1, $$2); 521.111SrilligGCOV_PERL+= my $$uncovered = `grep -c '\#\#\#\#\#:' < \$$(basename $$file.gcov)`; 531.111SrilligGCOV_PERL+= printf("%7.2f %4d/%4d %s%s\n", 541.111SrilligGCOV_PERL+= $$percent, $$uncovered, $$lines, $$file, $$func); 551.111SrilligGCOV_PERL+= $$file = undef; 561.107SrilligGCOV_PERL+= } 571.77SrilligLDADD+= --coverage 581.73Srillig.endif 591.85SrilligCLEANFILES+= *.gcda *.gcno *.gcov 601.73Srillig 611.80Srillig# Whether to compile using the Undefined Behavior Sanitizer (GCC, Clang). 621.77SrilligUSE_UBSAN?= no 631.77Srillig.if ${USE_UBSAN} == "yes" 641.77SrilligCOPTS+= -fsanitize=undefined 651.77SrilligLDADD+= -fsanitize=undefined 661.77Srillig.endif 671.77Srillig 681.87Srillig# Whether to compile with GCC 10 from pkgsrc, during development. 691.87SrilligUSE_GCC10?= no 701.87Srillig.if ${USE_GCC10} == "yes" 711.87Srillig# CC is set further down in this file 721.87SrilligCOPTS+= -Wno-attributes # for abs and labs 731.87SrilligCOPTS.arch.c+= -Wno-error=format-truncation 741.87SrilligCOPTS.dir.c+= -Wno-error=format-truncation 751.87SrilligCOPTS.main.c+= -Wno-error=format-truncation 761.87SrilligCOPTS.meta.c+= -Wno-error=format-truncation 771.87Srillig.endif 781.87Srillig 791.84Srillig# Whether to compile with GCC 9 from pkgsrc, during development. 801.84SrilligUSE_GCC9?= no 811.84Srillig.if ${USE_GCC9} == "yes" 821.84Srillig# CC is set further down in this file 831.84SrilligCOPTS+= -Wno-attributes # for abs and labs 841.84SrilligCOPTS.arch.c+= -Wno-error=format-truncation 851.84SrilligCOPTS.dir.c+= -Wno-error=format-truncation 861.84SrilligCOPTS.main.c+= -Wno-error=format-truncation 871.84SrilligCOPTS.meta.c+= -Wno-error=format-truncation 881.84Srillig.endif 891.84Srillig 901.87Srillig# Whether to compile with GCC 8 from pkgsrc, during development. 911.87SrilligUSE_GCC8?= no 921.87Srillig.if ${USE_GCC8} == "yes" 931.87Srillig# CC is set further down in this file 941.87SrilligCOPTS+= -Wno-attributes # for abs and labs 951.87SrilligCOPTS.arch.c+= -Wno-error=format-truncation 961.87SrilligCOPTS.dir.c+= -Wno-error=format-truncation 971.87SrilligCOPTS.main.c+= -Wno-error=format-truncation 981.87SrilligCOPTS.meta.c+= -Wno-error=format-truncation 991.87Srillig.endif 1001.87Srillig 1011.71SrilligUSE_META?= yes 1021.51Ssjg.if ${USE_META:tl} != "no" 1031.68Sriastrad 1041.71SrilligSRCS+= meta.c 1051.71SrilligCPPFLAGS+= -DUSE_META 1061.68Sriastrad 1071.71SrilligUSE_FILEMON?= ktrace 1081.72Srillig. if ${USE_FILEMON:tl} != "no" 1091.68Sriastrad 1101.67Sriastrad.PATH: ${.CURDIR}/filemon 1111.71SrilligSRCS+= filemon_${USE_FILEMON}.c 1121.71SrilligCPPFLAGS+= -DUSE_FILEMON 1131.71SrilligCPPFLAGS+= -DUSE_FILEMON_${USE_FILEMON:tu} 1141.68Sriastrad 1151.72Srillig. if ${USE_FILEMON} == "dev" 1161.71SrilligFILEMON_H?= /usr/include/dev/filemon/filemon.h 1171.72Srillig. if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h" 1181.71SrilligCOPTS.filemon_dev.c+= \ 1191.71Srillig -DHAVE_FILEMON_H -I${FILEMON_H:H} 1201.72Srillig. endif 1211.72Srillig. endif 1221.72Srillig. endif 1231.65Smaxv.endif 1241.51Ssjg 1251.60SchristosSUBDIR.roff+= PSD.doc 1261.29Ssjg.if make(obj) || make(clean) 1271.71SrilligSUBDIR+= unit-tests 1281.29Ssjg.endif 1291.1Scgd 1301.112SrilligLINTFLAGS+= -T # strict bool mode, available since 2021-01-11 1311.112Srillig 1321.82Srillig${SRCS:M*.c:.c=.o}: ${HDRS} 1331.99SrilligCLEANFILES+= *.o 1341.75Srillig 1351.108SrilligCOPTS.arch.c+= ${GCC_NO_FORMAT_TRUNCATION} 1361.108SrilligCOPTS.dir.c+= ${GCC_NO_FORMAT_TRUNCATION} 1371.108SrilligCOPTS.job.c+= -Wno-format-nonliteral 1381.108SrilligCOPTS.main.c+= ${GCC_NO_FORMAT_TRUNCATION} ${GCC_NO_STRINGOP_TRUNCATION} 1391.108SrilligCOPTS.meta.c+= ${GCC_NO_FORMAT_TRUNCATION} 1401.108SrilligCOPTS.parse.c+= -Wno-format-nonliteral 1411.108SrilligCOPTS.var.c+= -Wno-format-nonliteral 1421.108Srillig 1431.71SrilligCPPFLAGS+= -DMAKE_NATIVE 1441.29Ssjg 1451.87Srillig.if ${USE_GCC10} == "yes" 1461.97SrilligGCC10BASE?= /usr/pkg/gcc10 1471.109SrilligLATE_CC= ${GCC10BASE}/bin/gcc 1481.87SrilligGCOV= ${GCC10BASE}/bin/gcov 1491.87Srillig.endif 1501.87Srillig 1511.84Srillig.if ${USE_GCC9} == "yes" 1521.87SrilligGCC9BASE?= /usr/pkg/gcc9 1531.109SrilligLATE_CC= ${GCC9BASE}/bin/gcc 1541.87SrilligGCOV= ${GCC9BASE}/bin/gcov 1551.87Srillig.endif 1561.87Srillig 1571.87Srillig.if ${USE_GCC8} == "yes" 1581.87SrilligGCC8BASE?= /usr/pkg/gcc8 1591.109SrilligLATE_CC= ${GCC8BASE}/bin/gcc 1601.87SrilligGCOV= ${GCC8BASE}/bin/gcov 1611.84Srillig.endif 1621.84Srillig 1631.72Srillig.if defined(TOOLDIR) 1641.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc. 1651.71SrilligCPPFLAGS+= -DUSE_EMALLOC 1661.71SrilligLDADD+= -lutil 1671.71SrilligDPADD+= ${LIBUTIL} 1681.38Schristos.endif 1691.37Schristos 1701.79SrilligCOPTS+= -Wdeclaration-after-statement 1711.79Srillig 1721.29Ssjg# A simple unit-test driver to help catch regressions 1731.91SsjgTEST_MAKE ?= ${.OBJDIR}/${PROG:T} 1741.73Srilligtest: .MAKE 1751.73Srillig cd ${.CURDIR}/unit-tests \ 1761.92Srillig && MAKEFLAGS= ${TEST_MAKE} -r -m / TEST_MAKE=${TEST_MAKE} ${TESTS:DTESTS=${TESTS:Q}} ${.TARGET} 1771.73Srillig.if ${USE_COVERAGE} == yes 1781.111Srillig ${MAKE} report-coverage 1791.73Srillig.endif 1801.73Srillig 1811.89Srilligaccept sync-mi: .MAKE 1821.96Srillig cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET} 1831.76Srillig 1841.76Srilligretest: 1851.76Srillig ${.MAKE} -C ${.CURDIR}/unit-tests cleandir 1861.76Srillig.if ${USE_COVERAGE} == yes 1871.76Srillig rm -f *.gcov *.gcda 1881.76Srillig.endif 1891.76Srillig ${.MAKE} test 1901.102Srillig 1911.102Srillig# Just out of curiosity, during development. 1921.102Srillig.SUFFIXES: .cpre .casm 1931.102Srillig.c.cpre: 1941.105Srillig ${COMPILE.c:S,^-c$,-E,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1951.102Srillig.c.casm: 1961.105Srillig ${COMPILE.c:S,^-c$,-S,} ${COPTS.${.IMPSRC}} ${.IMPSRC} -o ${.TARGET} 1971.109Srillig 1981.110Srilligtest-coverage: .PHONY 1991.110Srillig @make -s clean cleandir 2001.110Srillig @env USE_COVERAGE=yes COPTS="-O0 -ggdb" USER_CPPFLAGS="-DCLEANUP" \ 2011.110Srillig sh -c 'make -s all -j8 && make -s test' 2021.110Srillig 2031.111Srilligreport-coverage: .PHONY 2041.111Srillig @echo 'covered uncovered file' 2051.113Srillig @${GCOV} ${GCOV_OPTS} *.gcda 2>&1 \ 2061.111Srillig | perl -ne ${GCOV_PERL:Q} \ 2071.111Srillig | sort -nr 2081.111Srillig @sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov 2091.111Srillig 2101.109Srillig.include <bsd.prog.mk> 2111.109Srillig.include <bsd.subdir.mk> 2121.109Srillig 2131.109Srillig# For -DCLEANUP and similar feature toggles. 2141.109SrilligCPPFLAGS+= ${USER_CPPFLAGS} 2151.109Srillig# For overriding -std=gnu99 or similar options. 2161.109SrilligCFLAGS+= ${USER_CFLAGS} 2171.109Srillig.if defined(LATE_CC) 2181.109SrilligCC= ${LATE_CC} 2191.109Srillig.endif 220