Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/share/mk Add support for --combine with gcc.



details:   https://anonhg.NetBSD.org/src/rev/56efa5260318
branches:  trunk
changeset: 777475:56efa5260318
user:      matt <matt%NetBSD.org@localhost>
date:      Sun Feb 19 23:19:37 2012 +0000

description:
Add support for --combine with gcc.

diffstat:

 share/mk/bsd.dep.mk     |  13 ++++++++-
 share/mk/bsd.kmodule.mk |  32 ++++++++++++++++++++++++-
 share/mk/bsd.lib.mk     |  32 ++++++++++++++++++++++++-
 share/mk/bsd.prog.mk    |  61 +++++++++++++++++++++++++++++++++++++++++++++++-
 4 files changed, 131 insertions(+), 7 deletions(-)

diffs (241 lines):

diff -r 6fe2c4020dd5 -r 56efa5260318 share/mk/bsd.dep.mk
--- a/share/mk/bsd.dep.mk       Sun Feb 19 23:15:24 2012 +0000
+++ b/share/mk/bsd.dep.mk       Sun Feb 19 23:19:37 2012 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: bsd.dep.mk,v 1.73 2011/09/10 16:57:35 apb Exp $
+#      $NetBSD: bsd.dep.mk,v 1.74 2012/02/19 23:19:37 matt Exp $
 
 ##### Basic targets
 realdepend:    beforedepend .depend afterdepend
@@ -16,8 +16,17 @@
 .if defined(SRCS)                                                      # {
 __acpp_flags=  ${_ASM_TRADITIONAL_CPP}
 
-__DPSRCS.all=  ${SRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/} \
+.if defined(NODPSRCS)
+.for f in ${SRCS} ${DPSRCS}
+.if "${NODPSRCS:M${f}}" == ""
+__DPSRCS.all+= ${f:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/}
+.endif
+.endfor
+beforedepend: ${DPSRCS}
+.else
+__DPSRCS.all+= ${SRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/} \
                ${DPSRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/}
+.endif
 __DPSRCS.d=    ${__DPSRCS.all:O:u:M*.d}
 __DPSRCS.notd= ${__DPSRCS.all:O:u:N*.d}
 
diff -r 6fe2c4020dd5 -r 56efa5260318 share/mk/bsd.kmodule.mk
--- a/share/mk/bsd.kmodule.mk   Sun Feb 19 23:15:24 2012 +0000
+++ b/share/mk/bsd.kmodule.mk   Sun Feb 19 23:19:37 2012 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: bsd.kmodule.mk,v 1.34 2012/02/16 23:58:15 christos Exp $
+#      $NetBSD: bsd.kmodule.mk,v 1.35 2012/02/19 23:19:37 matt Exp $
 
 # We are not building this with PIE
 MKPIE=no
@@ -69,18 +69,46 @@
 KMODSCRIPT=    ${DESTDIR}/usr/libdata/ldscripts/kmodule
 .endif
 
-OBJS+=         ${SRCS:N*.h:N*.sh:R:S/$/.o/g}
 PROG?=         ${KMOD}.kmod
 
 ##### Build rules
 realall:       ${PROG}
 
+.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
+   && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
+.for f in ${SRCS:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
+.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
+     || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
+     || ${CXXFLAGS.$f:D5} == "5") \
+    || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
+XOBJS+=                ${f:R:S/$/.o/}
+.else
+XSRCS+=                ${f}
+NODPSRCS+=     ${f}
+.endif
+.endfor
+
+.if !empty(XOBJS)
+${XOBJS}:      ${DPSRCS}
+.endif
+
+${PROG}: ${XOBJS} ${XSRCS} ${DPSRCS} ${DPADD}
+       ${_MKTARGET_LINK}
+       ${CC} ${LDFLAGS} -nostdlib -MD -combine -r -Wl,-T,${KMODSCRIPT},-d \
+               -o ${.TARGET} ${CFLAGS} ${CPPFLAGS} ${XOBJS} \
+               ${XSRCS:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} && \
+       echo '.-include "${KMOD}.d"' > .depend
+
+.else
+OBJS+=         ${SRCS:N*.h:N*.sh:R:S/$/.o/g}
+
 ${OBJS} ${LOBJS}: ${DPSRCS}
 
 ${PROG}: ${OBJS} ${DPADD}
        ${_MKTARGET_LINK}
        ${CC} ${LDFLAGS} -nostdlib -r -Wl,-T,${KMODSCRIPT},-d \
                -o ${.TARGET} ${OBJS}
+.endif
 
 ##### Install rules
 .if !target(kmodinstall)
diff -r 6fe2c4020dd5 -r 56efa5260318 share/mk/bsd.lib.mk
--- a/share/mk/bsd.lib.mk       Sun Feb 19 23:15:24 2012 +0000
+++ b/share/mk/bsd.lib.mk       Sun Feb 19 23:19:37 2012 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: bsd.lib.mk,v 1.320 2012/01/28 23:13:24 christos Exp $
+#      $NetBSD: bsd.lib.mk,v 1.321 2012/02/19 23:19:37 matt Exp $
 #      @(#)bsd.lib.mk  8.3 (Berkeley) 4/22/94
 
 .include <bsd.init.mk>
@@ -390,7 +390,37 @@
 _LIBS=
 .endif
 
+.if ${LIBISPRIVATE} != "no" \
+   && (defined(USE_COMBINE) && ${USE_COMBINE} == "yes" \
+   && !defined(NOCOMBINE))                                             # {
+.for f in ${SRCS:N*.h:N*.sh:C/\.[yl]$/.c/g}
+COMBINEFLAGS.${LIB}.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
+.if empty(COMBINEFLAGS.${LIB}.${f}) && !defined(NOCOMBINE.$f)
+COMBINESRCS+=  ${f}
+NODPSRCS+=     ${f}
+.else
+OBJS+=         ${f:R:S/$/.o/}
+.endif
+.endfor
+
+.if !empty(COMBINESRCS)
+OBJS+=         lib${LIB}_combine.o
+lib${LIB}_combine.o: ${COMBINESRCS}
+       ${_MKTARGET_COMPILE}
+       ${COMPILE.c} -MD --combine ${.ALLSRC} -o ${.TARGET}
+.if !defined(CFLAGS) || empty(CFLAGS:M*-g*)
+       ${OBJCOPY} -x ${.TARGET}
+.endif
+
+CLEANFILES+=   lib${LIB}_combine.d
+
+.if exists("lib${LIB}_combine.d")
+.include "lib${LIB}_combine.d"
+.endif
+.endif   # empty(XSRCS.${LIB})
+.else                                                  # } {
 OBJS+=${SRCS:N*.h:N*.sh:R:S/$/.o/g}
+.endif                                                 # }
 
 STOBJS+=${OBJS}
 
diff -r 6fe2c4020dd5 -r 56efa5260318 share/mk/bsd.prog.mk
--- a/share/mk/bsd.prog.mk      Sun Feb 19 23:15:24 2012 +0000
+++ b/share/mk/bsd.prog.mk      Sun Feb 19 23:19:37 2012 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: bsd.prog.mk,v 1.270 2011/11/05 22:56:31 christos Exp $
+#      $NetBSD: bsd.prog.mk,v 1.271 2012/02/19 23:19:37 matt Exp $
 #      @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94
 
 .ifndef HOSTPROG
@@ -362,12 +362,17 @@
 # Per-program definitions and targets.
 #
 
+_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
 # Definitions specific to C programs.
 .for _P in ${PROGS}
 SRCS.${_P}?=   ${_P}.c
 _CCLINK.${_P}= ${CC} ${_CCLINKFLAGS}
+_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS}
+_CPPFLAGS.${_P}=       ${CPPFLAGS}
+_COPTS.${_P}=  ${COPTS}
 .endfor
 
+_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
 # Definitions specific to C++ programs.
 .for _P in ${PROGS_CXX}
 SRCS.${_P}?=   ${_P}.cc
@@ -396,7 +401,7 @@
 
 ##### Build and install rules
 .if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
-SRCS+=         ${SRCS.${_P}} # For bsd.dep.mk
+SRCS+=         ${SRCS.${_P}}   # For bsd.dep.mk
 .endif
 
 _YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
@@ -412,6 +417,56 @@
 .if defined(OBJS.${_P}) && !empty(OBJS.${_P})                  # {
 .NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
 
+.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
+   && (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
+       || ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
+   && !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
+.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
+#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
+#     ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
+.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
+     || ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
+     || ${CXXFLAGS.$f:D5} == "5") \
+    || ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
+XOBJS.${_P}+=  ${f:R:S/$/.o/}
+.else
+XSRCS.${_P}+=  ${f}
+NODPSRCS+=     ${f}
+.endif
+.endfor
+
+${_P}: .gdbinit ${LIBCRT0} ${XOBJS.${_P}} ${SRCS.${_P}} ${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
+       ${_MKTARGET_LINK}
+.if defined(DESTDIR)
+       ${_CCLINK.${_P}} -Wl,-nostdlib \
+           ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
+           -B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
+           -MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
+           ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
+           ${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
+.else
+       ${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
+           -MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
+           ${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
+           ${_LDADD.${_P}}
+.endif # defined(DESTDIR)
+       @${SIZE} ${_P}
+.if defined(CTFMERGE)
+       ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
+.endif
+.if defined(PAXCTL_FLAGS.${_P})
+       ${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
+.endif
+.if ${MKSTRIPIDENT} != "no"
+       ${OBJCOPY} -R .ident ${.TARGET}
+.endif
+
+CLEANFILES+=   ${_P}.d
+.if exists(${_P}.d)
+.include "${_P}.d"             # include -MD depend for program.
+.endif
+.else  # USE_COMBINE
+
 ${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
 
 ${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${DPADD}
@@ -421,6 +476,7 @@
            ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
            ${OBJS.${_P}} ${_LDADD.${_P}} \
            ${_PROGLDOPTS}
+       @${SIZE} ${_P}
 .if defined(CTFMERGE)
        ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
 .endif
@@ -431,6 +487,7 @@
        ${OBJCOPY} -R .ident ${.TARGET}
 .endif
 .endif # !commands(${_P})
+.endif # USE_COMBINE
 
 ${_P}.ro: ${OBJS.${_P}} ${DPADD}
        ${_MKTARGET_LINK}



Home | Main Index | Thread Index | Old Index