bsd.*.mk: allow the setting of separate compile flags for files
authorSimon Schubert <corecode@dragonflybsd.org>
Sun, 2 Aug 2009 17:13:08 +0000 (19:13 +0200)
committerSimon Schubert <corecode@dragonflybsd.org>
Sun, 2 Aug 2009 17:13:10 +0000 (19:13 +0200)
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.

share/mk/bsd.dep.mk
share/mk/bsd.files.mk
share/mk/bsd.hostlib.mk
share/mk/bsd.lib.mk
share/mk/sys.mk

index 596ed4c..6ad6e12 100644 (file)
@@ -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
index da8d6cc..d2be5db 100644 (file)
@@ -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
index 43e60be..38de38f 100644 (file)
@@ -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}
 
index 00fa7b2..5d1a073 100644 (file)
@@ -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
index 2cc6bd1..c5b26f9 100644 (file)
@@ -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