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

From: David Schultz (dschultz_at_OCF.Berkeley.EDU)
Date: 06/30/03

  • Next message: Andrew Gallatin: "Re: API change for bus_dma"
    Date: Sun, 29 Jun 2003 22:01:18 -0700
    To: Bruce Evans <bde@zeta.org.au>
    
    

    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
     
    _______________________________________________
    freebsd-arch@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-arch
    To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"


  • Next message: Andrew Gallatin: "Re: API change for bus_dma"

    Relevant Pages