Test for flex & bison when building the toolchain
[akaros.git] / tools / compilers / gcc-glibc / Makefile
index 6185d8a..48f48d6 100644 (file)
@@ -15,7 +15,7 @@ define print-usage
        @echo "Usage: make <arch> [ <config> ] [ <subcmd> ] "
        @echo "    Valid archs are: 'x86_64', 'riscv'"
        @echo "    Valid configs are: 'cross', 'native'"
-       @echo "    Valid subcommands are: 'build', 'uninstall', check-env'"
+       @echo "    Valid subcommands are: 'build', 'uninstall', check-env' 'install-headers'"
        @echo "    If no config is specified, the 'cross' config is assumed by default."
        @echo "    If no subcommand is specified, the 'build' subcommand is assumed by default."
        @echo ""
@@ -30,7 +30,7 @@ endef
 ifndef AKAROS_COMPILER_REAL_BUILD
 VALID_ARCHS := x86_64 riscv
 VALID_CONFIGS := cross native
-VALID_SUBCMDS := build uninstall check-env
+VALID_SUBCMDS := build uninstall check-env install-headers
 VALID_CLEANS := clean inst-clean
 VALID_TARGETS := $(VALID_ARCHS) $(VALID_CONFIGS) \
                  $(VALID_SUBCMDS) $(VALID_CLEANS)
@@ -135,6 +135,31 @@ define BUILD_ERROR
 endef
 BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif
+
+GPPEXISTS := $(shell which g++ > /dev/null 2>&1 ; echo $$?)
+ifneq ($(GPPEXISTS),0)
+define BUILD_ERROR
+    You need to have 'g++' installed on your system before proceeding!"
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
+endif
+
+FLEXEXISTS := $(shell which flex > /dev/null 2>&1 ; echo $$?)
+ifneq ($(FLEXEXISTS),0)
+define BUILD_ERROR
+    You need to have 'flex' installed on your system before proceeding!"
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
+endif
+
+BISONEXISTS := $(shell which bison > /dev/null 2>&1 ; echo $$?)
+ifneq ($(BISONEXISTS),0)
+define BUILD_ERROR
+    You need to have 'bison' installed on your system before proceeding!"
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
+endif
+
 ifeq ($(INSTDIR),)
 define BUILD_ERROR
     You need to setup $(INSTDIR_STRING), to point to where you
@@ -144,6 +169,7 @@ define BUILD_ERROR
 endef
 BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif 
+
 ifeq ($(CONFIG),native)
 ifeq ($(shell which $(ARCH)-ucb-akaros-gcc 2>/dev/null),)
 define BUILD_ERROR
@@ -165,6 +191,7 @@ endef
 BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif
 endif
+
 ifeq ($(ARCH),x86_64)
 ifeq ($(shell grep "CONFIG_X86_64=y" $(AKAROSDIR)/.config),)
 define BUILD_ERROR
@@ -191,7 +218,7 @@ $(MAKECMDGOALS): make-real
 make-real:
        @echo "$${BUILD_ERRORS}" |\
        awk '\
-               BEGIN { RS="<##>"; FS="<##>"; }\
+               BEGIN { RS="$(BUILD_ERROR_DELIMITER)"; FS="$(BUILD_ERROR_DELIMITER)"; }\
                { str[NR] = $$i; }\
                END { for (i = 1; i < NR; i++) {\
                                print "Error Detected:";\
@@ -211,6 +238,7 @@ ifeq ($(CONFIG),cross)
 build-real:
        $(MAKE) .$(BINARY_PREFIX)binutils-install
        $(MAKE) .$(BINARY_PREFIX)gcc-stage1-install
+       $(MAKE) .$(BINARY_PREFIX)headers-clean
        $(MAKE) .$(BINARY_PREFIX)akaros-headers-install
        $(MAKE) .$(BINARY_PREFIX)dummy-libs-install
        $(MAKE) .$(BINARY_PREFIX)glibc-stage1-install
@@ -234,6 +262,8 @@ uninstall-real:
                echo "    Removed $${dir} ($(ARCH)-$(CONFIG)-inst)";\
        fi
 
+install-headers-real: .$(BINARY_PREFIX)akaros-headers-install
+
 %.tar.bz2:
        wget http://akaros.cs.berkeley.edu/xcc/$@
 
@@ -427,16 +457,19 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
        cd $(BINARY_PREFIX)gcc-stage2-builddir; \
        make -j $(MAKE_JOBS) install-gcc install-target-libgcc;
 
-####################################
-######### AKAROS Headers ###########
-####################################
-.$(BINARY_PREFIX)akaros-headers-install: $(AKAROSDIR)
+#################################
+############ Headers ############
+#################################
+.$(BINARY_PREFIX)headers-clean:
        rm -rf $(SYSROOT)/usr/include/*
+
+.$(BINARY_PREFIX)akaros-headers-install: $(AKAROSDIR)
        mkdir -p $(SYSROOT)/usr/include
+       rm -rf $(SYSROOT)/usr/include/ros
        cp -r $(AKAROSDIR)/kern/include/ros \
            $(SYSROOT)/usr/include/
-       rm -f $(SYSROOT)/usr/include/ros/arch
-       mkdir $(SYSROOT)/usr/include/ros/arch
+       rm -rf $(SYSROOT)/usr/include/ros/arch
+       mkdir -p $(SYSROOT)/usr/include/ros/arch
        cp -r $(AKAROSDIR)/kern/arch/$(AKAROS_ARCH_DIR)/ros/* \
            $(SYSROOT)/usr/include/ros/arch/
        mkdir -p $(SYSROOT)/usr/include/parlib