Per-source CFLAGS revisited (was: Re: Per-source CFLAGS)

David Schultz dschultz at OCF.Berkeley.EDU
Sun Jun 29 22:01:30 PDT 2003


Okay, here's another shot at it.  In this version, sys.mk is
untouched; I have only changed bsd.lib.mk and bsd.prog.mk.  In
addition, I have made the following changes over the last version:

- Instead of CFLAGS_foo, I have used FILEFLAGS_foo.  This is more
  generic and allows for better greppability.  (Credit for
  this idea goes to Paul Richards, who suggested CFLAGSOVERRIDE.)

- The name of the variable is now based on ${.TARGET} instead of
  ${.IMPSRC}.  This makes more sense for ld, where there are
  multiple sources.

- In addition to object files compiled from C sources, you can add
  flags to C++, Objective C, and even FORTRAN sources.  You can
  pass flags to the linker on a per-target basis as well, although
  I expect this feature to be rarely useful.

Comments?

Index: share/mk/bsd.lib.mk
===================================================================
RCS file: /cvs/src/share/mk/bsd.lib.mk,v
retrieving revision 1.140
diff -u -u -r1.140 bsd.lib.mk
--- share/mk/bsd.lib.mk	10 Jun 2003 04:47:49 -0000	1.140
+++ share/mk/bsd.lib.mk	29 Jun 2003 05:03:24 -0000
@@ -53,96 +53,117 @@
 	    touch ${.TARGET}
 
 .c.o:
-	${CC} ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CC} ${CFLAGS} ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .c.po:
-	${CC} -pg ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CC} -pg ${CFLAGS} ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} \
+	    -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .c.So:
-	${CC} ${PICFLAG} -DPIC ${CFLAGS} -c ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${FILEFLAGS_${.TARGET}} \
+	    -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .cc.o .C.o .cpp.o .cxx.o:
-	${CXX} ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CXX} ${CXXFLAGS} ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} \
+	    -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .cc.po .C.po .cpp.po .cxx.po:
-	${CXX} -pg ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${CXX} -pg ${CXXFLAGS} ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} \
+	    -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .cc.So .C.So .cpp.So .cxx.So:
-	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} -c ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${CXX} ${PICFLAG} -DPIC ${CXXFLAGS} ${FILEFLAGS_${.TARGET}} \
+	    -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .f.o:
-	${FC} ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
+	${FC} ${FFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    -c ${.IMPSRC} 
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .f.po:
-	${FC} -pg ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC} 
+	${FC} -pg ${FFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    -c ${.IMPSRC} 
 	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .f.So:
-	${FC} ${PICFLAG} -DPIC ${FFLAGS} -o ${.TARGET} -c ${.IMPSRC}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${FC} ${PICFLAG} -DPIC ${FFLAGS} ${FILEFLAGS_${.TARGET}} \
+	    -o ${.TARGET} -c ${.IMPSRC}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .m.o:
-	${OBJC} ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
+	${OBJC} ${OBJCFLAGS} ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} \
+	    -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .m.po:
-	${OBJC} ${OBJCFLAGS} -pg -c ${.IMPSRC} -o ${.TARGET}
+	${OBJC} ${OBJCFLAGS} -pg ${FILEFLAGS_${.TARGET}} -c ${.IMPSRC} \
+	    -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .m.So:
-	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} -c ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${OBJC} ${PICFLAG} -DPIC ${OBJCFLAGS} ${FILEFLAGS_${.TARGET}} \
+	    -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .s.o .asm.o:
-	${CC} -x assembler-with-cpp ${CFLAGS} ${AINC} -c \
-	    ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${CC} -x assembler-with-cpp ${CFLAGS} ${FILEFLAGS_${.TARGET}} \
+	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .s.po .asm.po:
-	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} ${AINC} -c \
-	    ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
+	${CC} -x assembler-with-cpp -DPROF ${CFLAGS} \
+	    ${FILEFLAGS_${.TARGET}} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .s.So .asm.So:
 	${CC} -x assembler-with-cpp ${PICFLAG} -DPIC ${CFLAGS} \
-	    ${AINC} -c ${.IMPSRC} -o ${.TARGET}
+	    ${FILEFLAGS_${.TARGET}} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .S.o:
-	${CC} ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -x -r ${.TARGET}
+	${CC} ${CFLAGS} ${FILEFLAGS_${.TARGET}} ${AINC} \
+	    -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .S.po:
-	${CC} -DPROF ${CFLAGS} ${AINC} -c ${.IMPSRC} -o ${.TARGET}
-	@${LD} ${LDFLAGS} -o ${.TARGET}.tmp -X -r ${.TARGET}
+	${CC} -DPROF ${CFLAGS} ${FILEFLAGS_${.TARGET}} ${AINC} \
+	    -c ${.IMPSRC} -o ${.TARGET}
+	@${LD} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET}.tmp \
+	    -X -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
 .S.So:
-	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${AINC} -c ${.IMPSRC} \
-	    -o ${.TARGET}
+	${CC} ${PICFLAG} -DPIC ${CFLAGS} ${FILEFLAGS_${.TARGET}} ${AINC} \
+		-c ${.IMPSRC} -o ${.TARGET}
 	@${LD} -o ${.TARGET}.tmp -x -r ${.TARGET}
 	@mv ${.TARGET}.tmp ${.TARGET}
 
Index: share/mk/bsd.prog.mk
===================================================================
RCS file: /cvs/src/share/mk/bsd.prog.mk,v
retrieving revision 1.130
diff -u -u -r1.130 bsd.prog.mk
--- share/mk/bsd.prog.mk	3 May 2003 15:48:12 -0000	1.130
+++ share/mk/bsd.prog.mk	28 Jun 2003 20:41:59 -0000
@@ -32,9 +32,11 @@
 
 ${PROG}: ${OBJS}
 .if defined(PROG_CXX)
-	${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    ${OBJS} ${LDADD}
 .else
-	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
+	${CC} ${CFLAGS} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    ${OBJS} ${LDADD}
 .endif
 
 .else !defined(SRCS)
@@ -55,9 +57,11 @@
 
 ${PROG}: ${OBJS}
 .if defined(PROG_CXX)
-	${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    ${OBJS} ${LDADD}
 .else
-	${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
+	${CC} ${CFLAGS} ${LDFLAGS} ${FILEFLAGS_${.TARGET}} -o ${.TARGET} \
+	    ${OBJS} ${LDADD}
 .endif
 .endif
 


More information about the freebsd-arch mailing list