|  | # Number of make jobs to spawn.  Define it in Makelocal | 
|  | MAKE_JOBS := | 
|  |  | 
|  | # Defines where to install the toolchain | 
|  | -include Makelocal | 
|  |  | 
|  | ifndef RISCV_INSTDIR | 
|  | ifndef I686_INSTDIR | 
|  | ifndef X86_64_INSTDIR | 
|  | ifndef X86_64_NATIVE_INSTDIR | 
|  | busted: | 
|  | @echo "You need to setup either a RISCV_INSTDIR, an I686_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 | 
|  | i686: busted | 
|  | x86_64: busted | 
|  | x86_64-native: busted | 
|  | endif | 
|  | endif | 
|  | endif | 
|  | endif | 
|  |  | 
|  | # Check to make sure that we have gawk installed on our system and not some | 
|  | # other version of awk | 
|  | 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!) | 
|  | endif | 
|  |  | 
|  | # Check to make sure that we have the GMP, MPFR, and MPC libraries installed | 
|  | GMP_OK := $(shell echo "int main() {return 0;}" | gcc -x c - -lgmp -lmpfr -lmpc -o /dev/null > /dev/null && echo OK) | 
|  | ifneq ($(GMP_OK),OK) | 
|  | $(error You need to have the libraries GMP, MPFR, and MPC installed on your system!) | 
|  | 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 | 
|  |  | 
|  | 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 | 
|  | I686_ARCH := i686 | 
|  | I686_BINARY_PREFIX := $(I686_ARCH)-ucb-akaros- | 
|  | I686_SYSROOT := $(I686_INSTDIR)/$(I686_ARCH)-ucb-akaros/sysroot | 
|  | I686_GLIBC_CONFIGURE_FLAGS := | 
|  | I686_GCC_BUILD_FLAGS := | 
|  | I686_CFLAGS := -march=i486 | 
|  |  | 
|  | # 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 | 
|  | endif | 
|  | endif | 
|  | ifneq (,$(filter i686,$(MAKECMDGOALS))) | 
|  | ifeq (,$(shell grep "CONFIG_X86_32=y" $(ROSDIR)/.config)) | 
|  | error: | 
|  | @echo "Akaros tree not configured for i686" | 
|  | @echo "Make sure you have configured ROSDIR for this architecture before proceeding" | 
|  | @echo "e.g. cd \$$ROSDIR" | 
|  | @echo "     make ARCH=x86 defconfig" | 
|  | @false | 
|  | i686: 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 | 
|  | 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 | 
|  | endif | 
|  | 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 i686" | 
|  | @echo "  make x86_64" | 
|  | @echo "  make x86-64-native" | 
|  | @echo "  make riscv-revert" | 
|  | @echo "  make i686-revert" | 
|  | @echo "  make x86_64-revert" | 
|  | @echo "  make x86_64-native-revert" | 
|  | @echo "  make riscv-uninstall" | 
|  | @echo "  make i686-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 | 
|  |  | 
|  | i686: | 
|  | export LD_LIBRARY_PATH=; \ | 
|  | export DESTDIR=$(DESTDIR);\ | 
|  | export INSTDIR=$(I686_INSTDIR);\ | 
|  | export SYSROOT=$(I686_SYSROOT);\ | 
|  | export PATH=$(DESTDIR)$(I686_INSTDIR)/bin:$(PATH);\ | 
|  | export ARCH=$(I686_ARCH);\ | 
|  | export ARCH_CFLAGS=$(I686_CFLAGS);\ | 
|  | export ROS_ARCH_DIR=x86;\ | 
|  | export BINARY_PREFIX=$(I686_BINARY_PREFIX);\ | 
|  | export GLIBC_CONFIGURE_FLAGS=$(I686_GLIBC_CONFIGURE_FLAGS);\ | 
|  | export GCC_BUILD_FLAGS=$(I686_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: | 
|  | $(MAKE) .$(BINARY_PREFIX)binutils-install | 
|  | $(MAKE) .$(BINARY_PREFIX)gcc-stage1-install | 
|  | $(MAKE) .$(BINARY_PREFIX)akaros-headers-install | 
|  | $(MAKE) .$(BINARY_PREFIX)dummy-libs-install | 
|  | $(MAKE) .$(BINARY_PREFIX)glibc-stage1-install | 
|  | $(MAKE) .$(BINARY_PREFIX)gcc-stage2-install | 
|  | $(MAKE) .$(BINARY_PREFIX)glibc-stage2-install | 
|  | $(MAKE) .$(BINARY_PREFIX)akaros-libs-install | 
|  | $(MAKE) .$(BINARY_PREFIX)gcc-stage3-install | 
|  | $(MAKE) .$(BINARY_PREFIX)gmp-install | 
|  | $(MAKE) .$(BINARY_PREFIX)mpfr-install | 
|  | $(MAKE) .$(BINARY_PREFIX)mpc-install | 
|  |  | 
|  | make-native-all: | 
|  | $(MAKE) .$(BINARY_PREFIX)binutils-install | 
|  | $(MAKE) .$(BINARY_PREFIX)gcc-stage3-install | 
|  |  | 
|  | riscv-uninstall: | 
|  | -rm -rf $(RISCV_INSTDIR) | 
|  |  | 
|  | i686-uninstall: | 
|  | -rm -rf $(I686_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) | 
|  |  | 
|  | i686-revert: | 
|  | rm -rf $(I686_INSTDIR) | 
|  | cp -r $(I686_BINARY_PREFIX)install.bak $(I686_INSTDIR) | 
|  |  | 
|  | x86_64-revert: | 
|  | rm -rf $(X86_64_INSTDIR) | 
|  | cp -r $(X86_64_BINARY_PREFIX)install.bak $(X86_64_INSTDIR) | 
|  |  | 
|  | x86_64-native-revert: | 
|  | rm -rf $(X86_64_NATIVE_INSTDIR) | 
|  | cp -r $(X86_64_NATIVE_BINARY_PREFIX)install.bak $(X86_64_NATIVE_INSTDIR) | 
|  |  | 
|  | %.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 | 
|  | patch --no-backup-if-mismatch -p0 < binutils-$(BINUTILS_VERSION)-riscv.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=no \ | 
|  | --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=no \ | 
|  | --with-pkgversion="akaros-repo" \ | 
|  | --disable-multilib \ | 
|  | --disable-nls \ | 
|  | --with-sysroot=$(SYSROOT) | 
|  |  | 
|  | .$(BINARY_PREFIX)binutils-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)binutils-builddir | 
|  | if [ "$(NATIVE_BUILD)" = "true" ]; 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-patch: | 
|  | -cd gcc-$(GCC_VERSION); \ | 
|  | diff -ruB --unidirectional-new-file \ | 
|  | ../gcc-$(GCC_VERSION) \ | 
|  | ../gcc-$(GCC_VERSION)-akaros \ | 
|  | | grep -v "Only in ../gcc-$(GCC_VERSION)" \ | 
|  | | patch -p2 | 
|  |  | 
|  | gcc-$(GCC_VERSION): gcc-$(GCC_VERSION).tar.bz2 | 
|  | rm -rf gcc-$(GCC_VERSION) | 
|  | tar -jxf gcc-$(GCC_VERSION).tar.bz2 | 
|  | $(MAKE) .gcc-akaros-patch | 
|  | patch --no-backup-if-mismatch -p0 < gcc-$(GCC_VERSION)-riscv.patch | 
|  |  | 
|  | $(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 \ | 
|  | $(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 \ | 
|  | --disable-multilib \ | 
|  | $(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; | 
|  |  | 
|  | #################################### | 
|  | ######### AKAROS Headers ########### | 
|  | #################################### | 
|  | .$(BINARY_PREFIX)akaros-headers-install: $(ROSDIR) | 
|  | rm -rf $(SYSROOT)/usr/include/* | 
|  | mkdir -p $(SYSROOT)/usr/include | 
|  | cp -r $(ROSDIR)/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/* \ | 
|  | $(SYSROOT)/usr/include/ros/arch/ | 
|  | cp -r $(ROSDIR)/user/parlib/include/* \ | 
|  | $(SYSROOT)/usr/include/ | 
|  | cp -r $(ROSDIR)/user/pthread/*.h \ | 
|  | $(SYSROOT)/usr/include/ | 
|  | rm -rf $(SYSROOT)/usr/include/arch | 
|  | ln -s $(ROS_ARCH_DIR) $(SYSROOT)/usr/include/arch | 
|  |  | 
|  | ################################# | 
|  | ###### Dummy Libs Install ####### | 
|  | ################################# | 
|  | .$(BINARY_PREFIX)dummy-libs-install: | 
|  | rm -rf $(SYSROOT)/usr/lib/libparlib.a | 
|  | rm -rf $(SYSROOT)/usr/lib/libgcc_eh.a | 
|  | mkdir -p $(SYSROOT)/usr/lib | 
|  | $(ARCH)-ucb-akaros-ar cr $(SYSROOT)/usr/lib/libparlib.a | 
|  | $(ARCH)-ucb-akaros-ar cr $(SYSROOT)/usr/lib/libgcc_eh.a | 
|  |  | 
|  | ################################# | 
|  | ######### Glibc Stage 1 ######### | 
|  | ################################# | 
|  | .glibc-akaros-patch: | 
|  | -cd glibc-$(GLIBC_VERSION); \ | 
|  | diff -ruB --unidirectional-new-file \ | 
|  | ../glibc-$(GLIBC_VERSION) \ | 
|  | ../glibc-$(GLIBC_VERSION)-akaros \ | 
|  | | grep -v "Only in ../glibc-$(GLIBC_VERSION)" \ | 
|  | | patch -p2 | 
|  |  | 
|  | # 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-patch | 
|  | patch --no-backup-if-mismatch -p0 < glibc-$(GLIBC_VERSION)-riscv.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 \ | 
|  | $(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 \ | 
|  | $(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 $(ROSDIR); \ | 
|  | make ARCH=$(ROS_ARCH_DIR) userclean; \ | 
|  | make ARCH=$(ROS_ARCH_DIR) -j $(MAKE_JOBS) install-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=$(CXXROOT) \ | 
|  | --with-mpfr=$(CXXROOT) \ | 
|  | --with-mpc=$(CXXROOT) \ | 
|  | --enable-languages=c,c++ \ | 
|  | --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=no \ | 
|  | --enable-tls \ | 
|  | --disable-nls \ | 
|  | --disable-multilib \ | 
|  | --enable-c99 \ | 
|  | --enable-long-long \ | 
|  | --enable-shared \ | 
|  | $(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++ \ | 
|  | --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=no \ | 
|  | --disable-nls \ | 
|  | --disable-multilib \ | 
|  | --with-local-prefix=$(SYSROOT) \ | 
|  | --enable-c99 \ | 
|  | --enable-long-long \ | 
|  | --enable-shared \ | 
|  | $(GCC_BUILD_FLAGS); | 
|  |  | 
|  | .$(BINARY_PREFIX)gcc-stage3-configure: | 
|  | $(MAKE) $(BINARY_PREFIX)gcc-stage3-builddir | 
|  | if [ "$(NATIVE_BUILD)" = "true" ]; 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 | 
|  |  | 
|  | ################################## | 
|  | ######## 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 | 
|  |  |