From: Simon Schubert Date: Sun, 2 Aug 2009 17:13:08 +0000 (+0200) Subject: bsd.*.mk: allow the setting of separate compile flags for files X-Git-Tag: v2.4.0~376^2~2^2~4^2~12 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/6d68f83fef807ce255df27c2482db0d58ff71744 bsd.*.mk: allow the setting of separate compile flags for files Our makefile infrastructure assumed that all compile flags for all files are the same. Now you can specify compile flags for file groups, much like for FILES and INCS. This does not support files with pathname components yet. For this to work, we'd need support in make to retrieve the full seached path of a file. --- diff --git a/share/mk/bsd.dep.mk b/share/mk/bsd.dep.mk index 596ed4c311..6ad6e12ec4 100644 --- a/share/mk/bsd.dep.mk +++ b/share/mk/bsd.dep.mk @@ -109,33 +109,60 @@ depend: beforedepend ${DEPENDFILE} afterdepend # Different types of sources are compiled with slightly different flags. # Split up the sources, and filter out headers and non-applicable flags. -${DEPENDFILE}: ${SRCS} - rm -f ${DEPENDFILE} -.if ${SRCS:M*.[sS]} != "" - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ +# Separate flag groups out of the sources and treat them differently. +# The special "_" group is for all files not in any group. +__FLAGS= +__FLAGS_FILES= ${SRCS} +.for _FG in ${FLAGS_GROUPS} +.for _FFILE in ${${_FG}_FLAGS_FILES} +__FLAGS_FILES:= ${__FLAGS_FILES:N${_FFILE}} +.endfor +.endfor + +_DEPENDFILES= .depend__ ${FLAGS_GROUPS:S/^/.depend_/g} +.ORDER: ${_DEPENDFILES} + +${DEPENDFILE}: ${_DEPENDFILES} + cat ${_DEPENDFILES} > ${.TARGET} + -rm -f ${_DEPENDFILES} + +.for _FG in _ ${FLAGS_GROUPS} +.depend_${_FG}: ${${_FG}_FLAGS_FILES} + -rm -f ${.TARGET} + -> ${.TARGET} +.if ${${_FG}_FLAGS_FILES:M*.[sS]} != "" + ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \ + ${${_FG}_FLAGS} \ ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ ${AINC} \ ${.ALLSRC:M*.[sS]} .endif -.if ${SRCS:M*.c} != "" - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ +.if ${${_FG}_FLAGS_FILES:M*.c} != "" + ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \ + ${${_FG}_FLAGS} \ ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ ${CFLAGS:M-std=*} \ ${.ALLSRC:M*.c} .endif -.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cpp} != "" || \ - ${SRCS:M*.cxx} != "" - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ +.if ${${_FG}_FLAGS_FILES:M*.cc} != "" || \ + ${${_FG}_FLAGS_FILES:M*.C} != "" || \ + ${${_FG}_FLAGS_FILES:M*.cpp} != "" || \ + ${${_FG}_FLAGS_FILES:M*.cxx} != "" + ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \ + ${${_FG}_FLAGS} \ ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \ ${CXXFLAGS:M-std=*} \ ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} .endif -.if ${SRCS:M*.m} != "" - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ +.if ${${_FG}_FLAGS_FILES:M*.m} != "" + ${MKDEPCMD} -f ${.TARGET} -a ${MKDEP} \ + ${${_FG}_FLAGS} \ ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \ ${OBJCFLAGS:M-Wno-import*} \ ${.ALLSRC:M*.m} .endif +.endfor + .if target(_EXTRADEPEND) _EXTRADEPEND: .USE ${DEPENDFILE}: _EXTRADEPEND @@ -160,9 +187,9 @@ afterdepend: cleandepend: .if defined(SRCS) .if ${CTAGS:T} == "ctags" - rm -f ${DEPENDFILE} tags + rm -f ${DEPENDFILE} ${_DEPENDFILES} tags .elif ${CTAGS:T} == "gtags" - rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS + rm -f ${DEPENDFILE} ${_DEPENDFILES} GPATH GRTAGS GSYMS GTAGS .if defined(HTML) rm -rf HTML .endif diff --git a/share/mk/bsd.files.mk b/share/mk/bsd.files.mk index da8d6cc522..d2be5db71d 100644 --- a/share/mk/bsd.files.mk +++ b/share/mk/bsd.files.mk @@ -68,3 +68,9 @@ _${group}INS: ${_${group}FILES} realinstall: installfiles .ORDER: beforeinstall installfiles + +.for _FG in ${FLAGS_GROUPS} +.for _FFILE in ${${_FG}_FLAGS_FILES} +_${_FFILE}_FLAGS= ${${_FG}_FLAGS} +.endfor +.endfor diff --git a/share/mk/bsd.hostlib.mk b/share/mk/bsd.hostlib.mk index 43e60be7ab..38de38f49c 100644 --- a/share/mk/bsd.hostlib.mk +++ b/share/mk/bsd.hostlib.mk @@ -8,12 +8,12 @@ .SUFFIXES: .out .no .c .cc .cpp .cxx .C .y .l .c.no: - ${NXCC} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${NXCC} ${_${.IMPSRC}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET} @${NXLD} -o ${.TARGET}.tmp -x -r ${.TARGET} @mv ${.TARGET}.tmp ${.TARGET} .cc.no .C.no .cpp.no .cxx.no: - ${NXCXX} ${NXCXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${NXCXX} ${_${.IMPSRC}_FLAGS} ${NXCXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} @${NXLD} -o ${.TARGET}.tmp -x -r ${.TARGET} @mv ${.TARGET}.tmp ${.TARGET} diff --git a/share/mk/bsd.lib.mk b/share/mk/bsd.lib.mk index 00fa7b27be..5d1a073d9a 100644 --- a/share/mk/bsd.lib.mk +++ b/share/mk/bsd.lib.mk @@ -49,61 +49,61 @@ PICFLAG=-fpic PO_FLAG=-pg .c.o: - ${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} .c.po: - ${CC} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} .c.So: - ${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET} .cc.o .C.o .cpp.o .cxx.o: - ${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} .cc.po .C.po .cpp.po .cxx.po: - ${CXX} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PO_FLAG} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} .cc.So .C.So .cpp.So .cxx.So: - ${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${CXX} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET} .f.o: - ${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} + ${FC} ${_${.IMPSRC:T}_FLAGS} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} .f.po: - ${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} + ${FC} ${_${.IMPSRC:T}_FLAGS} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} .f.So: - ${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} + ${FC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} .m.o: - ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} .m.po: - ${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} + ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET} .m.So: - ${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET} .s.o: - ${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ + ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \ ${.IMPSRC} -o ${.TARGET} .s.po: - ${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ + ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \ ${.IMPSRC} -o ${.TARGET} .s.So: - ${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ + ${CC} ${_${.IMPSRC:T}_FLAGS} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \ ${AINC} -c ${.IMPSRC} -o ${.TARGET} .S.o: - ${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} .S.po: - ${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET} .S.So: - ${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ + ${CC} ${_${.IMPSRC:T}_FLAGS} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \ -o ${.TARGET} all: objwarn diff --git a/share/mk/sys.mk b/share/mk/sys.mk index 2cc6bd12be..c5b26f968f 100644 --- a/share/mk/sys.mk +++ b/share/mk/sys.mk @@ -206,35 +206,35 @@ MACHINE=i386 chmod a+x ${.TARGET} .c: - ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} .c.o: - ${CC} ${CFLAGS} -c ${.IMPSRC} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} .cc .cpp .cxx .C: - ${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} + ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} .cc.o .cpp.o .cxx.o .C.o: - ${CXX} ${CXXFLAGS} -c ${.IMPSRC} + ${CXX} ${_${.IMPSRC:T}_FLAGS} ${CXXFLAGS} -c ${.IMPSRC} .m.o: - ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} + ${OBJC} ${_${.IMPSRC:T}_FLAGS} ${OBJCFLAGS} -c ${.IMPSRC} .p.o: - ${PC} ${PFLAGS} -c ${.IMPSRC} + ${PC} ${_${.IMPSRC:T}_FLAGS} ${PFLAGS} -c ${.IMPSRC} .e .r .F .f: - ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \ - -o ${.TARGET} + ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} \ + ${.IMPSRC} ${LDLIBS} -o ${.TARGET} .e.o .r.o .F.o .f.o: - ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC} + ${FC} ${_${.IMPSRC:T}_FLAGS} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC} .S.o: - ${CC} ${CFLAGS} -c ${.IMPSRC} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} -c ${.IMPSRC} .s.o: - ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} + ${AS} ${_${.IMPSRC:T}_FLAGS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC} # XXX not -j safe .y.o: @@ -250,7 +250,7 @@ MACHINE=i386 # .no == native object file, for helper code when cross building. # .c.no: - ${NXCC} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET} + ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} -c ${.IMPSRC} -o ${.TARGET} .y.no: ${YACC} ${YFLAGS} ${.IMPSRC} @@ -263,7 +263,8 @@ MACHINE=i386 rm -f ${.TARGET}.c .no.nx .c.nx: - ${NXCC} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} ${NXLDLIBS} -o ${.TARGET} + ${NXCC} ${_${.IMPSRC:T}_FLAGS} ${NXCFLAGS} ${NXLDFLAGS} ${.IMPSRC} \ + ${NXLDLIBS} -o ${.TARGET} # XXX not -j safe .y.c: @@ -274,11 +275,11 @@ MACHINE=i386 ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET} .s.out .c.out .o.out: - ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} + ${CC} ${_${.IMPSRC:T}_FLAGS} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} .f.out .F.out .r.out .e.out: - ${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \ - ${LDLIBS} -o ${.TARGET} + ${FC} ${_${.IMPSRC:T}_FLAGS} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} \ + ${.IMPSRC} ${LDLIBS} -o ${.TARGET} rm -f ${.PREFIX}.o # XXX not -j safe