|  | # Number of make jobs to spawn.  Define it in Makelocal | 
|  | MAKE_JOBS ?= $(shell expr `cat /proc/cpuinfo | grep processor | wc -l` - 1) | 
|  |  | 
|  | BINUTILS_VERSION := 2.30 | 
|  | 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 | 
|  |  | 
|  | 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 | 
|  |  | 
|  | 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) | 
|  | define BUILD_ERROR | 
|  | You need to have 'gawk' installed on your system before proceeding!" | 
|  | 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 | 
|  | 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 | 
|  | 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 | 
|  |  | 
|  | 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 | 
|  |  | 
|  | 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!" | 
|  |  | 
|  | define make_and_log | 
|  | $(MAKE) $(1) > build_logs/$(2).log 2>&1 | 
|  | @echo "make $(2) succeeded" | 
|  | endef | 
|  |  | 
|  | ifeq ($(CONFIG),cross) | 
|  | build-real: | 
|  | $(shell mkdir -p build_logs) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)binutils-install,$(BINARY_PREFIX)binutils-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)gcc-stage1-install,$(BINARY_PREFIX)gcc-stage1-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)headers-clean,$(BINARY_PREFIX)headers-clean) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)akaros-headers-install,$(BINARY_PREFIX)akaros-headers-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)dummy-libs-install,$(BINARY_PREFIX)dummy-libs-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)glibc-stage1-install,$(BINARY_PREFIX)glibc-stage1-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)gcc-stage2-install,$(BINARY_PREFIX)gcc-stage2-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)glibc-stage2-install,$(BINARY_PREFIX)glibc-stage2-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)akaros-libs-install,$(BINARY_PREFIX)akaros-libs-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)gcc-stage3-install,$(BINARY_PREFIX)gcc-stage3-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)gmp-install,$(BINARY_PREFIX)gmp-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)mpfr-install,$(BINARY_PREFIX)mpfr-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)mpc-install,$(BINARY_PREFIX)mpc-install) | 
|  | else | 
|  | build-real: | 
|  | $(shell mkdir -p build_logs) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)binutils-install,$(BINARY_PREFIX)binutils-install) | 
|  | $(call make_and_log,.$(BINARY_PREFIX)gcc-stage3-install,$(BINARY_PREFIX)gcc-stage3-install) | 
|  | endif | 
|  |  | 
|  | uninstall-real: | 
|  | @dir=$(INSTDIR);\ | 
|  | if [ "$${dir}" != "" ]; then\ | 
|  | rm -rf $${dir};\ | 
|  | echo "    Removed $${dir} ($(ARCH)-$(CONFIG)-inst)";\ | 
|  | fi | 
|  |  | 
|  | install-headers-real: .$(BINARY_PREFIX)akaros-headers-install | 
|  |  | 
|  | %.tar.bz2: | 
|  | wget http://akaros.cs.berkeley.edu/xcc/$@ | 
|  |  | 
|  | %.tar.gz: | 
|  | wget http://akaros.cs.berkeley.edu/xcc/$@ | 
|  |  | 
|  | ################################# | 
|  | ########### BINUTILS ############ | 
|  | ################################# | 
|  | binutils-$(BINUTILS_VERSION): binutils-$(BINUTILS_VERSION).tar.bz2 | 
|  | rm -rf binutils-$(BINUTILS_VERSION); | 
|  | tar -jxf binutils-$(BINUTILS_VERSION).tar.bz2 | 
|  | patch -p0 < binutils-$(BINUTILS_VERSION)-akaros.patch | 
|  |  | 
|  | $(BINARY_PREFIX)binutils-builddir: binutils-$(BINUTILS_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | native-binutils-configure: | 
|  | cd $(BINARY_PREFIX)binutils-builddir; \ | 
|  | CFLAGS="-O2 -g -pipe" \ | 
|  | CXXFLAGS="-O2 -g -pipe" \ | 
|  | LDFLAGS="" \ | 
|  | ../binutils-$(BINUTILS_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --host=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --disable-werror \ | 
|  | --enable-ld=yes \ | 
|  | --enable-gold=yes \ | 
|  | --enable-plugins=yes \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-multilib \ | 
|  | --disable-nls | 
|  |  | 
|  | cross-binutils-configure: | 
|  | cd $(BINARY_PREFIX)binutils-builddir; \ | 
|  | CFLAGS="-O2 -g -pipe" \ | 
|  | CXXFLAGS="-O2 -g -pipe" \ | 
|  | LDFLAGS="" \ | 
|  | ../binutils-$(BINUTILS_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --disable-werror \ | 
|  | --enable-ld=yes \ | 
|  | --enable-gold=yes \ | 
|  | --enable-plugins=yes \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-multilib \ | 
|  | --disable-nls \ | 
|  | --with-sysroot=$(SYSROOT) | 
|  |  | 
|  | .$(BINARY_PREFIX)binutils-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)binutils-builddir | 
|  | if [ "$(CONFIG)" = "native" ]; then \ | 
|  | $(MAKE) native-binutils-configure; \ | 
|  | else \ | 
|  | $(MAKE) cross-binutils-configure; \ | 
|  | fi | 
|  | echo "MAKEINFO = :" >> $(BINARY_PREFIX)binutils-builddir/Makefile; | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)binutils-make: .$(BINARY_PREFIX)binutils-configure | 
|  | cd $(BINARY_PREFIX)binutils-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)binutils-install: .$(BINARY_PREFIX)binutils-make | 
|  | cd $(BINARY_PREFIX)binutils-builddir; \ | 
|  | make -j $(MAKE_JOBS) install | 
|  |  | 
|  | binutils-clean: | 
|  | cd $(BINARY_PREFIX)binutils-builddir; \ | 
|  | make clean | 
|  |  | 
|  | ################################# | 
|  | ########## GCC Stage 1 ########## | 
|  | ################################# | 
|  | .gcc-akaros-directory-patch: | 
|  | -cd gcc-$(GCC_VERSION); \ | 
|  | diff -ruB --unidirectional-new-file \ | 
|  | ../gcc-$(GCC_VERSION) \ | 
|  | ../gcc-$(GCC_VERSION)-akaros \ | 
|  | | grep -v "Only in ../gcc-$(GCC_VERSION)" \ | 
|  | > ../.gcc-$(GCC_VERSION)-akaros-directory.patch; \ | 
|  | patch -p2 < ../.gcc-$(GCC_VERSION)-akaros-directory.patch | 
|  |  | 
|  | gcc-$(GCC_VERSION): gcc-$(GCC_VERSION).tar.bz2 \ | 
|  | gmp-$(GMP_VERSION) \ | 
|  | mpfr-$(MPFR_VERSION) \ | 
|  | mpc-$(MPC_VERSION) | 
|  | rm -rf gcc-$(GCC_VERSION) | 
|  | tar -jxf gcc-$(GCC_VERSION).tar.bz2 | 
|  | $(MAKE) .gcc-akaros-directory-patch | 
|  | patch --no-backup-if-mismatch -p0 < gcc-$(GCC_VERSION)-r233572.patch | 
|  | patch --no-backup-if-mismatch -p0 < gcc-$(GCC_VERSION)-riscv.patch | 
|  | patch --no-backup-if-mismatch -p0 < gcc-$(GCC_VERSION)-existing.patch | 
|  | (cd gcc-$(GCC_VERSION) && \ | 
|  | ln -s ../gmp-$(GMP_VERSION) gmp && \ | 
|  | ln -s ../mpfr-$(MPFR_VERSION) mpfr && \ | 
|  | ln -s ../mpc-$(MPC_VERSION) mpc) | 
|  |  | 
|  | $(BINARY_PREFIX)gcc-stage1-builddir: gcc-$(GCC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage1-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)gcc-stage1-builddir | 
|  | cd $(BINARY_PREFIX)gcc-stage1-builddir; \ | 
|  | CFLAGS="-O2 -g -pipe" \ | 
|  | CXXFLAGS="-O2 -g -pipe" \ | 
|  | LDFLAGS="-lstdc++ -lm" \ | 
|  | ../gcc-$(GCC_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-local-prefix=$(SYSROOT) \ | 
|  | --disable-mudflap \ | 
|  | --with-sysroot=$(SYSROOT) \ | 
|  | --with-newlib \ | 
|  | --enable-threads=no \ | 
|  | --enable-tls \ | 
|  | --disable-shared \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-__cxa_atexit \ | 
|  | --with-ppl=no \ | 
|  | --with-isl=no \ | 
|  | --with-cloog=no \ | 
|  | --with-libelf=no \ | 
|  | --disable-lto \ | 
|  | --disable-libgomp \ | 
|  | --disable-mudflap \ | 
|  | --disable-nls \ | 
|  | --disable-multilib \ | 
|  | --enable-languages=c \ | 
|  | --enable-linker-build-id \ | 
|  | $(GCC_BUILD_FLAGS); | 
|  | echo "MAKEINFO = :" >> $(BINARY_PREFIX)gcc-stage1-builddir/Makefile; | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage1-make: .$(BINARY_PREFIX)gcc-stage1-configure | 
|  | cd $(BINARY_PREFIX)gcc-stage1-builddir; \ | 
|  | make -j $(MAKE_JOBS) all-gcc; | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage1-install: .$(BINARY_PREFIX)gcc-stage1-make | 
|  | cd $(BINARY_PREFIX)gcc-stage1-builddir; \ | 
|  | make -j $(MAKE_JOBS) install-gcc; | 
|  |  | 
|  | ################################# | 
|  | ########## GCC Stage 2 ########## | 
|  | ################################# | 
|  | $(BINARY_PREFIX)gcc-stage2-builddir: gcc-$(GCC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage2-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)gcc-stage2-builddir | 
|  | cd $(BINARY_PREFIX)gcc-stage2-builddir; \ | 
|  | CFLAGS="-O2 -g -pipe" \ | 
|  | CXXFLAGS="-O2 -g -pipe" \ | 
|  | LDFLAGS="-lstdc++ -lm" \ | 
|  | ../gcc-$(GCC_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-local-prefix=$(SYSROOT) \ | 
|  | --disable-mudflap \ | 
|  | --with-sysroot=$(SYSROOT) \ | 
|  | --with-newlib \ | 
|  | --enable-threads=no \ | 
|  | --enable-tls \ | 
|  | --disable-shared \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-__cxa_atexit \ | 
|  | --with-ppl=no \ | 
|  | --with-sil=no \ | 
|  | --with-cloog=no \ | 
|  | --with-libelf=no \ | 
|  | --disable-lto \ | 
|  | --disable-libgomp \ | 
|  | --disable-libmudflap \ | 
|  | --disable-nls \ | 
|  | --enable-languages=c,c++,fortran \ | 
|  | --disable-multilib \ | 
|  | --enable-linker-build-id \ | 
|  | $(GCC_BUILD_FLAGS); | 
|  | echo "MAKEINFO = :" >> $(BINARY_PREFIX)gcc-stage2-builddir/Makefile; | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage2-make: .$(BINARY_PREFIX)gcc-stage2-configure | 
|  | cd $(BINARY_PREFIX)gcc-stage2-builddir; \ | 
|  | make -j $(MAKE_JOBS) gcc_cv_libc_provides_ssp=yes \ | 
|  | all-gcc \ | 
|  | all-target-libgcc; | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage2-install: .$(BINARY_PREFIX)gcc-stage2-make | 
|  | cd $(BINARY_PREFIX)gcc-stage2-builddir; \ | 
|  | make -j $(MAKE_JOBS) install-gcc install-target-libgcc; | 
|  |  | 
|  | ################################# | 
|  | ############ 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 -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 $(AKAROSDIR)/user/parlib/include/* \ | 
|  | $(SYSROOT)/usr/include/ | 
|  | cp -r $(AKAROSDIR)/user/pthread/*.h \ | 
|  | $(SYSROOT)/usr/include/ | 
|  |  | 
|  | ################################# | 
|  | ###### Dummy Libs Install ####### | 
|  | ################################# | 
|  | .$(BINARY_PREFIX)dummy-libs-install: | 
|  | rm -rf $(SYSROOT)/usr/lib/libparlib.a | 
|  | mkdir -p $(SYSROOT)/usr/lib | 
|  | $(ARCH)-ucb-akaros-ar cr $(SYSROOT)/usr/lib/libparlib.a | 
|  |  | 
|  | ################################# | 
|  | ######### Glibc Stage 1 ######### | 
|  | ################################# | 
|  | .glibc-akaros-directory-patch: | 
|  | -cd glibc-$(GLIBC_VERSION); \ | 
|  | diff -ruB --unidirectional-new-file \ | 
|  | ../glibc-$(GLIBC_VERSION) \ | 
|  | ../glibc-$(GLIBC_VERSION)-akaros \ | 
|  | | grep -v "Only in ../glibc-$(GLIBC_VERSION)" \ | 
|  | > ../.glibc-$(GLIBC_VERSION)-akaros-directory.patch; \ | 
|  | patch -p2 < ../.glibc-$(GLIBC_VERSION)-akaros-directory.patch | 
|  |  | 
|  | # On occasion, include/pthread.h was getting installed in stage 2, clobbering | 
|  | # parlib's pthread.h. | 
|  | glibc-$(GLIBC_VERSION): glibc-$(GLIBC_VERSION).tar.bz2 | 
|  | rm -rf glibc-$(GLIBC_VERSION) | 
|  | tar -jxf glibc-$(GLIBC_VERSION).tar.bz2 | 
|  | rm glibc-$(GLIBC_VERSION)/include/pthread.h | 
|  | $(MAKE) .glibc-akaros-directory-patch | 
|  | patch --no-backup-if-mismatch -p0 < glibc-$(GLIBC_VERSION)-riscv.patch | 
|  | patch --no-backup-if-mismatch -p0 < glibc-$(GLIBC_VERSION)-existing.patch | 
|  |  | 
|  | $(BINARY_PREFIX)glibc-stage1-builddir: glibc-$(GLIBC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)glibc-stage1-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)glibc-stage1-builddir; | 
|  | cd $(BINARY_PREFIX)glibc-stage1-builddir; \ | 
|  | CFLAGS="$(ARCH_CFLAGS) -U_FORTIFY_SOURCE -g -O2 -pipe" \ | 
|  | CXXFLAGS="-fpermissive" \ | 
|  | CC=$(ARCH)-ucb-akaros-gcc \ | 
|  | AR=$(ARCH)-ucb-akaros-ar \ | 
|  | RANLIB=$(ARCH)-ucb-akaros-ranlib \ | 
|  | ../glibc-$(GLIBC_VERSION)/configure \ | 
|  | --prefix=/usr \ | 
|  | --host=$(ARCH)-ucb-akaros \ | 
|  | --cache-file=$(BINARY_PREFIX)glibc-stage1-builddir/config.cache \ | 
|  | --without-cvs \ | 
|  | --disable-profile \ | 
|  | --without-gd \ | 
|  | --with-headers=$(SYSROOT)/usr/include \ | 
|  | --disable-debug \ | 
|  | --disable-sanity-checks \ | 
|  | --enable-kernel= \ | 
|  | --with-__thread \ | 
|  | --with-tls \ | 
|  | --without-nptl \ | 
|  | --enable-shared \ | 
|  | --enable-add-ons=no \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --with-elf \ | 
|  | --enable-hacker-mode \ | 
|  | --enable-static-nss \ | 
|  | --enable-obsolete-rpc \ | 
|  | --disable-build-nscd \ | 
|  | --disable-nscd \ | 
|  | $(GLIBC_CONFIGURE_FLAGS); | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)glibc-stage1-install: .$(BINARY_PREFIX)glibc-stage1-configure | 
|  | cd $(BINARY_PREFIX)glibc-stage1-builddir; \ | 
|  | make -j $(MAKE_JOBS) \ | 
|  | install_root=$(SYSROOT) \ | 
|  | install-bootstrap-headers=yes \ | 
|  | install-headers; \ | 
|  | touch $(SYSROOT)/usr/include/gnu/stubs.h; \ | 
|  | cp glibc-$(GLIBC_VERSION)/include/features.h $(SYSROOT)/usr/include/features.h; \ | 
|  | cp bits/stdio_lim.h $(SYSROOT)/usr/include/bits/stdio_lim.h; \ | 
|  | make -j $(MAKE_JOBS) csu/subdir_lib; | 
|  |  | 
|  | #################################### | 
|  | ########## Glibc Stage 2  ########## | 
|  | #################################### | 
|  | $(BINARY_PREFIX)glibc-stage2-builddir: glibc-$(GLIBC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)glibc-stage2-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)glibc-stage2-builddir | 
|  | cd $(BINARY_PREFIX)glibc-stage2-builddir; \ | 
|  | CFLAGS="$(ARCH_CFLAGS) -U_FORTIFY_SOURCE -g -O2 -pipe" \ | 
|  | CXXFLAGS="-fpermissive" \ | 
|  | CC=x86_64-ucb-akaros-gcc \ | 
|  | AR=x86_64-ucb-akaros-ar \ | 
|  | RANLIB=x86_64-ucb-akaros-ranlib \ | 
|  | ../glibc-$(GLIBC_VERSION)/configure \ | 
|  | --prefix=/usr \ | 
|  | --host=$(ARCH)-ucb-akaros \ | 
|  | --cache-file=$(BINARY_PREFIX)glibc-stage2-builddir/config.cache \ | 
|  | --without-cvs \ | 
|  | --disable-profile \ | 
|  | --without-gd \ | 
|  | --with-headers=$(SYSROOT)/usr/include \ | 
|  | --disable-debug \ | 
|  | --disable-sanity-checks \ | 
|  | --enable-kernel= \ | 
|  | --with-__thread \ | 
|  | --with-tls \ | 
|  | --without-nptl \ | 
|  | --enable-shared \ | 
|  | --enable-add-ons=no \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --with-elf \ | 
|  | --enable-hacker-mode \ | 
|  | --enable-static-nss \ | 
|  | --enable-obsolete-rpc \ | 
|  | --disable-build-nscd \ | 
|  | --disable-nscd \ | 
|  | $(GLIBC_CONFIGURE_FLAGS); | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)glibc-stage2-make: .$(BINARY_PREFIX)glibc-stage2-configure | 
|  | cd $(BINARY_PREFIX)glibc-stage2-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)glibc-stage2-install: .$(BINARY_PREFIX)glibc-stage2-make | 
|  | cd $(BINARY_PREFIX)glibc-stage2-builddir; \ | 
|  | make -j $(MAKE_JOBS) install_root=$(SYSROOT) install | 
|  |  | 
|  | ################################### | 
|  | ####### AKAROS Libs Install ####### | 
|  | ################################### | 
|  | .$(BINARY_PREFIX)akaros-libs-install: | 
|  | cd $(AKAROSDIR); \ | 
|  | make ARCH=$(AKAROS_ARCH_DIR) userclean; \ | 
|  | make ARCH=$(AKAROS_ARCH_DIR) -j $(MAKE_JOBS) install-base-libs | 
|  |  | 
|  | ################################## | 
|  | ########### Gcc Stage 3 ########## | 
|  | ################################## | 
|  | $(BINARY_PREFIX)gcc-stage3-builddir: gcc-$(GCC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | native-gcc-stage3-prep: | 
|  | mkdir -p $(INSTDIR)/usr; \ | 
|  |  | 
|  | native-gcc-stage3-configure: native-gcc-stage3-prep | 
|  | cd $(BINARY_PREFIX)gcc-stage3-builddir; \ | 
|  | ../gcc-$(GCC_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --host=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-gmp=$(XCCROOT) \ | 
|  | --with-mpfr=$(XCCROOT) \ | 
|  | --with-mpc=$(XCCROOT) \ | 
|  | --enable-languages=c,c++,fortran \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-__cxa_atexit \ | 
|  | --disable-mudflap \ | 
|  | --enable-libgomp \ | 
|  | --disable-libssp \ | 
|  | --disable-libquadmath \ | 
|  | --disable-libquadmath-support \ | 
|  | --with-ppl=no \ | 
|  | --with-isl=no \ | 
|  | --with-cloog=no \ | 
|  | --with-libelf=no \ | 
|  | --enable-threads=akaros \ | 
|  | --enable-tls \ | 
|  | --disable-nls \ | 
|  | --disable-multilib \ | 
|  | --enable-c99 \ | 
|  | --enable-long-long \ | 
|  | --enable-shared \ | 
|  | --disable-canonical-prefixes \ | 
|  | --disable-canonical-system-headers \ | 
|  | --enable-linker-build-id \ | 
|  | $(GCC_BUILD_FLAGS); | 
|  |  | 
|  | cross-gcc-stage3-configure: | 
|  | cd $(BINARY_PREFIX)gcc-stage3-builddir; \ | 
|  | CFLAGS="-O2 -g -pipe" \ | 
|  | CXXFLAGS="-O2 -g -pipe" \ | 
|  | LDFLAGS="-lstdc++ -lm" \ | 
|  | ../gcc-$(GCC_VERSION)/configure \ | 
|  | --target=$(ARCH)-ucb-akaros \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-sysroot=$(SYSROOT) \ | 
|  | --enable-languages=c,c++,fortran \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-__cxa_atexit \ | 
|  | --disable-mudflap \ | 
|  | --enable-libgomp \ | 
|  | --disable-libssp \ | 
|  | --disable-libquadmath \ | 
|  | --disable-libquadmath-support \ | 
|  | --with-ppl=no \ | 
|  | --with-isl=no \ | 
|  | --with-cloog=no \ | 
|  | --with-libelf=no \ | 
|  | --enable-threads=akaros \ | 
|  | --disable-nls \ | 
|  | --disable-multilib \ | 
|  | --with-local-prefix=$(SYSROOT) \ | 
|  | --enable-c99 \ | 
|  | --enable-long-long \ | 
|  | --enable-shared \ | 
|  | --disable-canonical-prefixes \ | 
|  | --disable-canonical-system-headers \ | 
|  | --enable-linker-build-id \ | 
|  | $(GCC_BUILD_FLAGS); | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage3-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)gcc-stage3-builddir | 
|  | if [ "$(CONFIG)" = "native" ]; then \ | 
|  | $(MAKE) native-gcc-stage3-configure; \ | 
|  | else \ | 
|  | $(MAKE) cross-gcc-stage3-configure; \ | 
|  | fi | 
|  | echo "MAKEINFO = :" >> $(BINARY_PREFIX)gcc-stage3-builddir/Makefile; | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage3-make: .$(BINARY_PREFIX)gcc-stage3-configure | 
|  | cd $(BINARY_PREFIX)gcc-stage3-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage3-install: .$(BINARY_PREFIX)gcc-stage3-make | 
|  | cd $(BINARY_PREFIX)gcc-stage3-builddir; \ | 
|  | make -j $(MAKE_JOBS) install | 
|  |  | 
|  | ################################## | 
|  | ######### GMP, MPFR, MPC ######### | 
|  | ################################## | 
|  | gmp-$(GMP_VERSION): gmp-$(GMP_VERSION).tar.bz2 | 
|  | rm -rf gmp-$(GMP_VERSION) | 
|  | tar -jxf gmp-$(GMP_VERSION).tar.bz2 | 
|  | patch -p0 < gmp-$(GMP_VERSION)-akaros.patch | 
|  |  | 
|  | mpfr-$(MPFR_VERSION): mpfr-$(MPFR_VERSION).tar.bz2 | 
|  | rm -rf mpfr-$(MPFR_VERSION) | 
|  | tar -jxf mpfr-$(MPFR_VERSION).tar.bz2 | 
|  | patch -p0 < mpfr-$(MPFR_VERSION)-akaros.patch | 
|  |  | 
|  | mpc-$(MPC_VERSION): mpc-$(MPC_VERSION).tar.gz | 
|  | rm -rf mpc-$(MPC_VERSION) | 
|  | tar -zxf mpc-$(MPC_VERSION).tar.gz | 
|  | patch -p0 < mpc-$(MPC_VERSION)-akaros.patch | 
|  |  | 
|  | $(BINARY_PREFIX)gmp-builddir: gmp-$(GMP_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | $(BINARY_PREFIX)mpfr-builddir: mpfr-$(MPFR_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | $(BINARY_PREFIX)mpc-builddir: mpc-$(MPC_VERSION) | 
|  | rm -rf $@ | 
|  | mkdir -p $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gmp-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)gmp-builddir | 
|  | cd $(BINARY_PREFIX)gmp-builddir; \ | 
|  | ../gmp-$(GMP_VERSION)/configure \ | 
|  | --disable-static \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --host=$(ARCH)-ucb-akaros | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)mpfr-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)mpfr-builddir | 
|  | cd $(BINARY_PREFIX)mpfr-builddir; \ | 
|  | ../mpfr-$(MPFR_VERSION)/configure \ | 
|  | --disable-static \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-gmp=$(INSTDIR) \ | 
|  | --host=$(ARCH)-ucb-akaros | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)mpc-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)mpc-builddir | 
|  | cd $(BINARY_PREFIX)mpc-builddir; \ | 
|  | ../mpc-$(MPC_VERSION)/configure \ | 
|  | --disable-static \ | 
|  | --prefix=$(INSTDIR) \ | 
|  | --with-gmp=$(INSTDIR) \ | 
|  | --with-mpfr=$(INSTDIR) \ | 
|  | --host=$(ARCH)-ucb-akaros | 
|  | touch $@ | 
|  |  | 
|  | .$(BINARY_PREFIX)gmp-make: .$(BINARY_PREFIX)gmp-configure | 
|  | cd $(BINARY_PREFIX)gmp-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)mpfr-make: .$(BINARY_PREFIX)mpfr-configure | 
|  | cd $(BINARY_PREFIX)mpfr-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)mpc-make: .$(BINARY_PREFIX)mpc-configure | 
|  | cd $(BINARY_PREFIX)mpc-builddir; \ | 
|  | make -j $(MAKE_JOBS) | 
|  |  | 
|  | .$(BINARY_PREFIX)gmp-install: .$(BINARY_PREFIX)gmp-make | 
|  | cd $(BINARY_PREFIX)gmp-builddir; \ | 
|  | make -j $(MAKE_JOBS) install | 
|  |  | 
|  | .$(BINARY_PREFIX)mpfr-install: .$(BINARY_PREFIX)mpfr-make | 
|  | cd $(BINARY_PREFIX)mpfr-builddir; \ | 
|  | make -j $(MAKE_JOBS) install | 
|  |  | 
|  | .$(BINARY_PREFIX)mpc-install: .$(BINARY_PREFIX)mpc-make | 
|  | cd $(BINARY_PREFIX)mpc-builddir; \ | 
|  | make -j $(MAKE_JOBS) install | 
|  |  | 
|  | endif # BUILD_ERROR | 
|  | endif # AKAROS_COMPILER_REAL_BUILD |