Makes bcopy part of string.h
[akaros.git] / Makefile
index 607596d..db8e54f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -47,6 +47,10 @@ MAKEFLAGS += -rR --no-print-directory
 PHONY := all
 all: akaros-kernel
 
+# Export the location of this top level directory
+AKAROS_ROOT = $(CURDIR)
+export AKAROS_ROOT
+
 # Setup dumping ground for object files and any temporary files we need to
 # generate for non-kbuild targets
 OBJDIR ?= obj
@@ -306,8 +310,9 @@ KERNEL_LD ?= kernel.ld
 gcc-lib := $(shell $(CC) -print-libgcc-file-name 2>/dev/null)
 NOSTDINC_FLAGS += -nostdinc -isystem \
                   $(shell $(CC) -print-file-name=include 2>/dev/null)
-XCC_TARGET_ROOT := $(dir $(shell which $(CC) 2> /dev/null))../$(patsubst %-,%,\
-                                                               $(CROSS_COMPILE))
+XCC_TARGET_ROOT := $(shell $(CC) --print-sysroot 2> /dev/null)
+XCC_TARGET_LIB := $(XCC_TARGET_ROOT)/usr/lib/
+XCC_TARGET_INCLUDE := $(XCC_TARGET_ROOT)/usr/include/
 
 CFLAGS_KERNEL += -O2 -pipe -MD
 CFLAGS_KERNEL += -std=gnu99 -fgnu89-inline
@@ -339,7 +344,7 @@ KBUILD_CHECKSRC := 0
 export AKAROSINCLUDE CROSS_COMPILE
 export CC CPP AS AR LD OBJCOPY OBJDUMP NM STRIP
 export CFLAGS_KERNEL AFLAGS_KERNEL
-export NOSTDINC_FLAGS XCC_TARGET_ROOT
+export NOSTDINC_FLAGS XCC_TARGET_ROOT XCC_TARGET_LIB XCC_TARGET_INCLUDE
 export KBUILD_BUILTIN KBUILD_CHECKSRC
 
 CFLAGS_USER += -O2 -std=gnu99 -fno-stack-protector -fgnu89-inline
@@ -537,6 +542,7 @@ endif #ifeq ($(mixed-targets),1)
 # such as how pthread depends on parlib.
 
 user-dirs = parlib pthread benchutil iplib ndblib bsd
+benchutil: parlib
 pthread: parlib benchutil
 iplib: parlib
 ndblib: iplib
@@ -546,12 +552,12 @@ PHONY += install-libs $(user-dirs)
 install-libs: $(user-dirs) symlinks cc-exists
 
 $(user-dirs):
-       @cd user/$@ && $(MAKE) && $(MAKE) install
+       @cd user/$@ && $(MAKE) DEPLIBS="$^" && $(MAKE) install
 
 
 PHONY += userclean $(clean-user-dirs)
 clean-user-dirs := $(addprefix _clean_user_,$(user-dirs))
-userclean: $(clean-user-dirs) testclean
+userclean: $(clean-user-dirs) testclean utestclean
 
 $(clean-user-dirs):
        @cd user/$(patsubst _clean_user_%,%,$@) && $(MAKE) clean
@@ -560,24 +566,37 @@ tests/: tests
 tests: install-libs
        @$(MAKE) -f tests/Makefile
 
+PHONY += utest
+utest: $(user-dirs)
+       @cd user/$@ && $(MAKE) 
+
 testclean:
        @$(MAKE) -f tests/Makefile clean
 
+utestclean:
+       @cd user/utest && $(MAKE) clean
+
 # KFS related stuff
 PHONY += fill-kfs unfill-kfs
-XCC_SO_FILES = $(addprefix $(XCC_TARGET_ROOT)/lib/, *.so*)
+XCC_SO_FILES = $(addprefix $(XCC_TARGET_LIB), *.so*)
 
 $(OBJDIR)/.dont-force-fill-kfs:
        $(Q)rm -rf $(addprefix $(FIRST_KFS_PATH)/lib/, $(notdir $(XCC_SO_FILES)))
        @echo "Cross Compiler 'so' files removed from KFS"
-       @$(MAKE) -f tests/Makefile unfill-kfs
+       @$(MAKE) -f tests/Makefile uninstall
+       @echo "Apps from /test removed from KFS"
+       @cd user/utest && $(MAKE) uninstall
+       @echo "User space tests removed from KFS"
        @touch $(OBJDIR)/.dont-force-fill-kfs
 
 fill-kfs: $(OBJDIR)/.dont-force-fill-kfs install-libs
        @mkdir -p $(FIRST_KFS_PATH)/lib
        $(Q)cp -uP $(XCC_SO_FILES) $(FIRST_KFS_PATH)/lib
        @echo "Cross Compiler 'so' files installed to KFS"
-       @$(MAKE) -f tests/Makefile fill-kfs
+       @$(MAKE) -f tests/Makefile install
+       @echo "Apps from /test installed to KFS"
+       @cd user/utest && $(MAKE) install
+       @echo "User space tests installed to KFS"
 
 # Use doxygen to make documentation for ROS (Untested since 2010 or so)
 doxygen-dir := $(CUR_DIR)/Documentation/doxygen