Cleans up preempt_pending helper functions
[akaros.git] / GNUmakefile
index 716c468..8549aa6 100644 (file)
@@ -1,6 +1,9 @@
 # The ROS Top level Makefile
 # Make sure that 'all' is the first target
 
+# Keep make quiet.  Make sure you call make via $(MAKE), and not directly
+MAKE += -s 
+
 ############################################################################# 
 ########## Initial Setup so that we can build for different TARGETS #########
 ############################################################################# 
@@ -13,12 +16,12 @@ endif
 ifeq ($(TARGET_ARCH),)
 busted:
        @echo "You must initially specify your target in the form TARGET_ARCH=<target>"
-       @echo "Current valid values for TARGET_ARCH are 'i686' and 'sparc'"
+       @echo "Current valid values for TARGET_ARCH are 'i686', 'sparc', and 'riscv'."
        @echo "Subsequent calls for the same target can be made by simply invoking 'make'"
 endif
 
-$(TARGET_ARCH):
-       @if [ "$(ARCH_LINK)" != "$@" ];\
+real-$(TARGET_ARCH):
+       @if [ "$(ARCH_LINK)" != "$(TARGET_ARCH)" ];\
        then\
          $(MAKE) realclean;\
          $(MAKE) realall -j $(MAKE_JOBS);\
@@ -26,6 +29,9 @@ $(TARGET_ARCH):
          $(MAKE) all -j $(MAKE_JOBS);\
        fi
 
+# So all recursive calls to make know what the target arch is
+MAKE += TARGET_ARCH=$(TARGET_ARCH)
+
 ############################################################################# 
 ########## Beginning of the guts of the real Makefile #######################
 ############################################################################# 
@@ -33,7 +39,7 @@ $(TARGET_ARCH):
 # Default values for configurable Make system variables
 COMPILER := GCC
 OBJDIR := obj
-V := @
+V ?= @
 
 # Make sure that 'all' is the first target when not erroring out
 realall: symlinks
@@ -43,6 +49,7 @@ MAKE_JOBS :=
 
 # Give it a reasonable default path for initramfs to avoid build breakage
 INITRAMFS_PATHS = kern/kfs
+FIRST_INITRAMFS_PATH = $(firstword $(INITRAMFS_PATHS))
 
 # Then grab the users Makelocal file to let them override Make system variables
 # and set up other Make targets
@@ -87,7 +94,7 @@ endif
 endif
 
 # Default programs for compilation
-USER_CFLAGS += -O2
+USER_CFLAGS += -O2 -std=gnu99
 ifeq ($(COMPILER),IVY)
 KERN_CFLAGS += --deputy \
                --no-rc-sharc \
@@ -123,7 +130,7 @@ endif
 # -fno-builtin is required to avoid refs to undefined functions in the kernel.
 # Only optimize to -O1 to discourage inlining, which complicates backtraces.
 KERN_CFLAGS += -D$(TARGET_ARCH) $(EXTRAARGS)
-KERN_CFLAGS += -O2 -pipe -MD -fno-builtin -gstabs
+KERN_CFLAGS += -O2 -pipe -MD -fno-builtin -gstabs -static
 KERN_CFLAGS += -Wall -Wno-format -Wno-unused -fno-strict-aliasing
 KERN_CFLAGS += -nostdinc -I$(dir $(GCC_LIB))/include
 
@@ -133,9 +140,6 @@ LDFLAGS := -nostdlib
 # List of directories that the */Makefrag makefile fragments will add to
 OBJDIRS :=
 
-# List of directories that the */Makefrag makefile fragments will add to
-ROS_USER_LIBS :=
-
 ROS_ARCH_DIR ?= $(TARGET_ARCH)
 
 arch:
@@ -144,12 +148,11 @@ arch:
 symlinks: error
        ln -fs ../arch/$(ROS_ARCH_DIR) kern/include/arch
        ln -fs arch/$(ROS_ARCH_DIR)/boot kern/boot
-       ln -fs $(ROS_ARCH_DIR) user/include/arch
+       ln -fs $(ROS_ARCH_DIR) user/parlib/include/arch
        @$(MAKE) -j $(MAKE_JOBS) all
 
 # Include Makefrags for subdirectories
 ifneq ($(TARGET_ARCH),)
-include user/Makefrag
 include tests/Makefrag
 include kern/Makefrag
 endif
@@ -157,20 +160,40 @@ endif
 ifeq ($(GCCPREFIX),$(TARGET_ARCH)-ros-)
 GCC_ROOT := $(shell which $(GCCPREFIX)gcc | xargs dirname)/../
 tests/: tests
-tests:
+tests: install-libs
        @$(MAKE) -j $(MAKE_JOBS) realtests
 realtests: $(TESTS_EXECS)
 # No longer automatically copying to the FS dir (deprecated)
 #      @mkdir -p fs/$(TARGET_ARCH)/tests
 #      cp -R $(OBJDIR)/$(TESTS_DIR)/* $(TOP_DIR)/fs/$(TARGET_ARCH)/tests
 
-install-libs: $(ROS_USER_LIBS)
-       cp $(ROS_USER_LIBS) $(GCC_ROOT)/$(TARGET_ARCH)-ros/lib
-       cp $(ROS_USER_LIBS) $(TOP_DIR)/fs/$(TARGET_ARCH)/lib
-       cp -R $(USER_DIR)/include/* $(GCC_ROOT)/$(TARGET_ARCH)-ros/include
-.PHONY: tests
+USER_LIBS = parlib pthread
+# for now, c3po can't be built for non-i686
+ifeq ($(TARGET_ARCH),i686)
+USER_LIBS += c3po
+endif
+install-libs: 
+       @for i in $(USER_LIBS) ; do     \
+               cd user/$$i;            \
+               $(MAKE);                \
+               $(MAKE) install;        \
+               cd ../..;               \
+       done
+
+fill-kfs: install-libs
+       @rm -rf $(FIRST_INITRAMFS_PATH)/lib
+       @cp -R $(GCC_ROOT)/$(TARGET_ARCH)-ros/lib $(FIRST_INITRAMFS_PATH)
 endif
 
+userclean:
+       @for i in $(USER_LIBS) ; do \
+               cd user/$$i;            \
+               $(MAKE) clean;          \
+               cd ../..;               \
+       done
+       @rm -rf $(OBJDIR)/$(TESTS_DIR)
+.PHONY: tests
+
 # Eliminate default suffix rules
 .SUFFIXES:
 
@@ -200,18 +223,16 @@ docs:
 doxyclean:
        rm -rf $(DOXYGEN_DIR)/rosdoc
 
-# For deleting the build
-userclean:
-       @rm -rf $(OBJDIR)/user
-       
 clean:
+       @$(MAKE) userclean
+       @echo + clean [KERNEL/TESTS]
        @rm -rf $(OBJDIR)
        @echo All clean and pretty!
 
 realclean: clean
        @rm -f kern/boot
        @rm -f kern/include/arch
-       @rm -f user/include/arch
+       @rm -f user/parlib/include/arch
 
 always:
        @: