Makefile revision 1.85
11.85Srillig#	$NetBSD: Makefile,v 1.85 2020/08/10 18:20:28 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+=  strlist.c
221.82SrilligSRCS+=  suff.c
231.82SrilligSRCS+=  targ.c
241.82SrilligSRCS+=  trace.c
251.82SrilligSRCS+=  var.c
261.82SrilligSRCS+=  util.c
271.82SrilligHDRS=   buf.h
281.82SrilligHDRS+=  config.h
291.82SrilligHDRS+=  dir.h
301.83SrilligHDRS+=  enum.h
311.82SrilligHDRS+=  hash.h
321.82SrilligHDRS+=  job.h
331.82SrilligHDRS+=  lst.h
341.82SrilligHDRS+=  make.h
351.82SrilligHDRS+=  make_malloc.h
361.82SrilligHDRS+=  meta.h
371.82SrilligHDRS+=  metachar.h
381.82SrilligHDRS+=  nonints.h
391.82SrilligHDRS+=  pathnames.h
401.82SrilligHDRS+=  sprite.h
411.82SrilligHDRS+=  strlist.h
421.82SrilligHDRS+=  trace.h
431.40Sdsl
441.80Srillig# Whether to generate a coverage report after running the tests.
451.73SrilligUSE_COVERAGE?=	no		# works only with gcc; clang9 fails to link
461.73Srillig.if ${USE_COVERAGE} == "yes"
471.77SrilligCOPTS+=		--coverage -O0 -ggdb
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.84Srillig# Whether to compile with GCC 9 from pkgsrc, during development.
601.84SrilligUSE_GCC9?=	no
611.84Srillig.if ${USE_GCC9} == "yes"
621.84Srillig# CC is set further down in this file
631.84SrilligCOPTS+=		-Wno-attributes	# for abs and labs
641.84SrilligCOPTS.arch.c+=	-Wno-error=format-truncation
651.84SrilligCOPTS.dir.c+=	-Wno-error=format-truncation
661.84SrilligCOPTS.main.c+=	-Wno-error=format-truncation
671.84SrilligCOPTS.meta.c+=	-Wno-error=format-truncation
681.84SrilligCOPTS.parse.c+=	-Wno-error=format-truncation
691.84Srillig.endif
701.84Srillig
711.71SrilligUSE_META?=	yes
721.51Ssjg.if ${USE_META:tl} != "no"
731.68Sriastrad
741.71SrilligSRCS+=		meta.c
751.71SrilligCPPFLAGS+=	-DUSE_META
761.68Sriastrad
771.71SrilligUSE_FILEMON?=	ktrace
781.72Srillig.  if ${USE_FILEMON:tl} != "no"
791.68Sriastrad
801.67Sriastrad.PATH:	${.CURDIR}/filemon
811.71SrilligSRCS+=		filemon_${USE_FILEMON}.c
821.71SrilligCPPFLAGS+=	-DUSE_FILEMON
831.71SrilligCPPFLAGS+=	-DUSE_FILEMON_${USE_FILEMON:tu}
841.68Sriastrad
851.72Srillig.    if ${USE_FILEMON} == "dev"
861.71SrilligFILEMON_H?=	/usr/include/dev/filemon/filemon.h
871.72Srillig.      if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
881.71SrilligCOPTS.filemon_dev.c+= \
891.71Srillig		-DHAVE_FILEMON_H -I${FILEMON_H:H}
901.72Srillig.      endif
911.72Srillig.    endif
921.72Srillig.  endif
931.65Smaxv.endif
941.51Ssjg
951.60SchristosSUBDIR.roff+=	PSD.doc
961.29Ssjg.if make(obj) || make(clean)
971.71SrilligSUBDIR+=	unit-tests
981.29Ssjg.endif
991.1Scgd
1001.82Srillig${SRCS:M*.c:.c=.o}: ${HDRS}
1011.75Srillig
1021.1Scgd.include <bsd.prog.mk>
1031.16Smycroft.include <bsd.subdir.mk>
1041.24Ssjg
1051.71SrilligCPPFLAGS+=	-DMAKE_NATIVE
1061.71SrilligCOPTS.var.c+=	-Wno-cast-qual
1071.71SrilligCOPTS.job.c+=	-Wno-format-nonliteral
1081.71SrilligCOPTS.parse.c+=	-Wno-format-nonliteral
1091.71SrilligCOPTS.var.c+=	-Wno-format-nonliteral
1101.29Ssjg
1111.84Srillig.if ${USE_GCC9} == "yes"
1121.84SrilligCC=		/usr/pkg/gcc9/bin/gcc
1131.84Srillig.endif
1141.84Srillig
1151.72Srillig.if defined(TOOLDIR)
1161.71Srillig# This is a native NetBSD build, use libutil rather than the local emalloc etc.
1171.71SrilligCPPFLAGS+=	-DUSE_EMALLOC
1181.71SrilligLDADD+=		-lutil
1191.71SrilligDPADD+=		${LIBUTIL}
1201.38Schristos.endif
1211.37Schristos
1221.63SmrgCOPTS.arch.c+=	${GCC_NO_FORMAT_TRUNCATION}
1231.63SmrgCOPTS.dir.c+=	${GCC_NO_FORMAT_TRUNCATION}
1241.63SmrgCOPTS.main.c+=	${GCC_NO_FORMAT_TRUNCATION} ${GCC_NO_STRINGOP_TRUNCATION}
1251.63SmrgCOPTS.meta.c+=	${GCC_NO_FORMAT_TRUNCATION}
1261.63SmrgCOPTS.parse.c+=	${GCC_NO_FORMAT_TRUNCATION}
1271.61Smrg
1281.79SrilligCOPTS+=		-Wdeclaration-after-statement
1291.79Srillig
1301.29Ssjg# A simple unit-test driver to help catch regressions
1311.73Srilligtest: .MAKE
1321.73Srillig	cd ${.CURDIR}/unit-tests \
1331.73Srillig	&& MAKEFLAGS= ${.MAKE} -r -m / TEST_MAKE=${TEST_MAKE:U${.OBJDIR}/${PROG:T}} ${.TARGET}
1341.73Srillig.if ${USE_COVERAGE} == yes
1351.73Srillig	gcov ${SRCS}
1361.78Srillig	sed -i 's,^\([^:]*\): *[0-9]*:,\1: ,' *.gcov
1371.73Srillig.endif
1381.73Srillig
1391.73Srilligaccept: .MAKE
1401.73Srillig	cd ${.CURDIR}/unit-tests && ${.MAKE} ${.TARGET}
1411.76Srillig
1421.76Srilligretest:
1431.76Srillig	${.MAKE} -C ${.CURDIR}/unit-tests cleandir
1441.76Srillig.if ${USE_COVERAGE} == yes
1451.76Srillig	rm -f *.gcov *.gcda
1461.76Srillig.endif
1471.76Srillig	${.MAKE} test
148