toolchain: fix full toolchain crossbuild
authorArne Fitzenreiter <arne_f@ipfire.org>
Thu, 7 Jan 2016 16:41:43 +0000 (17:41 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Thu, 7 Jan 2016 16:41:43 +0000 (17:41 +0100)
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
lfs/cleanup-toolchain
lfs/gcc
lfs/glibc
make.sh
tools/make-functions

index 0b3252f..9036988 100644 (file)
@@ -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 cb42385..ea8ef60 100644 (file)
--- 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
index bbf58e8..56a3533 100644 (file)
--- 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 3817986..9574846 100755 (executable)
--- 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
index e297c50..7386750 100644 (file)
@@ -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"
                        ;;