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