From 764a3f1ff2384f34c592c311f5435a24eb6a53c8 Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Thu, 7 Jan 2016 17:41:43 +0100 Subject: [PATCH] toolchain: fix full toolchain crossbuild Signed-off-by: Arne Fitzenreiter --- lfs/cleanup-toolchain | 1 - lfs/gcc | 63 ++++++++++++++++++++++++++++++++++++++----- lfs/glibc | 3 ++- make.sh | 1 + tools/make-functions | 6 ++--- 5 files changed, 63 insertions(+), 11 deletions(-) diff --git a/lfs/cleanup-toolchain b/lfs/cleanup-toolchain index 0b3252f9f4..90369889d9 100644 --- a/lfs/cleanup-toolchain +++ b/lfs/cleanup-toolchain @@ -54,7 +54,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) ifeq "$(PASS)" "1" SPECS=$$(dirname $$(/tools/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name))/specs; \ /tools/bin/$(CROSSTARGET)-gcc -dumpspecs | sed \ - -e 's@/lib\(64\)\?/ld@/tools&@g' \ -e "/^\*cpp:$$/{n;s,$$, -isystem /tools/include,}" > $$SPECS endif diff --git a/lfs/gcc b/lfs/gcc index cb423855cd..ea8ef60f04 100644 --- a/lfs/gcc +++ b/lfs/gcc @@ -63,25 +63,34 @@ ifeq "$(PASS)" "1" EXTRA_CONFIG = \ --target=$(CROSSTARGET) \ --prefix=/tools \ + --with-sysroot=$(ROOT) \ --disable-nls \ --disable-shared \ --disable-decimal-float \ --disable-threads \ + --disable-libatomic \ --disable-libmudflap \ --disable-libssp \ --disable-libgomp \ --disable-libquadmath \ + --disable-libstdc++-v3 \ + --disable-libvtv \ + --disable-libcilkrts \ + --disable-libitm \ + --disable-libsanitizer \ --with-newlib \ --without-headers \ --without-ppl \ --without-cloog \ - --enable-languages=c + --enable-languages=c,c++ EXTRA_MAKE = EXTRA_INSTALL = else +ifeq "$(PASS)" "2" TARGET = $(DIR_INFO)/$(THISAPP)-tools2 EXTRA_ENV = \ CC="$(CROSSTARGET)-gcc -B/tools/lib/" \ + CXX="$(CROSSTARGET)-g++" \ AR="$(CROSSTARGET)-ar" \ RANLIB="$(CROSSTARGET)-ranlib" EXTRA_CONFIG = \ @@ -90,6 +99,7 @@ else --target=$(BUILDTARGET) \ --prefix=/tools \ --with-local-prefix=/tools \ + --with-native-system-header-dir=/tools/include \ --enable-clocale=gnu \ --enable-shared \ --enable-threads=posix \ @@ -99,6 +109,25 @@ else --disable-bootstrap EXTRA_MAKE = EXTRA_INSTALL = +else + # PASS=L # libstdc++-v3 + TARGET = $(DIR_INFO)/$(THISAPP)-libstdc++ + EXTRA_ENV = \ + CC="$(CROSSTARGET)-gcc -B/tools/lib/" \ + AR="$(CROSSTARGET)-ar" \ + RANLIB="$(CROSSTARGET)-ranlib" + EXTRA_CONFIG = \ + --host=$(CROSSTARGET) \ + --prefix=/tools \ + --with-sysroot=$(ROOT) \ + --disable-shared \ + --disable-nls \ + --disable-libstdcxx-threads \ + --disable-libstdcxx-pch \ + --with-gxx-include-dir=/tools/$(CROSSTARGET)/include/c++/$(VER) + EXTRA_MAKE = + EXTRA_INSTALL = +endif endif # Disable stack protection in toolchain. @@ -200,20 +229,32 @@ ifeq "$(PASS)" "1" # GCC does not detect stack protection correctly, which causes problems # for the build of libresolv_pic.a. cd $(DIR_APP) && sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure + + for file in $$(find $(DIR_APP)/gcc/config -name linux64.h -o -name linux.h \ + -o -name sysv4.h -o -name linux-eabi.h -o -name linux-elf.h); do \ + echo "Processing $${file}..."; \ + sed -i $${file} \ + -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ + -e 's@/usr@/tools@g'; \ + echo '#undef STANDARD_STARTFILE_PREFIX_1' >> $${file}; \ + echo '#undef STANDARD_STARTFILE_PREFIX_2' >> $${file}; \ + echo '#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"' >> $${file}; \ + echo '#define STANDARD_STARTFILE_PREFIX_2 ""' >> $${file}; \ + done endif ifeq "$(PASS)" "2" - cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/gcc-4.4.3-startfiles_fix-1.patch - + cd $(DIR_APP) && cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ + `dirname $$(/tools/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name)`/include-fixed/limits.h for file in $$(find $(DIR_APP)/gcc/config -name linux64.h -o -name linux.h \ -o -name sysv4.h -o -name linux-eabi.h -o -name linux-elf.h); do \ echo "Processing $${file}..."; \ sed -i $${file} \ -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ -e 's@/usr@/tools@g'; \ - echo '#undef STANDARD_INCLUDE_DIR' >> $${file}; \ - echo '#define STANDARD_INCLUDE_DIR 0' >> $${file}; \ - echo '#define STANDARD_STARTFILE_PREFIX_1 ""' >> $${file}; \ + echo '#undef STANDARD_STARTFILE_PREFIX_1' >> $${file}; \ + echo '#undef STANDARD_STARTFILE_PREFIX_2' >> $${file}; \ + echo '#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"' >> $${file}; \ echo '#define STANDARD_STARTFILE_PREFIX_2 ""' >> $${file}; \ done endif @@ -224,6 +265,15 @@ endif -e 's@\./fixinc\.sh@-c true@' \ -e 's/^T_CFLAGS =$$/& -fomit-frame-pointer/' +ifeq "$(PASS)" "L" + # libstdc++ pass + cd $(DIR_SRC)/gcc-build && \ + $(EXTRA_ENV) \ + $(DIR_APP)/libstdc++-v3/configure \ + $(EXTRA_CONFIG) + cd $(DIR_SRC)/gcc-build && make $(MAKETUNING) $(EXTRA_MAKE) + cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install +else # The actual build. cd $(DIR_SRC)/gcc-build && \ $(EXTRA_ENV) \ @@ -231,6 +281,7 @@ endif $(EXTRA_CONFIG) cd $(DIR_SRC)/gcc-build && make $(MAKETUNING) $(EXTRA_MAKE) cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install +endif ifeq "$(ROOT)" "" ln -svf ../usr/bin/cpp /lib diff --git a/lfs/glibc b/lfs/glibc index bbf58e8097..56a3533391 100644 --- a/lfs/glibc +++ b/lfs/glibc @@ -51,7 +51,8 @@ else --with-headers=/tools/include \ libc_cv_forced_unwind=yes \ libc_cv_ctors_header=yes \ - libc_cv_c_cleanup=yes + libc_cv_c_cleanup=yes \ + CC=/tools/bin/$(CROSSTARGET)-gcc EXTRA_MAKE = EXTRA_INSTALL = endif diff --git a/make.sh b/make.sh index 3817986698..95748468e3 100755 --- a/make.sh +++ b/make.sh @@ -287,6 +287,7 @@ buildtoolchain() { lfsmake1 linux TOOLS=1 KCFG="-headers" lfsmake1 glibc lfsmake1 cleanup-toolchain PASS=1 + lfsmake1 gcc PASS=L lfsmake1 binutils PASS=2 lfsmake1 gcc PASS=2 lfsmake1 ccache PASS=2 diff --git a/tools/make-functions b/tools/make-functions index e297c50cef..7386750272 100644 --- a/tools/make-functions +++ b/tools/make-functions @@ -70,19 +70,19 @@ configure_target() { case "${target_arch}" in x86_64) BUILDTARGET="${target_arch}-unknown-linux-gnu" - CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu" + CROSSTARGET="${target_arch}-cross-linux-gnu" CFLAGS_ARCH="-m64 -mtune=generic" ;; i586) BUILDTARGET="${target_arch}-pc-linux-gnu" - CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu" + CROSSTARGET="${target_arch}-cross-linux-gnu" CFLAGS_ARCH="-march=i586 -mtune=generic -fomit-frame-pointer" ;; armv5tel) BUILDTARGET="${target_arch}-unknown-linux-gnueabi" - CROSSTARGET="${BUILD_ARCH}-cross-linux-gnueabi" + CROSSTARGET="${target_arch}-cross-linux-gnueabi" CFLAGS_ARCH="-march=armv5te -mfloat-abi=soft -fomit-frame-pointer" MACHINE_TYPE="arm" ;; -- 2.39.2