Intercept vfprintf() instead of printf() (XCC)
[akaros.git] / tools / compilers / gcc-glibc / Makefile
index 391d8b5..7f7857a 100644 (file)
 # Number of make jobs to spawn.  Define it in Makelocal
-MAKE_JOBS :=
+MAKE_JOBS ?= $(shell expr `cat /proc/cpuinfo | grep processor | wc -l` - 1)
+
+BINUTILS_VERSION := 2.24
+GCC_VERSION := 4.9.2
+GLIBC_VERSION := 2.19
+GMP_VERSION := 5.1.3
+MPFR_VERSION := 3.1.2
+MPC_VERSION := 1.0.2
 
 # Defines where to install the toolchain
 -include Makelocal
 
-ifndef RISCV_INSTDIR
-ifndef X86_64_INSTDIR
-ifndef X86_64_NATIVE_INSTDIR
-busted: 
-       @echo "You need to setup either a RISCV_INSTDIR or an X86_64_INSTDIR to point to where you want the tools installed. The best way to do this is to create a 'Makelocal' file in the current directory and put it in there."; false
-riscv: busted
-x86_64: busted
-x86_64-native: busted
+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' '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 ""
+       @echo "Additional pseudo targets exist for:"
+       @echo "    make clean"
+       @echo "        Cleanup the build environment"
+       @echo "    make inst-clean"
+       @echo "        Cleanup the build environment and uninstall all compilers for all archs."
+endef
+
+# Make sure the list of targets is sane!
+ifndef AKAROS_COMPILER_REAL_BUILD
+VALID_ARCHS := x86_64 riscv
+VALID_CONFIGS := cross native
+VALID_SUBCMDS := build uninstall check-env install-headers
+VALID_CLEANS := clean inst-clean
+VALID_TARGETS := $(VALID_ARCHS) $(VALID_CONFIGS) \
+                 $(VALID_SUBCMDS) $(VALID_CLEANS)
+ARCH := $(filter $(VALID_ARCHS),$(MAKECMDGOALS))
+CONFIG := $(filter $(VALID_CONFIGS),$(MAKECMDGOALS))
+SUBCMDS := $(filter $(VALID_SUBCMDS),$(MAKECMDGOALS))
+CLEANS := $(filter $(VALID_CLEANS),$(MAKECMDGOALS))
+INVALID_TARGETS := $(filter-out $(VALID_TARGETS),$(MAKECMDGOALS))
+NONCLEANGOALS := $(filter-out $(CLEANS),$(MAKECMDGOALS))
+ifeq ($(words $(CONFIG)),0)
+    CONFIG := cross
+endif
+ifeq ($(words $(SUBCMDS)),0)
+    SUBCMDS := build
+endif
+
+.PHONY: $(VALID_TARGETS)
+
+OK_TO_BUILD :=
+ifeq ($(words $(ARCH)),1)
+    ifeq ($(words $(CONFIG)),1)
+        ifeq ($(INVALID_TARGETS),)
+            OK_TO_BUILD := 1
+        endif
+    endif
+endif
+ifeq ($(OK_TO_BUILD),)
+all $(NONCLEANGOALS): make-real
+       @echo "" > /dev/null
+make-real:
+       $(print-usage)
+else
+all $(NONCLEANGOALS): make-real
+       @echo "" > /dev/null
+make-real:
+       @export AKAROS_COMPILER_REAL_BUILD=true; \
+        export ARCH=$(ARCH); \
+        export CONFIG=$(CONFIG); \
+        $(MAKE) --no-print-directory $(patsubst %, %-real, $(SUBCMDS))
 endif
-endif 
-endif 
 
-# Check to make sure that we have gawk installed on our system and not some
-# other version of awk
+clean:
+       @rm -rf binutils-$(BINUTILS_VERSION)
+       @rm -rf gcc-$(GCC_VERSION)
+       @rm -rf glibc-$(GLIBC_VERSION)
+       @rm -rf gmp-$(GMP_VERSION)
+       @rm -rf mpfr-$(MPFR_VERSION)
+       @rm -rf mpc-$(MPC_VERSION)
+       @rm -rf *-builddir
+       @rm -rf .*-configure
+       @rm -rf .glibc-$(GLIBC_VERSION)-akaros.patch
+       @rm -rf .gcc-$(GCC_VERSION)-akaros.patch
+       @echo "    Removed configs, build dirs, and extracted sources"
+
+inst-clean: clean
+       @for a in $(VALID_ARCHS); do \
+               for c in $(VALID_CONFIGS); do \
+                       $(MAKE) --no-print-directory $$a $$c uninstall; \
+               done \
+       done
+
+else # AKAROS_COMPILER_REAL_BUILD
+
+# Set up some global variables to help us through the make based on the
+# platform we are building for.
+ifeq ($(ARCH),x86_64)
+    AKAROS_ARCH_DIR := x86
+    ARCH_CFLAGS :=
+    GLIBC_CONFIGURE_FLAGS := "--disable-multi-arch"
+    GCC_BUILD_FLAGS := CFLAGS="-fPIC"
+endif
+ifeq ($(ARCH),riscv)
+    AKAROS_ARCH_DIR := riscv
+    ARCH_CFLAGS :=
+    GLIBC_CONFIGURE_FLAGS := 
+    GCC_BUILD_FLAGS :=
+endif
+ifeq ($(CONFIG),cross)
+    INSTDIR_STRING := $(shell echo $(ARCH) | tr 'a-z' 'A-Z')_INSTDIR
+else
+    INSTDIR_STRING := $(shell echo $(ARCH) | tr 'a-z' 'A-Z')_NATIVE_INSTDIR
+    XCCROOT := $(shell dirname $(shell which $(ARCH)-ucb-akaros-gcc) 2>/dev/null)/..
+endif
+BUILDDIR ?= $(shell pwd)/
+AKAROSDIR ?= $(BUILDDIR)/../../../
+INSTDIR := $($(INSTDIR_STRING))
+BINARY_PREFIX := $(ARCH)-ucb-akaros-
+SYSROOT := $(INSTDIR)/$(ARCH)-ucb-akaros/sysroot
+PATH := /$(INSTDIR)/bin:$(PATH)
+
+BUILD_ERRORS :=
+BUILD_ERROR_DELIMITER := <\#\#>
+define add_error
+$(BUILD_ERRORS)$(1)$(BUILD_ERROR_DELIMITER)
+endef
+
+# Check for additional errors before building
 AWK := $(shell awk -W version 2>&1 | head -n 1 | awk '{print $$1}')
 ifneq ($(AWK),GNU)
-$(error You need to have 'gawk' installed on your system!)
+define BUILD_ERROR
+    You need to have 'gawk' installed on your system before proceeding!"
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif
 
-BINUTILS_VERSION := 2.24
-GCC_VERSION := 4.9.2
-GLIBC_VERSION := 2.19
-GMP_VERSION := 5.1.3
-MPFR_VERSION := 3.1.2
-MPC_VERSION := 1.0.2
+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
 
-BUILDDIR ?= $(shell pwd)/
-ROSDIR ?= $(BUILDDIR)/../../../
-DESTDIR ?= /
-
-# Configuration parameters for make-riscv
-RISCV_ARCH := riscv
-RISCV_BINARY_PREFIX := $(RISCV_ARCH)-ucb-akaros-
-RISCV_SYSROOT := $(RISCV_INSTDIR)/$(RISCV_ARCH)-ucb-akaros/sysroot
-RISCV_GLIBC_CONFIGURE_FLAGS := 
-RISCV_GCC_BUILD_FLAGS := 
-RISCV_CFLAGS :=
-
-# Configuration parameters for x86_64
-X86_64_ARCH := x86_64
-X86_64_BINARY_PREFIX := $(X86_64_ARCH)-ucb-akaros-
-X86_64_SYSROOT := $(X86_64_INSTDIR)/$(X86_64_ARCH)-ucb-akaros/sysroot
-X86_64_GLIBC_CONFIGURE_FLAGS := "--disable-multi-arch"
-X86_64_GCC_BUILD_FLAGS := CFLAGS="-fPIC"
-X86_64_CFLAGS :=
-
-# Configuration parameters for x86_64-native
-X86_64_NATIVE_ARCH := x86_64
-X86_64_NATIVE_BINARY_PREFIX := 
-X86_64_NATIVE_SYSROOT := $(X86_64_NATIVE_INSTDIR)
-X86_64_NATIVE_GCC_BUILD_FLAGS := CFLAGS="-fPIC"
-X86_64_NATIVE_CFLAGS :=
-
-#If actually building the cross compiler, make sure that the akaros tree is
-#properly configured for the architecture we are creating the cross compiler
-#for.
-ifneq (,$(filter riscv,$(MAKECMDGOALS)))
-ifeq (,$(shell grep "CONFIG_RISCV=y" $(ROSDIR)/.config))
-error: 
-       @echo "Akaros tree not configured for riscv"
-       @echo "Make sure you have configured ROSDIR for this architecture before proceeding"
-       @echo "e.g. cd \$$ROSDIR"
-       @echo "     make ARCH=riscv defconfig"
-       @false
-riscv: error
+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
+    want your compiler installed. The best way to do this is to create
+    a 'Makelocal' file in the current directory and put a definition
+    for this variable in there.
+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
+    No $(ARCH) Akaros cross-compiler installed in path. Make sure you have
+    built and installed the $(ARCH) cross-compiler using 'make $(ARCH)'
+    before trying to build the crossed-native compiler.
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif
 endif
-ifneq (,$(filter x86_64,$(MAKECMDGOALS)))
-ifeq (,$(shell grep "CONFIG_X86_64=y" $(ROSDIR)/.config))
-error: 
-       @echo "Akaros tree not configured for x86_64"
-       @echo "Make sure you have configured ROSDIR for this architecture before proceeding"
-       @echo "e.g. cd \$$ROSDIR"
-       @echo "     make ARCH=x86 defconfig"
-       @echo "     make ARCH=x86 menuconfig -> Set 64 bit option"
-       @false
-x86_64: error
+ifeq ($(ARCH),riscv)
+ifeq ($(shell grep "CONFIG_RISCV=y" $(AKAROSDIR)/.config),)
+define BUILD_ERROR
+    Akaros tree not configured for $(ARCH)
+    Make sure you have configured AKAROSDIR for this architecture before proceeding
+    e.g. cd $$AKAROSDIR
+         make ARCH=riscv defconfig
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
 endif
 endif
-ifneq (,$(filter x86_64-native,$(MAKECMDGOALS)))
-ifeq (,$(shell which x86_64-ucb-akaros-gcc))
-error: 
-       @echo "No x86_64 Akaros cross-compiler installed in path"
-       @echo "Make sure you have built and installed the x86_64 cross-compiler using 'make x86_64'
-       @echo "before trying to build the crossed-native compiler.
-       @false
-x86_64: error
+
+ifeq ($(ARCH),x86_64)
+ifeq ($(shell grep "CONFIG_X86_64=y" $(AKAROSDIR)/.config),)
+define BUILD_ERROR
+    Akaros tree not configured for x86_64
+    Make sure you have configured AKAROSDIR for this architecture before proceeding
+    e.g. cd $$AKAROSDIR
+         make ARCH=x86 defconfig
+         make ARCH=x86 menuconfig -> Set 64 bit option
+endef
+BUILD_ERRORS := $(call add_error, $(BUILD_ERROR))
+endif
 endif
+
+ROBUST_SUBCMDS := uninstall
+ifeq ($(filter-out $(patsubst %, %-real, $(ROBUST_SUBCMDS)), $(MAKECMDGOALS)),)
+    BUILD_ERRORS :=
 endif
 
-all:
-       @echo "You need to run one of the following commands, "
-       @echo "depending on which version of the cross compiler you are trying to generate:"
-       @echo "  make riscv"
-       @echo "  make x86_64"
-       @echo "  make x86-64-native"
-       @echo "  make riscv-revert"
-       @echo "  make x86_64-revert"
-       @echo "  make x86_64-native-revert"
-       @echo "  make riscv-uninstall"
-       @echo "  make x86_64-uninstall"
-       @echo "  make x86_64-native-uninstall"
-       @echo "  make clean"
-
-riscv:
-       export LD_LIBRARY_PATH=; \
-       export DESTDIR=$(DESTDIR);\
-       export INSTDIR=$(RISCV_INSTDIR);\
-       export SYSROOT=$(RISCV_SYSROOT);\
-       export PATH=$(DESTDIR)$(RISCV_INSTDIR)/bin:$(PATH);\
-       export ARCH=$(RISCV_ARCH);\
-       export ARCH_CFLAGS=$(RISCV_CFLAGS);\
-       export ROS_ARCH_DIR=$(RISCV_ARCH);\
-       export BINARY_PREFIX=$(RISCV_BINARY_PREFIX);\
-       export GLIBC_CONFIGURE_FLAGS=$(RISCV_GLIBC_CONFIGURE_FLAGS);\
-       export GCC_BUILD_FLAGS=$(RISCV_GCC_BUILD_FLAGS);\
-       $(MAKE) make-all
-
-x86_64:
-       export LD_LIBRARY_PATH=; \
-       export DESTDIR=$(DESTDIR);\
-       export INSTDIR=$(X86_64_INSTDIR);\
-       export SYSROOT=$(X86_64_SYSROOT);\
-       export PATH=$(DESTDIR)$(X86_64_INSTDIR)/bin:$(PATH);\
-       export ARCH=$(X86_64_ARCH);\
-       export ARCH_CFLAGS=$(X86_64_CFLAGS);\
-       export ROS_ARCH_DIR=x86;\
-       export BINARY_PREFIX=$(X86_64_BINARY_PREFIX);\
-       export GLIBC_CONFIGURE_FLAGS=$(X86_64_GLIBC_CONFIGURE_FLAGS);\
-       export GCC_BUILD_FLAGS=$(X86_64_GCC_BUILD_FLAGS);\
-       $(MAKE) make-all
-
-x86_64-native:
-       export NATIVE_BUILD=true; \
-       export LD_LIBRARY_PATH=; \
-       export DESTDIR=$(DESTDIR);\
-       export INSTDIR=$(X86_64_NATIVE_INSTDIR);\
-       export SYSROOT=$(X86_64_NATIVE_SYSROOT);\
-       export ARCH=$(X86_64_NATIVE_ARCH);\
-       export BINARY_PREFIX=$(X86_64_NATIVE_BINARY_PREFIX);\
-       export GCC_BUILD_FLAGS=$(X86_64_NATIVE_GCC_BUILD_FLAGS);\
-       export CXXROOT=$(shell dirname $(shell which $(X86_64_NATIVE_ARCH)-ucb-akaros-gcc))/..; \
-       $(MAKE) make-native-all
-
-make-all: 
+ifdef BUILD_ERRORS
+
+export BUILD_ERRORS
+$(MAKECMDGOALS): make-real
+       @echo "" > /dev/null
+make-real:
+       @echo "$${BUILD_ERRORS}" |\
+       awk '\
+               BEGIN { RS="$(BUILD_ERROR_DELIMITER)"; FS="$(BUILD_ERROR_DELIMITER)"; }\
+               { str[NR] = $$i; }\
+               END { for (i = 1; i < NR; i++) {\
+                               print "Error Detected:";\
+                               print substr(str[i], 2); }}\
+       '
+       @exit 2
+
+else # BUILD_ERROR
+
+# Make sure that LD_LIBRARY_PATH is not set during the build process
+unexport LD_LIBRARY_PATH
+
+check-env-real:
+       @echo "    Your environment checks out. Build away!"
+
+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
@@ -161,31 +249,20 @@ make-all:
        $(MAKE) .$(BINARY_PREFIX)gmp-install
        $(MAKE) .$(BINARY_PREFIX)mpfr-install
        $(MAKE) .$(BINARY_PREFIX)mpc-install
-
-make-native-all:
+else
+build-real:
        $(MAKE) .$(BINARY_PREFIX)binutils-install
        $(MAKE) .$(BINARY_PREFIX)gcc-stage3-install
+endif
 
-riscv-uninstall:
-       -rm -rf $(RISCV_INSTDIR)
-
-x86_64-uninstall:
-       -rm -rf $(X86_64_INSTDIR)
-
-x86_64-native-uninstall:
-       -rm -rf $(X86_64_NATIVE_INSTDIR)
-
-riscv-revert:
-       rm -rf $(RISCV_INSTDIR)
-       cp -r $(RISCV_BINARY_PREFIX)install.bak $(RISCV_INSTDIR)
-
-x86_64-revert: 
-       rm -rf $(X86_64_INSTDIR)
-       cp -r $(X86_64_BINARY_PREFIX)install.bak $(X86_64_INSTDIR)
+uninstall-real:
+       @dir=$(INSTDIR);\
+       if [ "$${dir}" != "" ]; then\
+               rm -rf $${dir};\
+               echo "    Removed $${dir} ($(ARCH)-$(CONFIG)-inst)";\
+       fi
 
-x86_64-native-revert: 
-       rm -rf $(X86_64_NATIVE_INSTDIR)
-       cp -r $(X86_64_NATIVE_BINARY_PREFIX)install.bak $(X86_64_NATIVE_INSTDIR)
+install-headers-real: .$(BINARY_PREFIX)akaros-headers-install
 
 %.tar.bz2:
        wget http://akaros.cs.berkeley.edu/xcc/$@
@@ -242,7 +319,7 @@ cross-binutils-configure:
 
 .$(BINARY_PREFIX)binutils-configure: 
        $(MAKE) $(BINARY_PREFIX)binutils-builddir 
-       if [ "$(NATIVE_BUILD)" = "true" ]; then \
+       if [ "$(CONFIG)" = "native" ]; then \
                $(MAKE) native-binutils-configure; \
        else \
                $(MAKE) cross-binutils-configure; \
@@ -364,7 +441,7 @@ $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION)
                --disable-libgomp \
                --disable-libmudflap \
                --disable-nls \
-               --enable-languages=c \
+               --enable-languages=c,c++,fortran \
                --disable-multilib \
                $(GCC_BUILD_FLAGS);
        echo "MAKEINFO = :" >> $(BINARY_PREFIX)gcc-stage2-builddir/Makefile;
@@ -380,24 +457,25 @@ $(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: $(ROSDIR)
+#################################
+############ Headers ############
+#################################
+.$(BINARY_PREFIX)headers-clean:
        rm -rf $(SYSROOT)/usr/include/*
+
+.$(BINARY_PREFIX)akaros-headers-install: $(AKAROSDIR)
        mkdir -p $(SYSROOT)/usr/include
-       cp -r $(ROSDIR)/kern/include/ros \
+       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
-       cp -r $(ROSDIR)/kern/arch/$(ROS_ARCH_DIR)/ros/* \
+       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/
-       cp -r $(ROSDIR)/user/parlib/include/* \
+       cp -r $(AKAROSDIR)/user/parlib/include/* \
            $(SYSROOT)/usr/include/
-       cp -r $(ROSDIR)/user/pthread/*.h \
+       cp -r $(AKAROSDIR)/user/pthread/*.h \
            $(SYSROOT)/usr/include/
-       rm -rf $(SYSROOT)/usr/include/arch
-       ln -s $(ROS_ARCH_DIR) $(SYSROOT)/usr/include/arch
 
 #################################
 ###### Dummy Libs Install #######
@@ -459,6 +537,10 @@ $(BINARY_PREFIX)glibc-stage1-builddir: glibc-$(GLIBC_VERSION)
                --with-pkgversion="akaros-repo" \
                --with-elf \
                --enable-hacker-mode \
+               --enable-static-nss \
+               --enable-obsolete-rpc \
+               --disable-build-nscd \
+               --disable-nscd \
                $(GLIBC_CONFIGURE_FLAGS);
        touch $@
 
@@ -507,6 +589,10 @@ $(BINARY_PREFIX)glibc-stage2-builddir: glibc-$(GLIBC_VERSION)
                --with-pkgversion="akaros-repo" \
                --with-elf \
                --enable-hacker-mode \
+               --enable-static-nss \
+               --enable-obsolete-rpc \
+               --disable-build-nscd \
+               --disable-nscd \
                $(GLIBC_CONFIGURE_FLAGS);
        touch $@
 
@@ -522,9 +608,9 @@ $(BINARY_PREFIX)glibc-stage2-builddir: glibc-$(GLIBC_VERSION)
 ####### AKAROS Libs Install #######
 ###################################
 .$(BINARY_PREFIX)akaros-libs-install:
-       cd $(ROSDIR); \
-       make ARCH=$(ROS_ARCH_DIR) userclean; \
-       make ARCH=$(ROS_ARCH_DIR) -j $(MAKE_JOBS) install-libs
+       cd $(AKAROSDIR); \
+       make ARCH=$(AKAROS_ARCH_DIR) userclean; \
+       make ARCH=$(AKAROS_ARCH_DIR) -j $(MAKE_JOBS) install-libs
 
 ##################################
 ########### Gcc Stage 3 ##########
@@ -542,10 +628,10 @@ native-gcc-stage3-configure: native-gcc-stage3-prep
                --target=$(ARCH)-ucb-akaros \
                --host=$(ARCH)-ucb-akaros \
                --prefix=$(INSTDIR) \
-               --with-gmp=$(CXXROOT) \
-               --with-mpfr=$(CXXROOT) \
-               --with-mpc=$(CXXROOT) \
-               --enable-languages=c,c++ \
+               --with-gmp=$(XCCROOT) \
+               --with-mpfr=$(XCCROOT) \
+               --with-mpc=$(XCCROOT) \
+               --enable-languages=c,c++,fortran \
                --with-pkgversion="akaros-repo" \
                --disable-__cxa_atexit \
                --disable-mudflap \
@@ -557,13 +643,15 @@ native-gcc-stage3-configure: native-gcc-stage3-prep
                --with-isl=no \
                --with-cloog=no \
                --with-libelf=no \
-               --enable-threads=no \
+               --enable-threads=posix \
                --enable-tls \
                --disable-nls \
                --disable-multilib \
                --enable-c99 \
                --enable-long-long \
                --enable-shared \
+               --disable-canonical-prefixes \
+               --disable-canonical-system-headers \
                $(GCC_BUILD_FLAGS);
 
 cross-gcc-stage3-configure:
@@ -575,7 +663,7 @@ cross-gcc-stage3-configure:
                --target=$(ARCH)-ucb-akaros \
                --prefix=$(INSTDIR) \
                --with-sysroot=$(SYSROOT) \
-               --enable-languages=c,c++ \
+               --enable-languages=c,c++,fortran \
                --with-pkgversion="akaros-repo" \
                --disable-__cxa_atexit \
                --disable-mudflap \
@@ -587,18 +675,20 @@ cross-gcc-stage3-configure:
                --with-isl=no \
                --with-cloog=no \
                --with-libelf=no \
-               --enable-threads=no \
+               --enable-threads=posix \
                --disable-nls \
                --disable-multilib \
                --with-local-prefix=$(SYSROOT) \
                --enable-c99 \
                --enable-long-long \
                --enable-shared \
+               --disable-canonical-prefixes \
+               --disable-canonical-system-headers \
                $(GCC_BUILD_FLAGS);
 
 .$(BINARY_PREFIX)gcc-stage3-configure:
        $(MAKE) $(BINARY_PREFIX)gcc-stage3-builddir
-       if [ "$(NATIVE_BUILD)" = "true" ]; then \
+       if [ "$(CONFIG)" = "native" ]; then \
                $(MAKE) native-gcc-stage3-configure; \
        else \
                $(MAKE) cross-gcc-stage3-configure; \
@@ -698,18 +788,5 @@ $(BINARY_PREFIX)mpc-builddir: mpc-$(MPC_VERSION)
        cd $(BINARY_PREFIX)mpc-builddir; \
        make -j $(MAKE_JOBS) install
 
-##################################
-######## Clean it all up! ########
-##################################
-clean:
-       rm -rf binutils-$(BINUTILS_VERSION) 
-       rm -rf gcc-$(GCC_VERSION) 
-       rm -rf glibc-$(GLIBC_VERSION) 
-       rm -rf gmp-$(GMP_VERSION)
-       rm -rf mpfr-$(MPFR_VERSION)
-       rm -rf mpc-$(MPC_VERSION)
-       rm -rf *-builddir
-       rm -rf .*-configure
-       rm -rf *$(BINARY_PREFIX)install.bak
-       rm -rf .glibc-$(GLIBC_VERSION)-akaros.patch
-       rm -rf .gcc-$(GCC_VERSION)-akaros.patch
+endif # BUILD_ERROR
+endif # AKAROS_COMPILER_REAL_BUILD