Date: Sun, 29 Jun 2003 22:01:18 -0700 From: David Schultz <dschultz@OCF.Berkeley.EDU> To: Bruce Evans <bde@zeta.org.au> Cc: arch@freebsd.org Subject: Per-source CFLAGS revisited (was: Re: Per-source CFLAGS) Message-ID: <20030630050118.GA75674@HAL9000.homeunix.com> In-Reply-To: <20030622200641.D56263@gamplex.bde.org> References: <20030622005124.GA59673@HAL9000.homeunix.com> <20030622114150.L54976@gamplex.bde.org> <20030622035258.GB60460@HAL9000.homeunix.com> <20030622180851.K55800@gamplex.bde.org> <20030622085020.GA61926@HAL9000.homeunix.com> <20030622200641.D56263@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030630050118.GA75674>