tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Library building
Hi all,
a while the compat build system was revamped to require much less magic.
This leaves the interaction between src/Makefile, src/lib/Makefile and
the dependencies within as the biggest ward in the current system.
Attached is a patch that drops most of the magic from src/Makefile and
provides a single build_install target called called in
src/lib/Makefile to provide the magic. This ensures that all blocks
(delimited by .WAIT) of sub directories are build and installed before
the next block. This means that libraries can finally link correctly
against the installed versions, removing the last big reason for leaking
libstdc++ and the source locations into various Makefiles. Effectively,
this would allow replacing LIBDPLIBS with a much simpler version as long
as the libraries are installed first.
One thing I am still contemplating is whether to make build_install a
primary target in all directories or not.
Joerg
Index: Makefile
===================================================================
RCS file: /home/joerg/repo/netbsd/src/Makefile,v
retrieving revision 1.293
diff -u -p -r1.293 Makefile
--- Makefile 8 Aug 2012 14:00:31 -0000 1.293
+++ Makefile 10 Aug 2012 21:55:08 -0000
@@ -92,27 +92,9 @@
# includes: installs include files.
# do-tools-compat: builds the "libnbcompat" library; needed for some
# random host tool programs in the source tree.
-# do-lib-csu: builds and installs prerequisites from lib/csu.
-# do-libgcc: builds and installs prerequisites from
-# gnu/lib/crtstuff${LIBGCC_EXT} (if necessary) and
-# gnu/lib/libgcc${LIBGCC_EXT}.
-# do-libpcc: builds and install prerequisites from
-# external/bsd/pcc/crtstuff (if necessary) and
-# external/bsd/pcc/libpcc.
-# do-lib-libc: builds and installs prerequisites from lib/libc.
-# do-lib: builds and installs prerequisites from lib.
-# do-sys-rump-dev-lib: builds and installs prerequisites from
sys/rump/dev/lib
-# do-sys-rump-fs-lib: builds and installs prerequisites from sys/rump/fs/lib
-# do-sys-rump-kern-lib: builds and installs prereq. from sys/rump/kern/lib
-# do-sys-rump-net-lib: builds and installs prerequisites from
sys/rump/net/lib
-# do-sys-modules: builds and installs kernel modules (used by rump binaries)
-# do-ld.so: builds and installs prerequisites from libexec/ld.*_so.
-# do-compat-lib-csu: builds and installs prerequisites from compat/lib/csu
+# do-lib: builds and installs prerequisites from lib
# if ${MKCOMPAT} != "no".
-# do-compat-libgcc: builds and installs prerequisites from
-# compat/gnu/lib/crtstuff${LIBGCC_EXT} (if necessary) and
-# compat/gnu/lib/libgcc${LIBGCC_EXT} if ${MKCOMPAT} != "no".
-# do-compat-lib-libc: builds and installs prerequisites from compat/lib/libc
+# do-compat-lib: builds and installs prerequisites from compat/lib
# if ${MKCOMPAT} != "no".
# do-build: builds and installs the entire system.
# do-x11: builds and installs X11 if ${MKX11} != "no"; either
@@ -244,28 +226,8 @@ BUILDTARGETS+= do-distrib-dirs
BUILDTARGETS+= includes
.endif
BUILDTARGETS+= do-tools-compat
-BUILDTARGETS+= do-lib-csu
-.if ${MKGCC} != "no"
-BUILDTARGETS+= do-libgcc
-.endif
-.if ${MKPCC} != "no"
-BUILDTARGET+= do-libpcc
-.endif
-BUILDTARGETS+= do-lib-libc
BUILDTARGETS+= do-lib
-.if ${MKKMOD} != "no"
-BUILDTARGETS+= do-sys-modules
-.endif
-.if ${MKRUMP} != "no
-BUILDTARGETS+= do-sys-rump-dev-lib do-sys-rump-fs-lib
-BUILDTARGETS+= do-sys-rump-kern-lib do-sys-rump-net-lib
-.endif
-.if ${MKCOMPAT} != "no"
-BUILDTARGETS+= do-compat-lib-csu
-BUILDTARGETS+= do-compat-libgcc
-BUILDTARGETS+= do-compat-lib-libc
-.endif
-BUILDTARGETS+= do-ld.so
+BUILDTARGETS+= do-compat-lib
BUILDTARGETS+= do-build
.if ${MKX11} != "no"
BUILDTARGETS+= do-x11
@@ -464,32 +426,18 @@ do-${targ}: .PHONY ${targ}
@true
.endfor
-.if defined(HAVE_GCC)
-.if ${USE_COMPILERCRTSTUFF} == "yes"
-BUILD_CC_LIB= ${BUILD_CC_LIB_BASEDIR}/crtstuff${LIBGCC_EXT}
-.endif
-BUILD_CC_LIB+= ${BUILD_CC_LIB_BASEDIR}/libgcc${LIBGCC_EXT}
-.elif defined(HAVE_PCC)
-BUILD_CC_LIB+= external/bsd/pcc/crtstuff
-BUILD_CC_LIB+= external/bsd/pcc/libpcc
-.endif
-
-.for dir in tools tools/compat lib/csu ${BUILD_CC_LIB} lib/libc lib
sys/rump/dev/lib sys/rump/fs/lib sys/rump/kern/lib sys/rump/net/lib sys/modules
+.for dir in tools tools/compat
do-${dir:S/\//-/g}: .PHONY .MAKE
.for targ in dependall install
${MAKEDIRTARGET} ${dir} ${targ}
.endfor
.endfor
-.if ${MKCOMPAT} != "no"
-COMPAT_SUBDIR_LIST=lib/csu ${BUILD_CC_LIB} lib/libc
-.for dir in ${COMPAT_SUBDIR_LIST}
-do-compat-${dir:S/\//-/g}: .PHONY .MAKE
-.for targ in dependall install
- ${MAKEDIRTARGET} compat ${targ} BOOTSTRAP_SUBDIRS="../../../${dir}"
-.endfor
-.endfor
-.endif
+do-lib: .PHONY .MAKE
+ ${MAKEDIRTARGET} lib build_install
+
+do-compat-lib: .PHONY .MAKE
+ ${MAKEDIRTARGET} compat build_install BOOTSTRAP_SUBDIRS="../../../lib"
do-top-obj: .PHONY .MAKE
${MAKEDIRTARGET} . obj NOSUBDIR=
@@ -497,41 +445,6 @@ do-top-obj: .PHONY .MAKE
do-tools-obj: .PHONY .MAKE
${MAKEDIRTARGET} tools obj
-do-libgcc: .PHONY .MAKE
-.if defined(HAVE_GCC)
-.if ${MKGCC} != "no"
-.if ${USE_COMPILERCRTSTUFF} == "yes"
- ${MAKEDIRTARGET} . do-${BUILD_CC_LIB_BASETARGET}-crtstuff${LIBGCC_EXT}
-.endif
- ${MAKEDIRTARGET} . do-${BUILD_CC_LIB_BASETARGET}-libgcc${LIBGCC_EXT}
-.endif
-.endif
-
-do-compat-libgcc: .PHONY .MAKE
-.if defined(HAVE_GCC)
-.if ${MKGCC} != "no"
-.if ${USE_COMPILERCRTSTUFF} == "yes"
- ${MAKEDIRTARGET} .
do-compat-${BUILD_CC_LIB_BASETARGET}-crtstuff${LIBGCC_EXT}
-.endif
- ${MAKEDIRTARGET} .
do-compat-${BUILD_CC_LIB_BASETARGET}-libgcc${LIBGCC_EXT}
-.endif
-.endif
-
-do-libpcc: .PHONY .MAKE
-.if defined(HAVE_PCC)
-.if ${MKPCC} != "no"
-.if ${USE_COMPILERCRTSTUFF} == "yes"
- ${MAKEDIRTARGET} . do-pcc-lib-crtstuff
-.endif
- ${MAKEDIRTARGET} . do-pcc-lib-libpcc
-.endif
-.endif
-
-do-ld.so: .PHONY .MAKE
-.for targ in dependall install
- ${MAKEDIRTARGET} libexec/ld.elf_so ${targ}
-.endfor
-
do-build: .PHONY .MAKE
.for targ in dependall install
${MAKEDIRTARGET} . ${targ} BUILD_tools=no BUILD_lib=no
Index: compat/Makefile
===================================================================
RCS file: /home/joerg/repo/netbsd/src/compat/Makefile,v
retrieving revision 1.5
diff -u -p -r1.5 Makefile
--- compat/Makefile 13 Dec 2009 09:27:13 -0000 1.5
+++ compat/Makefile 10 Aug 2012 21:55:30 -0000
@@ -14,4 +14,6 @@ SUBDIR= dirshack .WAIT ${ARCHDIR_SUBDIR}
.endif
.endif
+TARGETS+= build_install
+
.include <bsd.subdir.mk>
Index: compat/compatsubdir.mk
===================================================================
RCS file: /home/joerg/repo/netbsd/src/compat/compatsubdir.mk,v
retrieving revision 1.7
diff -u -p -r1.7 compatsubdir.mk
--- compat/compatsubdir.mk 31 Jan 2011 10:58:14 -0000 1.7
+++ compat/compatsubdir.mk 10 Aug 2012 21:55:26 -0000
@@ -4,6 +4,8 @@
.include <bsd.own.mk>
+TARGETS+= build_install
+
.if ${MKCOMPAT} != "no"
.if !make(includes)
Index: compat/dirshack/Makefile
===================================================================
RCS file: /home/joerg/repo/netbsd/src/compat/dirshack/Makefile,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile
--- compat/dirshack/Makefile 17 Apr 2011 01:29:06 -0000 1.2
+++ compat/dirshack/Makefile 10 Aug 2012 21:55:35 -0000
@@ -15,6 +15,8 @@
.include <bsd.own.mk>
+TARGETS+= build_install
+
.if ${MKCOMPAT} != "no"
.if make(obj)
Index: lib/Makefile
===================================================================
RCS file: /home/joerg/repo/netbsd/src/lib/Makefile,v
retrieving revision 1.187
diff -u -p -r1.187 Makefile
--- lib/Makefile 8 Aug 2012 14:01:16 -0000 1.187
+++ lib/Makefile 10 Aug 2012 21:56:15 -0000
@@ -3,19 +3,19 @@
.include <bsd.own.mk>
-SUBDIR= csu
+SUBDIR= csu .WAIT
.if (${MKGCC} != "no")
. if ${HAVE_GCC} == 4
. if (${USE_COMPILERCRTSTUFF} == "yes")
-SUBDIR+= ../gnu/lib/crtstuff4
+SUBDIR+= ../gnu/lib/crtstuff4 .WAIT
. endif
-SUBDIR+= ../gnu/lib/libgcc4
+SUBDIR+= ../gnu/lib/libgcc4 .WAIT
. else
. if (${USE_COMPILERCRTSTUFF} == "yes")
-SUBDIR+= ../external/gpl3/gcc/lib/crtstuff
+SUBDIR+= ../external/gpl3/gcc/lib/crtstuff .WAIT
. endif
-SUBDIR+= ../external/gpl3/gcc/lib/libgcc
+SUBDIR+= ../external/gpl3/gcc/lib/libgcc .WAIT
. endif
.endif
@@ -202,9 +202,36 @@ SUBDIR+= libukfs # depends on librumpvf
SUBDIR+= .WAIT
SUBDIR+= libp2k # depends on libukfs, librumpvfs, libpuffs
+
+.if !defined(BSD_MK_COMPAT_FILE)
+SUBDIR+= ../sys/rump/dev/lib
+SUBDIR+= ../sys/rump/fs/lib
+SUBDIR+= ../sys/rump/kern/lib
+SUBDIR+= ../sys/rump/net/lib
+.endif
.endif
# Lua bindings come last, they might depend on anything
SUBDIR+= lua
+SUBDIR_GROUPS= 1
+CUR_GROUP:= 1
+.for dir in ${SUBDIR}
+. if ${dir} == ".WAIT"
+CUR_GROUP:= ${CUR_GROUP}1
+SUBDIR_GROUPS:= ${SUBDIR_GROUPS} ${CUR_GROUP}
+. else
+SUBDIR_GROUP.${CUR_GROUP}+= ${dir}
+.endif
+
+.endfor
+
+build_install:
+.for group in ${SUBDIR_GROUPS}
+. if !empty(SUBDIR_GROUP.${group})
+ ${MAKEDIRTARGET} . ${SUBDIR_GROUP.${group}:C/^/dependall-/}
+ ${MAKEDIRTARGET} . ${SUBDIR_GROUP.${group}:C/^/install-/}
+. endif
+.endfor
+
.include <bsd.subdir.mk>
Index: sys/Makefile
===================================================================
RCS file: /home/joerg/repo/netbsd/src/sys/Makefile,v
retrieving revision 1.77
diff -u -p -r1.77 Makefile
--- sys/Makefile 15 Jun 2011 09:45:59 -0000 1.77
+++ sys/Makefile 11 Aug 2012 16:44:37 -0000
@@ -7,7 +7,7 @@ SUBDIR= altq arch compat dev fs miscfs \
# interrupt implementation depends on the kernel within the port
#.if (${MACHINE} != "evbppc")
-.if make(obj) || make(cleandir)
+.if make(obj) || make(cleandir) || ${MKKMOD} != "no"
SUBDIR+=modules
.endif
#.endif
Home |
Main Index |
Thread Index |
Old Index