blob: c91aabaa47878eb5a346292e9fc1d583dff74ca9 [file] [log] [blame]
# 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