summaryrefslogtreecommitdiff
path: root/elements/gnu-toolchain/stage2-gcc.bst
diff options
context:
space:
mode:
Diffstat (limited to 'elements/gnu-toolchain/stage2-gcc.bst')
-rw-r--r--elements/gnu-toolchain/stage2-gcc.bst74
1 files changed, 45 insertions, 29 deletions
diff --git a/elements/gnu-toolchain/stage2-gcc.bst b/elements/gnu-toolchain/stage2-gcc.bst
index 25dbc65d..a7c879e3 100644
--- a/elements/gnu-toolchain/stage2-gcc.bst
+++ b/elements/gnu-toolchain/stage2-gcc.bst
@@ -1,5 +1,8 @@
kind: manual
+description:
+ Simple native compiler which is used to build all of stage 3.
+
sources:
- kind: git
url: upstream:gcc-tarball
@@ -16,6 +19,27 @@ depends:
variables:
prefix: /tools
+ gcc-arch-flags: ''
+ gcc-libdir: lib
+
+ (?):
+ # ARM platforms vary a lot even within a single architecture revision,
+ # and require tweaks such as this to produce a useful compiler.
+ # This is a default configuration that has worked for some targets.
+ - arch in ["armv7b", "armv7l"]:
+ gcc-arch-flags: --with-arch=armv7-a
+ - arch in ["armv7blhf", "armv7lhf"]:
+ gcc-arch-flags: >
+ --with-arch=armv7-a
+ --with-cpu=cortex-a9
+ --with-tune=cortex-a9
+ --with-fpu=vfpv3-d16
+ --with-float=hard
+
+ # GCC is hardwired to support 32-bit and 64-bit in parallel on these
+ # platforms, so 64-bit libraries end up in `lib64` rather than `lib`.
+ - arch in ["armv8b64", "armv8l64", "x86_64"]:
+ gcc-libdir: lib64
environment:
PATH: /tools/bin:/usr/bin:/bin:/usr/sbin:/sbin
@@ -40,21 +64,12 @@ config:
# 4. This flag causes the correct --sysroot flag to be passed when
# calling stage 1 GCC.
- |
- case "%{bst-target-arch}" in
- armv7lhf) ARCH_FLAGS="--with-arch=armv7-a \
- --with-cpu=cortex-a9 \
- --with-tune=cortex-a9 \
- --with-fpu=vfpv3-d16 \
- --with-float=hard" ;;
- armv7*) ARCH_FLAGS="--with-arch=armv7-a" ;;
- esac
export STAGE2_SYSROOT="$(dirname $(dirname $(pwd)))"
export CC="%{target-stage1}-gcc --sysroot=$STAGE2_SYSROOT"
export CXX="%{target-stage1}-g++ --sysroot=$STAGE2_SYSROOT"
export AR="%{target-stage1}-ar"
export RANLIB="%{target-stage1}-ranlib"
- cd o && ../configure \
- $ARCH_FLAGS \
+ cd o && ../configure %{gcc-arch-flags} \
--build=$(sh ../config.guess) \
`# [1]` --host=%{target-stage1} \
`# [1]` --target=%{target-stage1} \
@@ -71,12 +86,6 @@ config:
build-commands:
- |
- case "%{bst-target-arch}" in
- armv5*) sed -i "s/--host=none/--host=armv5/" o/Makefile
- sed -i "s/--target=none/--target=armv5/" o/Makefile ;;
- armv7*) sed -i "s/--host=none/--host=armv7a/" o/Makefile
- sed -i "s/--target=none/--target=armv7a/" o/Makefile ;;
- esac
export STAGE2_SYSROOT="$(dirname $(dirname $(pwd)))"
cd o && make
@@ -85,22 +94,29 @@ config:
# Stage 3 builds need to link against this file in the location that
# it will be in the final system, so we make a temporary link now.
- #
- # On x86_64 GCC resolutely installs its libraries into lib64. To fix this
- # would require hobbling the MULTILIB_OSDIRNAMES field in
- # gcc/config/i386/t-linux64 and this might break things, so for now we
- # tolerate the inconsistency.
- |
- case "$(echo %{target} | cut -c -6)" in
- x86_64) libdir=lib64;;
- armv8*64) libdir=lib64;;
- *) libdir=lib
- esac
-
install -d "%{install-root}/usr/lib"
- ln -s "%{prefix}/$libdir/libgcc_s.so" "%{install-root}/usr/lib/"
- ln -s "%{prefix}/$libdir/libgcc_s.so.1" "%{install-root}/usr/lib/"
+ ln -s "%{prefix}/%{gcc-libdir}/libgcc_s.so" "%{install-root}/usr/lib/"
+ ln -s "%{prefix}/%{gcc-libdir}/libgcc_s.so.1" "%{install-root}/usr/lib/"
strip-commands:
- |
%{stage2-strip-binaries}
+
+ (?):
+ # GCC is not passing the correct host/target flags to GMP's configure
+ # script, which causes it to not use the machine-dependent code for
+ # the platform and use the generic one instead. However, the generic
+ # code results on an undefined reference to `__gmpn_invert_limb' in
+ # ARMv7. Fix the invocation of GMP's configure script so that GMP can
+ # use the machine-dependent code.
+ - arch.startswith("armv5"):
+ build-commands:
+ (<):
+ - sed -i "s/--host=none/--host=armv5/" o/Makefile
+ - sed -i "s/--target=none/--target=armv5/" o/Makefile
+ - arch.startswith("armv7"):
+ build-commands:
+ (<):
+ - sed -i "s/--host=none/--host=armv7a/" o/Makefile
+ - sed -i "s/--target=none/--target=armv7a/" o/Makefile