Cleanup the fill-kfs make target so usable by all
authorKevin Klues <klueska@cs.berkeley.edu>
Fri, 7 Jun 2013 21:49:44 +0000 (14:49 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Fri, 7 Jun 2013 21:50:11 +0000 (14:50 -0700)
Properly makes sure that all stuff is cleanup and that calling fill-kfs works
properly even if you change architectures between builds. It also only really
copies stuff over if it has to (via cpu -u).
Closes #001

GETTING_STARTED
Makefile
scripts/fill-kfs.sh [deleted file]
tests/Makefile

index b10effb..cdd0cd2 100644 (file)
@@ -121,13 +121,13 @@ To build userspace and test programs:
 $ make tests
 
 You now have programs and libraries, and need to put them in KFS.  To do this,
-we provide a script called 'fill_kfs.sh'.  A copy of it exists in
-scripts/fill_kfs.sh in the repo, but you will likely want to copy it to the
-directory *above* your root repo and edit it for your own setup.
-Alternatively, you can do everything manually. Either way, you need to make
-sure shared libraries are copied into kern/kfs/lib (given the default value of
-kern/kfs as the path set up for "KFS/Initramfs paths" during configuration) and
-you want your programs copied to kern/kfs/bin.
+we provide a 'fill-kfs' make target. 
+
+$ make fill-kfs
+
+The 'fill-kfs' target copies your cross compiler's shared libraries and all
+test binaries into the first "KFS/Initramfs path" you set during configuration
+(or kern/kfs/lib if you just kept the default).
 
 Now that you've changed the contents of KFS's source, remake the kernel.  You
 should see something like
@@ -294,7 +294,7 @@ $ vi tests/hello.c
 $ make tests
 (new version in obj/tests/hello)
 
-$ ../fill-kfs.sh
+$ make fill-kfs
 (updates kfs)
 
 $ make
@@ -334,7 +334,7 @@ be able to see what's going on all the time.  (unlike when building glibc...).
 
 Oh, and don't forget to:
 
-$ ../fill-kfs.sh (or whatever you do)
+$ make fill-kfs
 
 to make sure you run the new pthread_test. 
 
index 8ca47ba..c2aef64 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -47,6 +47,10 @@ MAKEFLAGS += -rR --no-print-directory
 PHONY := all
 all: akaros-kernel
 
+# Setup dumping ground for object files and any temporary files we need to
+# generate for non-kbuild targets
+OBJDIR ?= obj
+
 # Symlinks
 # =========================================================================
 # We have a few symlinks so that code can include <arch/whatever.h>.  This
@@ -71,8 +75,8 @@ goals-has-build-targets := 1
 endif
 
 PHONY += symlinks clean_symlinks
-clean_symlinks:
-       @-rm -f kern/include/arch kern/boot user/parlib/include/arch
+clean_symlinks: objclean
+       @rm -f kern/include/arch kern/boot user/parlib/include/arch
 
 arch-link := $(notdir $(shell readlink kern/include/arch))
 valid-arches := $(notdir $(wildcard kern/arch/*))
@@ -342,7 +346,6 @@ endif # $(dot-config)
 
 # The user can override this, though it won't apply for any of the in-tree
 # kernel build output.  Right now, it's only passed down to tests/
-OBJDIR ?= obj
 dummy-1 := $(shell mkdir -p $(OBJDIR)/kern/)
 
 # Don't need to export these, since the Makelocal is included.
@@ -501,16 +504,21 @@ tests: install-libs
 testclean:
        @$(MAKE) -f tests/Makefile clean
 
-install-tests:
-       @$(MAKE) -f tests/Makefile install
+# KFS related stuff
+PHONY += fill-kfs unfill-kfs
+XCC_SO_FILES = $(addprefix $(XCC_TARGET_ROOT)/lib/, *.so*)
+
+$(OBJDIR)/.dont-force-fill-kfs:
+       @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
+       @touch $(OBJDIR)/.dont-force-fill-kfs
 
-# TODO: cp -u all of the .sos, but flush it on an arch change (same with tests)
-fill-kfs: install-libs install-tests
+fill-kfs: $(OBJDIR)/.dont-force-fill-kfs install-libs
        @mkdir -p $(FIRST_KFS_PATH)/lib
-       @cp $(addprefix $(XCC_TARGET_ROOT)/lib/, \
-         libc.so.6 ld.so.1 libm.so libgcc_s.so.1) $(FIRST_KFS_PATH)/lib
-       $(Q)$(STRIP) --strip-debug $(addprefix $(FIRST_KFS_PATH)/lib/, \
-                                              libc.so.6 ld.so.1)
+       @cp -uP  $(XCC_SO_FILES) $(FIRST_KFS_PATH)/lib
+       @echo "Cross Compiler 'so' files installed to KFS"
+       @$(MAKE) -f tests/Makefile fill-kfs
 
 # Use doxygen to make documentation for ROS (Untested since 2010 or so)
 doxygen-dir := $(CUR_DIR)/Documentation/doxygen
@@ -528,7 +536,7 @@ doxyclean:
 
 objclean:
        @echo + clean [OBJDIR]
-       @rm -rf $(OBJDIR)/*
+       @rm -rf $(OBJDIR)
 
 realclean: userclean mrproper doxyclean objclean
 
diff --git a/scripts/fill-kfs.sh b/scripts/fill-kfs.sh
deleted file mode 100755 (executable)
index 203706d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Just the essentials
-#cp -P ../ros-gcc-glibc/install-i386-ros-gcc/i686-ros/lib/ld* kern/kfs/lib/
-#cp -P ../ros-gcc-glibc/install-i386-ros-gcc/i686-ros/lib/libc{-,.}* kern/kfs/lib/
-
-# Full libc SOs  careful with -u, it won't help you change between archs
-mkdir -p kern/kfs/lib
-cp -uP ../ros-gcc-glibc/install-i386-ros-gcc/i686-ros/lib/*.so* kern/kfs/lib
-#cp -uP ../ros-gcc-glibc/install-sparc-ros-gcc/sparc-ros/lib/*.so* kern/kfs/lib
-
-# common test progs
-#cp -u obj/tests/idle obj/tests/block_test obj/tests/c3po/c3po_test obj/tests/appender obj/tests/file_test obj/tests/fork obj/tests/hello obj/tests/mhello obj/tests/pthread_test obj/tests/spawn obj/tests/syscall obj/tests/tlstest obj/tests/ucq kern/kfs/bin/
-
-# all test progs, something like this to get them
-# don't do this if we're using static binaries, since things will get really large
-mkdir -p kern/kfs/bin
-cp -u `find obj/tests/ -executable ! -type d` kern/kfs/bin/
index a756db6..b735312 100644 (file)
@@ -1,5 +1,5 @@
 # Default target is to just make
-PHONY += all install clean
+PHONY += all fill-kfs unfill-kfs clean
 all:
 
 # TODO: when we clean this up, if we ditch OBJDIR, change the root makefile
@@ -24,6 +24,8 @@ TESTS_EXECS_CPP  = $(patsubst $(TESTS_DIR)/%.cc, \
                               $(OBJDIR)/$(TESTS_DIR)/%, \
                               $(TESTS_SRCS_CPP))
 
+TESTS_EXECS = $(TESTS_EXECS_C) $(TESTS_EXECS_CPP)
+
 include $(TESTS_DIR)/openmp/Makefrag
 
 STATIC := $(findstring static,$(CFLAGS_TESTS))
@@ -43,11 +45,17 @@ $(OBJDIR)/$(TESTS_DIR)/%: $(TESTS_LDDEPENDS_CPP)
        @mkdir -p $(@D)
        $(Q)$(CPP) $(TESTS_CXXFLAGS) -o $@ $< $(TESTS_LDLIBS)
 
-all: $(TESTS_EXECS_C) $(TESTS_EXECS_CPP) 
+all: $(TESTS_EXECS)
        @:
 
-install: $(TESTS_EXECS_C) $(TESTS_EXECS_CPP) 
-       $(Q)cp -u $^ $(FIRST_KFS_PATH)/bin
+fill-kfs: $(TESTS_EXECS)
+       @mkdir -p $(FIRST_KFS_PATH)/bin
+       $(Q)cp -uP $^ $(FIRST_KFS_PATH)/bin
+       @echo "User space tests installed to KFS"
+
+unfill-kfs:
+       $(Q)rm -rf $(addprefix  $(FIRST_KFS_PATH)/bin, $(notdir $(TESTS_EXECS)))
+       @echo "User space tests removed from KFS"
 
 clean:
        @echo + clean [TESTS]