Module Name:    src
Committed By:   matt
Date:           Sun Feb 19 23:19:37 UTC 2012

Modified Files:
        src/share/mk: bsd.dep.mk bsd.kmodule.mk bsd.lib.mk bsd.prog.mk

Log Message:
Add support for --combine with gcc.


To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/share/mk/bsd.dep.mk
cvs rdiff -u -r1.34 -r1.35 src/share/mk/bsd.kmodule.mk
cvs rdiff -u -r1.320 -r1.321 src/share/mk/bsd.lib.mk
cvs rdiff -u -r1.270 -r1.271 src/share/mk/bsd.prog.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/mk/bsd.dep.mk
diff -u src/share/mk/bsd.dep.mk:1.73 src/share/mk/bsd.dep.mk:1.74
--- src/share/mk/bsd.dep.mk:1.73	Sat Sep 10 16:57:35 2011
+++ src/share/mk/bsd.dep.mk	Sun Feb 19 23:19:37 2012
@@ -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 @@ MKDEP_SUFFIXES?=	.o
 .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}
 

Index: src/share/mk/bsd.kmodule.mk
diff -u src/share/mk/bsd.kmodule.mk:1.34 src/share/mk/bsd.kmodule.mk:1.35
--- src/share/mk/bsd.kmodule.mk:1.34	Thu Feb 16 23:58:15 2012
+++ src/share/mk/bsd.kmodule.mk	Sun Feb 19 23:19:37 2012
@@ -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=	$S/../sys/modules/xldscripts
 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)

Index: src/share/mk/bsd.lib.mk
diff -u src/share/mk/bsd.lib.mk:1.320 src/share/mk/bsd.lib.mk:1.321
--- src/share/mk/bsd.lib.mk:1.320	Sat Jan 28 23:13:24 2012
+++ src/share/mk/bsd.lib.mk	Sun Feb 19 23:19:37 2012
@@ -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=lib${LIB}.a
 _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}
 

Index: src/share/mk/bsd.prog.mk
diff -u src/share/mk/bsd.prog.mk:1.270 src/share/mk/bsd.prog.mk:1.271
--- src/share/mk/bsd.prog.mk:1.270	Sat Nov  5 22:56:31 2011
+++ src/share/mk/bsd.prog.mk	Sun Feb 19 23:19:37 2012
@@ -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 @@ PROGS=		${PROG}
 # 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 @@ _LDSTATIC.${_P}=	${LDSTATIC} ${LDSTATIC.
 
 ##### 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 @@ LOBJS.${_P}+=	${LSRCS:.c=.ln} ${SRCS.${_
 .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 @@ ${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}}
 	    ${_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 @@ ${_P}: .gdbinit ${LIBCRT0} ${OBJS.${_P}}
 	${OBJCOPY} -R .ident ${.TARGET}
 .endif
 .endif	# !commands(${_P})
+.endif	# USE_COMBINE
 
 ${_P}.ro: ${OBJS.${_P}} ${DPADD}
 	${_MKTARGET_LINK}

Reply via email to