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