Split user-dirs into base and extra (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 25 Apr 2017 14:28:30 +0000 (10:28 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 25 Apr 2017 14:57:47 +0000 (10:57 -0400)
In commit 3035c3db676f ("user/vmm: add and use a load_elf function")
we established a dependency from VMM to elfutils.  However, vmm was
getting installed during the toolchain installation (through make
install-libs).  This was before elfutils was installed.

Breaking user-dirs into the base libraries that are expected to go with
the toolchain and 'extra' libraries that other code (e.g. vmrunkernel
and dune) needs does the trick.  Mostly - perfmon should also be an
'extra' library, but due to the way our apps-install works, it won't
work out.  The longer range solution is to make actual packages for
perfmon and vmm and have them get built and installed via a package
management system.

Rebuild your toolchain, if you want to make sure this works.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
Makefile
tools/compilers/gcc-glibc/Makefile

index 0bbc408..6d12699 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -591,15 +591,23 @@ endif #ifeq ($(mixed-targets),1)
 # List all userspace directories here, and state any dependencies between them,
 # such as how pthread depends on parlib.
 
-user-dirs = parlib pthread benchutil iplib ndblib vmm perfmon
+# Critical libraries, also built during the toolchain install
+user-base-dirs = parlib pthread benchutil iplib ndblib perfmon
 benchutil: parlib
 pthread: parlib benchutil
 iplib: parlib
 ndblib: iplib
-vmm: parlib benchutil iplib ndblib
 
-PHONY += install-libs $(user-dirs)
-install-libs: $(user-dirs) symlinks cc-exists
+# Higher-level libraries.  Built before tests/, but after apps-install.
+# TODO: would like to move perfmon here, since it's not meant to be low-level.
+# But the apps-install has perf, which depends on user/perfmon.
+user-extra-dirs = vmm
+$(user-extra-dirs): $(user-base-dirs)
+
+user-dirs = $(user-base-dirs) $(user-extra-dirs)
+
+PHONY += install-base-libs $(user-dirs)
+install-base-libs: $(user-base-dirs) symlinks cc-exists
 
 $(user-dirs):
        @$(MAKE) -C user/$@ DEPLIBS="$^" && $(MAKE) -C user/$@ install
@@ -614,7 +622,7 @@ $(clean-user-dirs):
        @$(MAKE) -C user/$(patsubst _clean_user_%,%,$@) clean
 
 tests/: tests
-tests: install-libs
+tests: user
        @$(MAKE) -f tests/Makefile
 
 PHONY += utest
@@ -642,7 +650,7 @@ $(OBJDIR)/.dont-force-fill-kfs:
        @echo "User space tests removed from KFS"
        @touch $(OBJDIR)/.dont-force-fill-kfs
 
-fill-kfs: $(OBJDIR)/.dont-force-fill-kfs install-libs tests
+fill-kfs: $(OBJDIR)/.dont-force-fill-kfs user tests
        @mkdir -p $(FIRST_KFS_PATH)/lib
        $(Q)cp -uP $(xcc-so-files) $(FIRST_KFS_PATH)/lib
        @echo "Cross Compiler 'so' files installed to KFS"
@@ -737,7 +745,7 @@ $(xcc_subcmd_goals):
 PHONY += xcc-upgrade
 xcc-upgrade: xcc
        @$(MAKE) userclean
-       @$(MAKE) install-libs
+       @$(MAKE) install-base-libs
        @$(MAKE) testclean utestclean
        @$(call make_as_parent, apps-clean)
        @$(call make_as_parent, apps-install)
index 5d8ef20..d4a92a1 100644 (file)
@@ -613,7 +613,7 @@ $(BINARY_PREFIX)glibc-stage2-builddir: glibc-$(GLIBC_VERSION)
 .$(BINARY_PREFIX)akaros-libs-install:
        cd $(AKAROSDIR); \
        make ARCH=$(AKAROS_ARCH_DIR) userclean; \
-       make ARCH=$(AKAROS_ARCH_DIR) -j $(MAKE_JOBS) install-libs
+       make ARCH=$(AKAROS_ARCH_DIR) -j $(MAKE_JOBS) install-base-libs
 
 ##################################
 ########### Gcc Stage 3 ##########