| # 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 |