diff options
author | Tiago Gomes <tiago.gomes@codethink.co.uk> | 2015-01-12 15:13:53 +0000 |
---|---|---|
committer | Tiago Gomes <tiago.gomes@codethink.co.uk> | 2015-01-23 15:19:29 +0000 |
commit | fe5e9e45bb56bccb6c6ad755b21074ce4df26a02 (patch) | |
tree | 487090b1a60e693affaab57fe0e3eea53909481e /strata/build-essential/stage1-binutils.morph | |
parent | d022ac34d44616e7c7479a0aa1e81287786f3299 (diff) | |
download | definitions-fe5e9e45bb56bccb6c6ad755b21074ce4df26a02.tar.gz |
Update GCC to 4.9.2
Update the GCC compiler to the 4.9.2 version. It turns out that a C++
compiler is required to build the latest GCC releases, so build one in
stages 1 and 2 as well.
The updated list of GCC configuration options that either don't work in
a cross compiler or are not needed in a temporary compiler, were based
on the latest instructions from Linux From Scratch.
The inclusion of /lib64 in the lib path for the stage 1 linker is an
attempt to turn things more robust rather than to just symlink in /lib
stuff that ends up installed in /lib64 (as it is already being done for
libgcc_s.so). Ideally, we should configure every chunk to install to
/lib, however GCC seems to not honour the `--with-libdir` configuration
flag.
With this version of GCC, it looks like a sysroot needs to be given at
configure time so that `--with-native-system-header-dir` does what it
claims to do. Unfortunately, this has the side effect of making GCC not
passing to the linker the linker sysroot flag: `-Wl,--sysroot=$SYSROOT`.
The workaround is to modify LDFLAGS to give a sysroot directly to GCC,
`--sysroot=$SYSROOT`, which will then be further passed down to the
linker.
As the newest version of GCC finds more warnings than the previous one,
`-Werror` was disabled for the coreutils, GDB and Syslinux projects.
Syslinux's Makefile had to be patched, as it is not possible to disable
`-Werror` for all targets through the NO_WERROR variable.
The hack to handle libgcc_eh being required during eglibc's build was
removed, as it doesn't seem to be the case anymore.
Diffstat (limited to 'strata/build-essential/stage1-binutils.morph')
-rw-r--r-- | strata/build-essential/stage1-binutils.morph | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/strata/build-essential/stage1-binutils.morph b/strata/build-essential/stage1-binutils.morph index b6670d5c..69a79d14 100644 --- a/strata/build-essential/stage1-binutils.morph +++ b/strata/build-essential/stage1-binutils.morph @@ -3,15 +3,21 @@ kind: chunk build-system: autotools configure-commands: -# We set the sysroot location dynamically at runtime by passing -B to GCC, -# so we configure with sysroot=/. Setting the lib path is vital to avoid -# the tools we build linking to the libraries on the host system; the '=' -# makes the path we give relative to the sysroot, which we can then set -# at runtime by passing -Wl,--sysroot to GCC. +# We set the sysroot location dynamically at runtime by passing +# `--sysroot` to GCC, so we need to build a linker with sysroot support. +# We set it to a non-existent directory as a safety net to avoid looking +# at the host dirs in case we forget to set the sysroot. Setting the +# lib path is vital to avoid the tools we build linking to the libraries +# on the host system; the '=' makes the path we give relative to the +# sysroot, which we can then set at runtime by passing -Wl,--sysroot to +# GCC. Although nothing should be installed on /lib64, we configure the +# linker to look at that directory as well to make things more robust +# (currently GCC installs libraries to this directory at least on +# x86_64). - | ./configure --prefix="$PREFIX" --disable-nls --disable-werror \ --build=$(sh config.guess) \ --host=$(sh config.guess) \ --target=$TARGET_STAGE1 \ - --with-sysroot="/" --with-lib-path="=$PREFIX/lib" + --with-sysroot=/nonexistentdir --with-lib-path="=$PREFIX/lib:=$PREFIX/lib64" |