Skip to content

Commit

Permalink
Implement build_install in src/lib/Makefile, which traverses the
Browse files Browse the repository at this point in the history
subdirectories and invokes dependall/install. Do this in groups
delimited by .WAIT to ensure that depending libraries can use the
installed versions and don't need to know the locations in the source
tree.

Use this new target in src/Makefile to replace most of the adhoc library
logic with two special cases, src/lib and src/compat. Adjust
sys/Makefile to include the module directory when building them. Add
some necessary .WAITs in src/lib/Makefile to reflect the dependencies
from src/Makefile and also add the rump libraries here.
  • Loading branch information
joerg committed Aug 17, 2012
1 parent d3746d5 commit 651e9dc
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 109 deletions.
108 changes: 10 additions & 98 deletions Makefile
@@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.298 2012/08/15 12:50:12 apb Exp $
# $NetBSD: Makefile,v 1.299 2012/08/17 16:22:27 joerg Exp $

#
# This is the top-level makefile for building NetBSD. For an outline of
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -250,29 +232,8 @@ BUILDTARGETS+= do-distrib-dirs
.if !defined(NOINCLUDES)
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
Expand Down Expand Up @@ -471,74 +432,25 @@ 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=

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
Expand Down
4 changes: 3 additions & 1 deletion compat/Makefile
@@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.5 2009/12/13 09:27:13 mrg Exp $
# $NetBSD: Makefile,v 1.6 2012/08/17 16:22:27 joerg Exp $

# Build multi-abi libaries

Expand All @@ -14,4 +14,6 @@ SUBDIR= dirshack .WAIT ${ARCHDIR_SUBDIR}
.endif
.endif

TARGETS+= build_install

.include <bsd.subdir.mk>
4 changes: 3 additions & 1 deletion compat/compatsubdir.mk
@@ -1,9 +1,11 @@
# $NetBSD: compatsubdir.mk,v 1.7 2011/01/31 10:58:14 matt Exp $
# $NetBSD: compatsubdir.mk,v 1.8 2012/08/17 16:22:27 joerg Exp $

# Build netbsd libraries.

.include <bsd.own.mk>

TARGETS+= build_install

.if ${MKCOMPAT} != "no"
.if !make(includes)

Expand Down
4 changes: 3 additions & 1 deletion compat/dirshack/Makefile
@@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.2 2011/04/17 01:29:06 mrg Exp $
# $NetBSD: Makefile,v 1.3 2012/08/17 16:22:27 joerg Exp $

# hacky method to get compat multilib base objdirs created before
# make tries to go create the subdirs used for builds.
Expand All @@ -15,6 +15,8 @@

.include <bsd.own.mk>

TARGETS+= build_install

.if ${MKCOMPAT} != "no"
.if make(obj)

Expand Down
45 changes: 39 additions & 6 deletions lib/Makefile
@@ -1,21 +1,21 @@
# $NetBSD: Makefile,v 1.187 2012/08/08 14:01:16 christos Exp $
# $NetBSD: Makefile,v 1.188 2012/08/17 16:22:27 joerg Exp $
# from: @(#)Makefile 5.25.1.1 (Berkeley) 5/7/91

.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

Expand Down Expand Up @@ -202,9 +202,42 @@ SUBDIR+= libukfs # depends on librumpvfs, librump
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

#
# build_install logic for src/Makefile.
# Compute a list of subdirectories delimited by .WAIT.
# Run "make dependall && make install" for all subdirectories in a group
# concurrently, but wait after each group.
#
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>
6 changes: 4 additions & 2 deletions sys/Makefile
@@ -1,4 +1,6 @@
# $NetBSD: Makefile,v 1.77 2011/06/15 09:45:59 mrg Exp $
# $NetBSD: Makefile,v 1.78 2012/08/17 16:22:27 joerg Exp $

.include <bsd.own.mk>

SUBDIR= altq arch compat dev fs miscfs \
net net80211 netatalk netbt netipsec netinet netinet6 \
Expand All @@ -7,7 +9,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
Expand Down

0 comments on commit 651e9dc

Please sign in to comment.