From 9a51513af252ac3b828958d3d251928d5a5743cc Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 15 Jan 2015 17:27:59 +0000 Subject: build-essential: separate each chunk definition with a line feed Although we are not using this style in any other morphologies, it makes it easier to parse. --- strata/build-essential.morph | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/strata/build-essential.morph b/strata/build-essential.morph index b6f3ae6a..f11a2712 100644 --- a/strata/build-essential.morph +++ b/strata/build-essential.morph @@ -46,6 +46,7 @@ chunks: build-depends: [] build-mode: bootstrap prefix: /tools + - name: stage1-gcc morph: strata/build-essential/stage1-gcc.morph repo: upstream:gcc-tarball @@ -55,6 +56,7 @@ chunks: - stage1-binutils build-mode: bootstrap prefix: /tools + - name: stage2-linux-api-headers morph: strata/build-essential/stage2-linux-api-headers.morph repo: upstream:linux @@ -65,6 +67,7 @@ chunks: - stage1-gcc build-mode: bootstrap prefix: /tools + - name: stage2-glibc morph: strata/build-essential/stage2-glibc.morph repo: upstream:glibc @@ -76,6 +79,7 @@ chunks: - stage2-linux-api-headers build-mode: bootstrap prefix: /tools + - name: stage2-binutils morph: strata/build-essential/stage2-binutils.morph repo: upstream:binutils-redhat @@ -87,6 +91,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: stage2-gcc-fixed-headers morph: strata/build-essential/stage2-gcc-fixed-headers.morph repo: upstream:gcc-tarball @@ -98,6 +103,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: stage2-gcc morph: strata/build-essential/stage2-gcc.morph repo: upstream:gcc-tarball @@ -110,6 +116,7 @@ chunks: - stage2-gcc-fixed-headers build-mode: bootstrap prefix: /tools + - name: stage2-busybox morph: strata/build-essential/stage2-busybox.morph repo: upstream:busybox @@ -121,6 +128,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: stage2-fake-bash morph: strata/build-essential/stage2-fake-bash.morph repo: upstream:bash @@ -129,6 +137,7 @@ chunks: build-depends: [] build-mode: bootstrap prefix: /tools + - name: stage2-fhs-dirs morph: strata/build-essential/stage2-fhs-dirs.morph repo: baserock:baserock/fhs-dirs @@ -137,6 +146,7 @@ chunks: build-depends: [] build-mode: bootstrap prefix: /tools + - name: stage2-gawk morph: strata/build-essential/stage2-gawk.morph repo: upstream:gawk @@ -148,6 +158,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: stage2-make morph: strata/build-essential/stage2-make.morph repo: upstream:make @@ -159,6 +170,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: stage2-reset-specs morph: strata/build-essential/stage2-reset-specs.morph repo: upstream:glibc @@ -171,6 +183,7 @@ chunks: - stage2-glibc build-mode: bootstrap prefix: /tools + - name: fhs-dirs morph: strata/build-essential/fhs-dirs.morph repo: baserock:baserock/fhs-dirs @@ -186,6 +199,7 @@ chunks: - stage2-linux-api-headers - stage2-make - stage2-reset-specs + - name: linux-api-headers morph: strata/build-essential/linux-api-headers.morph repo: upstream:linux @@ -201,6 +215,7 @@ chunks: - stage2-linux-api-headers - stage2-make - stage2-reset-specs + - name: glibc morph: strata/build-essential/glibc.morph repo: upstream:glibc @@ -222,6 +237,7 @@ chunks: glibc-gconv: build-essential-runtime glibc-libs: build-essential-minimal glibc-nss: build-essential-runtime + - name: zlib morph: strata/build-essential/zlib.morph repo: upstream:zlib @@ -240,6 +256,7 @@ chunks: - glibc artifacts: zlib-libs: build-essential-minimal + - name: binutils morph: strata/build-essential/binutils.morph repo: upstream:binutils-redhat @@ -257,6 +274,7 @@ chunks: - stage2-reset-specs - glibc - zlib + - name: busybox morph: strata/build-essential/busybox.morph repo: upstream:busybox @@ -273,6 +291,7 @@ chunks: - stage2-make - stage2-reset-specs - glibc + - name: gawk morph: strata/build-essential/gawk.morph repo: upstream:gawk @@ -289,6 +308,7 @@ chunks: - stage2-make - stage2-reset-specs - glibc + - name: gcc morph: strata/build-essential/gcc.morph repo: upstream:gcc-tarball @@ -308,6 +328,7 @@ chunks: - zlib artifacts: gcc-libs: build-essential-minimal + - name: make morph: strata/build-essential/make.morph repo: upstream:make @@ -324,6 +345,7 @@ chunks: - stage2-make - stage2-reset-specs - glibc + - name: ccache morph: strata/build-essential/ccache.morph repo: upstream:ccache -- cgit v1.2.1 From e5ba32eda38f158169cc2d389184a2c6e2241f5c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Fri, 9 Jan 2015 15:18:30 +0000 Subject: Improve the readability and docs of gcc morphologies No functional changes here. It will ease the review of the following commmits. --- strata/build-essential/gcc.morph | 40 ++++++++++---------- strata/build-essential/stage1-gcc.morph | 55 +++++++++++++++++----------- strata/build-essential/stage2-gcc.morph | 65 ++++++++++++++++++--------------- 3 files changed, 89 insertions(+), 71 deletions(-) diff --git a/strata/build-essential/gcc.morph b/strata/build-essential/gcc.morph index 50e2918c..63d4ad4c 100644 --- a/strata/build-essential/gcc.morph +++ b/strata/build-essential/gcc.morph @@ -8,27 +8,29 @@ configure-commands: # 1. An attempt to stop anything going in $PREFIX/lib64 (which doesn't # fully work; we will need to hobble the multilib configuration in # config/i386/t-linux64 if we really want to kill /lib64). -# 2. Multilib does not make sense in Baserock. -# 3. Optimisation libraries which for now we do without. -# 4. Recommended by Linux From Scratch; required for C++ ABI +# 2. MPFR is built in the GCC tree, we need to locate it. +# 3. Avoid having more than one copy of ZLib in use on the system +# 4. Optimisation libraries which for now we do without. +# 5. Multilib does not make sense in Baserock. +# 6. Recommended by Linux From Scratch; required for C++ ABI # compatibility with other Linux distributions. -# 5. MPFR is built in the GCC tree, we need to locate it. -# 6. Avoid having more than one copy of ZLib in use on the system - | - cd o && \ - ../configure \ - $(../morph-arch-config) \ - --prefix="$PREFIX" \ - `# [1]` --libdir=$PREFIX/lib \ - --disable-nls \ - --enable-languages=c,c++,fortran \ - --enable-shared --enable-threads=posix \ - `# [2]` --disable-multilib \ - `# [3]` --disable-libgomp --without-cloog --without-ppl \ - `# [4]` --enable-__cxa_atexit \ - `# [5]` --with-mpfr-include="$(pwd)/../mpfr/src" \ - --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ - `# [6]` --with-system-zlib + cd o && ../configure \ + $(../morph-arch-config) \ + --prefix="$PREFIX" \ + `# [1]` --libdir=$PREFIX/lib \ + `# [2]` --with-mpfr-include="$(pwd)/../mpfr/src" \ + `# [2]` --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ + `# [3]` --with-system-zlib \ + `# [4]` --without-cloog \ + `# [4]` --without-ppl \ + --disable-nls \ + `# [5]` --disable-multilib \ + --disable-libgomp \ + `# [6]` --enable-__cxa_atexit \ + --enable-shared \ + --enable-threads=posix \ + --enable-languages=c,c++,fortran build-commands: - cd o && make diff --git a/strata/build-essential/stage1-gcc.morph b/strata/build-essential/stage1-gcc.morph index 0cb03568..0574749b 100644 --- a/strata/build-essential/stage1-gcc.morph +++ b/strata/build-essential/stage1-gcc.morph @@ -5,34 +5,45 @@ configure-commands: - mkdir o # Configure flag notes: -# 1. Standard flags. See gcc.morph. +# 1. See gcc.morph. # 2. Disable searching /usr/local/include for headers -# 3. The pass 1 compiler needs to find the libraries we build in pass 2. -# Include path must be set explicility, because it defaults to -# $SYSROOT/usr/include rather than $SYSROOT/include. -# FIXME: this flag is not present until GCC 4.6.3! +# 3. The pass 1 compiler needs to find the libraries we build in pass +# 2. Include path must be set explicility, because it defaults to +# $SYSROOT/usr/include rather than $SYSROOT/include. FIXME: this +# flag is not present until GCC 4.6.3! # 4. Disable stuff that doesn't work when building a cross compiler # without an existing libc, and generally try to keep this build as # simple as possible. - | - cd o && - ../configure \ - $(../morph-arch-config) \ - --build=$(sh ../config.guess) --host=$(sh ../config.guess) \ - --target=$TARGET_STAGE1 \ - --prefix="$PREFIX" \ - --disable-bootstrap --disable-nls \ - `# [1]` --libdir="$PREFIX/lib" --disable-multilib --disable-libgomp \ - --without-cloog --without-ppl \ - --with-mpfr-include="$(pwd)/../mpfr/src" \ - --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ - `# [2]` --with-local-prefix="$PREFIX" \ + cd o && ../configure \ + $(../morph-arch-config) \ + --build=$(sh ../config.guess) \ + --host=$(sh ../config.guess) \ + --target=$TARGET_STAGE1 \ + --prefix="$PREFIX" \ + `# [1]` --libdir="$PREFIX/lib" \ + --with-newlib \ + `# [2]` --with-local-prefix="$PREFIX" \ `# [3]` --with-native-system-header-dir="$PREFIX/include" \ - `# [4]` --enable-languages=c --disable-decimal-float \ - --disable-libmudflap --disable-libquadmath --disable-libssp \ - --disable-shared --disable-threads --disable-target-libiberty \ - --disable-target-zlib --without-headers --with-newlib \ - --with-system-zlib + --with-mpfr-include="$(pwd)/../mpfr/src" \ + --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ + --with-system-zlib \ + --without-headers \ + --without-cloog \ + --without-ppl \ + --disable-bootstrap \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + `# [4]` --disable-decimal-float \ + `# [4]` --disable-threads \ + `# [4]` --disable-libgomp \ + `# [4]` --disable-libmudflap \ + `# [4]` --disable-libquadmath \ + `# [4]` --disable-libssp \ + `# [4]` --disable-target-libiberty \ + `# [4]` --disable-target-zlib \ + --enable-languages=c build-commands: - cd o && make diff --git a/strata/build-essential/stage2-gcc.morph b/strata/build-essential/stage2-gcc.morph index bf6378c1..21666c72 100644 --- a/strata/build-essential/stage2-gcc.morph +++ b/strata/build-essential/stage2-gcc.morph @@ -4,42 +4,47 @@ kind: chunk configure-commands: - mkdir o -# In other projects we specify the sysroot location using CPPFLAGS. Here, -# that breaks because GCC compiles stuff for the *build* machine, too ... -# and this requires using the host's compiler, which cannot use the same -# set of CPPFLAGS as the target. If we specify the sysroot using CC instead -# then we don't interfere, because we are only specifying the *host* C -# compiler. +# In other projects we specify the sysroot location using CPPFLAGS. +# Here, that breaks because GCC compiles stuff for the *build* machine, +# too ... and this requires using the host's compiler, which cannot use +# the same set of CPPFLAGS as the target. If we specify the sysroot +# using CC instead then we don't interfere, because we are only +# specifying the *host* C compiler. # # Configure flag notes: -# 1. It's vital that this compiler targets the bootstrap machine -# (TARGET_STAGE1) so that the stage 1 GCC is used instead of the -# compiler of the build machine. -# 2. Disable searching /usr/local/include for headers -# 3. This flag causes the correct --sysroot flag to be passed when calling -# stage 1 GCC. -# 4. C++ is built in stage 3. -# 5. Standard flags. See gcc.morph. +# 1. It's vital that this compiler runs in the bootstrap machine, and +# targets the same machine (TARGET_STAGE1) so that the stage 1 GCC +# is used instead of the compiler of the build machine. +# 2. See gcc.morph. +# 3. Disable searching /usr/local/include for headers +# 4. This flag causes the correct --sysroot flag to be passed when +# calling stage 1 GCC. +# 5. C++ is built in stage 3. - | export STAGE2_SYSROOT="$(dirname $(pwd))" export CC="$TARGET_STAGE1-gcc --sysroot=$STAGE2_SYSROOT" export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" - cd o && ../configure \ - $(../morph-arch-config) \ - `# [1]` --build=$(sh ../config.guess) \ - --host=$TARGET_STAGE1 \ - --target=$TARGET_STAGE1 \ - --prefix="$PREFIX" \ - `# [2]` --with-local-prefix=$PREFIX \ - `# [3]` --with-build-sysroot="$STAGE2_SYSROOT" \ - --disable-bootstrap \ - --enable-clocale=gnu --enable-shared --enable-threads=posix \ - `# [4]` --enable-languages=c \ - `# [5]` --libdir=$PREFIX/lib \ - --disable-libgomp --disable-multilib --disable-nls \ - --without-cloog --without-ppl \ - --with-mpfr-include="$(pwd)/../mpfr/src" \ - --with-mpfr-lib="$(pwd)/mpfr/src/.libs" + cd o && ../configure \ + $(../morph-arch-config) \ + --build=$(sh ../config.guess) \ + `# [1]` --host=$TARGET_STAGE1 \ + `# [1]` --target=$TARGET_STAGE1 \ + --prefix="$PREFIX" \ + `# [2]` --libdir=$PREFIX/lib \ + `# [3]` --with-local-prefix=$PREFIX \ + `# [4]` --with-build-sysroot="$STAGE2_SYSROOT" \ + --with-mpfr-include="$(pwd)/../mpfr/src" \ + --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ + --without-cloog \ + --without-ppl \ + --disable-bootstrap \ + --disable-nls \ + --disable-multilib \ + --disable-libgomp \ + --enable-clocale=gnu \ + --enable-shared \ + --enable-threads=posix \ + `# [5]` --enable-languages=c build-commands: - | -- cgit v1.2.1 From 6e17a4af732251711411720c64dcbfc170541db0 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 8 Jan 2015 16:54:43 +0000 Subject: Update binutils to 2.25 --- strata/build-essential.morph | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/strata/build-essential.morph b/strata/build-essential.morph index f11a2712..b9650bd8 100644 --- a/strata/build-essential.morph +++ b/strata/build-essential.morph @@ -41,8 +41,8 @@ chunks: - name: stage1-binutils morph: strata/build-essential/stage1-binutils.morph repo: upstream:binutils-redhat - ref: 987eb543a034cddc4eeb103f08f566f24a5f964a - unpetrify-ref: baserock/build-essential + ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: [] build-mode: bootstrap prefix: /tools @@ -83,8 +83,8 @@ chunks: - name: stage2-binutils morph: strata/build-essential/stage2-binutils.morph repo: upstream:binutils-redhat - ref: 987eb543a034cddc4eeb103f08f566f24a5f964a - unpetrify-ref: baserock/build-essential + ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage1-binutils - stage1-gcc @@ -260,8 +260,8 @@ chunks: - name: binutils morph: strata/build-essential/binutils.morph repo: upstream:binutils-redhat - ref: 987eb543a034cddc4eeb103f08f566f24a5f964a - unpetrify-ref: baserock/build-essential + ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage2-binutils - stage2-busybox -- cgit v1.2.1 From d022ac34d44616e7c7479a0aa1e81287786f3299 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Fri, 23 Jan 2015 13:37:54 +0000 Subject: Move M4 from core to build-essential M4 is required to manipulate the assembly code in GMP. GMP is a math library required to build GCC. --- strata/build-essential.morph | 16 ++++++++++++++++ strata/build-essential/m4.morph | 5 +++++ strata/core.morph | 10 +--------- strata/core/m4.morph | 5 ----- 4 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 strata/build-essential/m4.morph delete mode 100644 strata/core/m4.morph diff --git a/strata/build-essential.morph b/strata/build-essential.morph index b9650bd8..02b2043a 100644 --- a/strata/build-essential.morph +++ b/strata/build-essential.morph @@ -309,6 +309,21 @@ chunks: - stage2-reset-specs - glibc +- name: m4 + morph: strata/build-essential/m4.morph + repo: upstream:m4 + ref: cfbd353f3a2dc517992bcdc747281a22feb0c4db + unpetrify-ref: baserock/build-essential + build-depends: + - stage2-binutils + - stage2-busybox + - stage2-glibc + - stage2-fhs-dirs + - stage2-gcc + - stage2-make + - stage2-reset-specs + - glibc + - name: gcc morph: strata/build-essential/gcc.morph repo: upstream:gcc-tarball @@ -326,6 +341,7 @@ chunks: - stage2-reset-specs - glibc - zlib + - m4 artifacts: gcc-libs: build-essential-minimal diff --git a/strata/build-essential/m4.morph b/strata/build-essential/m4.morph new file mode 100644 index 00000000..b76afbe4 --- /dev/null +++ b/strata/build-essential/m4.morph @@ -0,0 +1,5 @@ +name: m4 +kind: chunk +build-system: autotools +configure-commands: +- ./configure --prefix="$PREFIX" --disable-nls diff --git a/strata/core.morph b/strata/core.morph index f9db0399..87033546 100644 --- a/strata/core.morph +++ b/strata/core.morph @@ -28,12 +28,6 @@ chunks: ref: 3898e324f07c05404b63d71f0e519f352fb1e072 unpetrify-ref: baserock/build-essential build-depends: [] -- name: m4 - morph: strata/core/m4.morph - repo: upstream:m4 - ref: cfbd353f3a2dc517992bcdc747281a22feb0c4db - unpetrify-ref: baserock/build-essential - build-depends: [] - name: mini-utils morph: strata/core/mini-utils.morph repo: baserock:baserock/mini-utils @@ -72,7 +66,6 @@ chunks: ref: cffdb90be331111ce3fbe4a32320181ec2b92652 unpetrify-ref: baserock/build-essential build-depends: - - m4 - perl - name: automake morph: strata/core/automake.morph @@ -94,8 +87,7 @@ chunks: repo: upstream:flex ref: de10f98e8a2dc2a021796811490d0f30c3cd90bf unpetrify-ref: baserock/build-essential - build-depends: - - m4 + build-depends: [] - name: openssl-new morph: strata/core/openssl-new.morph repo: upstream:openssl-new diff --git a/strata/core/m4.morph b/strata/core/m4.morph deleted file mode 100644 index b76afbe4..00000000 --- a/strata/core/m4.morph +++ /dev/null @@ -1,5 +0,0 @@ -name: m4 -kind: chunk -build-system: autotools -configure-commands: -- ./configure --prefix="$PREFIX" --disable-nls -- cgit v1.2.1 From fe5e9e45bb56bccb6c6ad755b21074ce4df26a02 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 12 Jan 2015 15:13:53 +0000 Subject: 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. --- strata/bsp-x86_32-generic.morph | 4 +- strata/bsp-x86_64-generic.morph | 4 +- strata/bsp-x86_64-generic/syslinux.morph | 4 +- strata/bsp-x86_both-tools.morph | 4 +- strata/build-essential.morph | 29 ++++++++--- strata/build-essential/gcc.morph | 29 +++++------ strata/build-essential/stage1-binutils.morph | 18 ++++--- strata/build-essential/stage1-gcc.morph | 70 +++++++++++++++------------ strata/build-essential/stage2-binutils.morph | 11 ++--- strata/build-essential/stage2-busybox.morph | 4 +- strata/build-essential/stage2-gawk.morph | 2 +- strata/build-essential/stage2-gcc.morph | 19 ++++---- strata/build-essential/stage2-libstdc++.morph | 36 ++++++++++++++ strata/build-essential/stage2-make.morph | 2 +- strata/coreutils-common/coreutils.morph | 2 + strata/tools.morph | 1 + strata/tools/gdb.morph | 5 ++ 17 files changed, 153 insertions(+), 91 deletions(-) create mode 100644 strata/build-essential/stage2-libstdc++.morph create mode 100644 strata/tools/gdb.morph diff --git a/strata/bsp-x86_32-generic.morph b/strata/bsp-x86_32-generic.morph index 480bd702..80fc5521 100644 --- a/strata/bsp-x86_32-generic.morph +++ b/strata/bsp-x86_32-generic.morph @@ -20,7 +20,7 @@ chunks: - name: syslinux morph: strata/bsp-x86_32-generic/syslinux.morph repo: upstream:syslinux - ref: 2f6d21d2a560cb5581694fef42ee9a350d5f302f - unpetrify-ref: baserock/morph + ref: 2aab8555987b547b617cbb887e61083fece01541 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - nasm diff --git a/strata/bsp-x86_64-generic.morph b/strata/bsp-x86_64-generic.morph index a24a34c5..1181d70e 100644 --- a/strata/bsp-x86_64-generic.morph +++ b/strata/bsp-x86_64-generic.morph @@ -20,7 +20,7 @@ chunks: - name: syslinux morph: strata/bsp-x86_64-generic/syslinux.morph repo: upstream:syslinux - ref: 2f6d21d2a560cb5581694fef42ee9a350d5f302f - unpetrify-ref: baserock/morph + ref: 2aab8555987b547b617cbb887e61083fece01541 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - nasm diff --git a/strata/bsp-x86_64-generic/syslinux.morph b/strata/bsp-x86_64-generic/syslinux.morph index c0f15807..43356e36 100644 --- a/strata/bsp-x86_64-generic/syslinux.morph +++ b/strata/bsp-x86_64-generic/syslinux.morph @@ -2,7 +2,7 @@ name: syslinux kind: chunk build-commands: - make clean -- make -- make installer +- make NO_WERROR=1 +- make NO_WERROR=1 installer install-commands: - make INSTALLROOT="$DESTDIR" install diff --git a/strata/bsp-x86_both-tools.morph b/strata/bsp-x86_both-tools.morph index c1ba501c..f9fa4631 100644 --- a/strata/bsp-x86_both-tools.morph +++ b/strata/bsp-x86_both-tools.morph @@ -14,7 +14,7 @@ chunks: - name: syslinux morph: strata/bsp-x86_both-tools/syslinux.morph repo: upstream:syslinux - ref: 2f6d21d2a560cb5581694fef42ee9a350d5f302f - unpetrify-ref: baserock/morph + ref: baserock/tiagogomes/update-toolchain + unpetrify-ref: 2f6d21d2a560cb5581694fef42ee9a350d5f302f build-depends: - nasm diff --git a/strata/build-essential.morph b/strata/build-essential.morph index 02b2043a..59f2b532 100644 --- a/strata/build-essential.morph +++ b/strata/build-essential.morph @@ -50,8 +50,8 @@ chunks: - name: stage1-gcc morph: strata/build-essential/stage1-gcc.morph repo: upstream:gcc-tarball - ref: 999c918a7ad32ad436395666def22ab90b3447fe - unpetrify-ref: baserock/build-essential + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage1-binutils build-mode: bootstrap @@ -80,6 +80,18 @@ chunks: build-mode: bootstrap prefix: /tools +- name: stage2-libstdc++ + morph: strata/build-essential/stage2-libstdc++.morph + repo: upstream:gcc-tarball + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/tiagogomes/update-toolchain + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-glibc + build-mode: bootstrap + prefix: /tools + - name: stage2-binutils morph: strata/build-essential/stage2-binutils.morph repo: upstream:binutils-redhat @@ -95,8 +107,8 @@ chunks: - name: stage2-gcc-fixed-headers morph: strata/build-essential/stage2-gcc-fixed-headers.morph repo: upstream:gcc-tarball - ref: 999c918a7ad32ad436395666def22ab90b3447fe - unpetrify-ref: baserock/build-essential + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage1-binutils - stage1-gcc @@ -107,13 +119,14 @@ chunks: - name: stage2-gcc morph: strata/build-essential/stage2-gcc.morph repo: upstream:gcc-tarball - ref: 999c918a7ad32ad436395666def22ab90b3447fe - unpetrify-ref: baserock/build-essential + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage1-binutils - stage1-gcc - stage2-glibc - stage2-gcc-fixed-headers + - stage2-libstdc++ build-mode: bootstrap prefix: /tools @@ -327,8 +340,8 @@ chunks: - name: gcc morph: strata/build-essential/gcc.morph repo: upstream:gcc-tarball - ref: 5c08cea34d5562dc828b85c7c02519246823aaf0 - unpetrify-ref: baserock/build-essential-4.7 + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/tiagogomes/update-toolchain build-depends: - stage2-binutils - stage2-busybox diff --git a/strata/build-essential/gcc.morph b/strata/build-essential/gcc.morph index 63d4ad4c..3b4b5ece 100644 --- a/strata/build-essential/gcc.morph +++ b/strata/build-essential/gcc.morph @@ -8,32 +8,25 @@ configure-commands: # 1. An attempt to stop anything going in $PREFIX/lib64 (which doesn't # fully work; we will need to hobble the multilib configuration in # config/i386/t-linux64 if we really want to kill /lib64). -# 2. MPFR is built in the GCC tree, we need to locate it. -# 3. Avoid having more than one copy of ZLib in use on the system -# 4. Optimisation libraries which for now we do without. -# 5. Multilib does not make sense in Baserock. -# 6. Recommended by Linux From Scratch; required for C++ ABI -# compatibility with other Linux distributions. +# 2. Avoid having more than one copy of ZLib in use on the system +# 3. Multilib does not make sense in Baserock. - | cd o && ../configure \ $(../morph-arch-config) \ --prefix="$PREFIX" \ `# [1]` --libdir=$PREFIX/lib \ - `# [2]` --with-mpfr-include="$(pwd)/../mpfr/src" \ - `# [2]` --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ - `# [3]` --with-system-zlib \ - `# [4]` --without-cloog \ - `# [4]` --without-ppl \ - --disable-nls \ - `# [5]` --disable-multilib \ - --disable-libgomp \ - `# [6]` --enable-__cxa_atexit \ - --enable-shared \ - --enable-threads=posix \ + --disable-bootstrap \ + `# [2]` --with-system-zlib \ + `# [3]` --disable-multilib \ --enable-languages=c,c++,fortran build-commands: -- cd o && make +- | + case "$MORPH_ARCH" in + armv7*) sed -i "s/--host=none/--host=armv7a/" o/Makefile + sed -i "s/--target=none/--target=armv7a/" o/Makefile ;; + esac + cd o && make install-commands: - cd o && make DESTDIR="$DESTDIR" install 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" diff --git a/strata/build-essential/stage1-gcc.morph b/strata/build-essential/stage1-gcc.morph index 0574749b..1bf6dfb2 100644 --- a/strata/build-essential/stage1-gcc.morph +++ b/strata/build-essential/stage1-gcc.morph @@ -2,16 +2,24 @@ name: stage1-gcc kind: chunk configure-commands: +# Workaround from LFS due GCC not detecting stack protection correctly +- sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure + - mkdir o # Configure flag notes: # 1. See gcc.morph. -# 2. Disable searching /usr/local/include for headers -# 3. The pass 1 compiler needs to find the libraries we build in pass +# 2. Although we will be setting a sysroot at runtime, giving a +# temporary one at configuration time seems necessary so that +# `--with-native-system-header-dir` produces effect and +# /tools/include is in the include path for the newly built GCC. We +# set it by default to a non-existent directory to avoid GCC looking +# at the host dirs, in case we forget to give it at runtime. +# 3. Disable searching /usr/local/include for headers +# 4. The pass 1 compiler needs to find the libraries we build in pass # 2. Include path must be set explicility, because it defaults to -# $SYSROOT/usr/include rather than $SYSROOT/include. FIXME: this -# flag is not present until GCC 4.6.3! -# 4. Disable stuff that doesn't work when building a cross compiler +# $SYSROOT/usr/include rather than $SYSROOT/include. +# 5. Disable stuff that doesn't work when building a cross compiler # without an existing libc, and generally try to keep this build as # simple as possible. - | @@ -22,38 +30,40 @@ configure-commands: --target=$TARGET_STAGE1 \ --prefix="$PREFIX" \ `# [1]` --libdir="$PREFIX/lib" \ + `# [2]` --with-sysroot=/nonexistentdir \ --with-newlib \ - `# [2]` --with-local-prefix="$PREFIX" \ - `# [3]` --with-native-system-header-dir="$PREFIX/include" \ - --with-mpfr-include="$(pwd)/../mpfr/src" \ - --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ - --with-system-zlib \ + `# [3]` --with-local-prefix="$PREFIX" \ + `# [4]` --with-native-system-header-dir="$PREFIX/include" \ --without-headers \ - --without-cloog \ - --without-ppl \ - --disable-bootstrap \ --disable-nls \ --disable-shared \ --disable-multilib \ - `# [4]` --disable-decimal-float \ - `# [4]` --disable-threads \ - `# [4]` --disable-libgomp \ - `# [4]` --disable-libmudflap \ - `# [4]` --disable-libquadmath \ - `# [4]` --disable-libssp \ - `# [4]` --disable-target-libiberty \ - `# [4]` --disable-target-zlib \ - --enable-languages=c + `# [5]` --disable-decimal-float \ + `# [5]` --disable-threads \ + `# [5]` --disable-libatomic \ + `# [5]` --disable-libgomp \ + `# [5]` --disable-libitm \ + `# [5]` --disable-libquadmath \ + `# [5]` --disable-libsanitizer \ + `# [5]` --disable-libssp \ + `# [5]` --disable-libvtv \ + `# [5]` --disable-libcilkrts \ + `# [5]` --disable-libstdc++-v3 \ + --enable-languages=c,c++ build-commands: -- cd o && make +- | + # 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. + case "$MORPH_ARCH" in + armv7*) sed -i "s/--host=none/--host=armv7a/" o/Makefile + sed -i "s/--target=none/--target=armv7a/" o/Makefile ;; + esac + cd o && make install-commands: - cd o && make DESTDIR="$DESTDIR" install - -# The file libgcc_eh is required during eglibc's build, but is not created -# because we built GCC with --disable-shared. This is a workaround for -# eglibc's build system being slightly broken. -- | - libgcc_filename=$($DESTDIR$PREFIX/bin/$TARGET_STAGE1-gcc -print-libgcc-file-name) - ln -sv libgcc.a $(echo $libgcc_filename | sed 's/libgcc/&_eh/') diff --git a/strata/build-essential/stage2-binutils.morph b/strata/build-essential/stage2-binutils.morph index bc0b18ac..1c64fb29 100644 --- a/strata/build-essential/stage2-binutils.morph +++ b/strata/build-essential/stage2-binutils.morph @@ -5,20 +5,17 @@ build-system: autotools configure-commands: - | export STAGE2_SYSROOT="$(dirname $(pwd))" - export CPPFLAGS="--sysroot=$STAGE2_SYSROOT" export CXX=false - export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" + # binutils has its own embedded libtool, which is old and strips out + # `--sysroot`. Work around by modifying the compiler command to + # include the sysroot flag + export CC="$TARGET_STAGE1-gcc --sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls --disable-werror \ --build=$(sh config.guess) \ --host=$TARGET_STAGE1 \ --target=$TARGET_STAGE1 build-commands: -# Nested configure scripts require that we set CPPFLAGS here as well -# (I don't think we should have to .. . at least in GCC, I think -# TARGET_CPPFLAGS may be the answer) - | export STAGE2_SYSROOT="$(dirname $(pwd))" - export CPPFLAGS="--sysroot=$STAGE2_SYSROOT" - export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" make diff --git a/strata/build-essential/stage2-busybox.morph b/strata/build-essential/stage2-busybox.morph index dc23d09b..98e4bf33 100644 --- a/strata/build-essential/stage2-busybox.morph +++ b/strata/build-essential/stage2-busybox.morph @@ -57,7 +57,7 @@ build-commands: - | export STAGE2_SYSROOT="$(dirname $(pwd))" export CPPFLAGS="--sysroot=$STAGE2_SYSROOT" - export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" + export LDFLAGS="--sysroot=$STAGE2_SYSROOT" make HOSTCC="/usr/bin/gcc" CROSS_COMPILE=$TARGET_STAGE1- install-commands: @@ -66,7 +66,7 @@ install-commands: - | export STAGE2_SYSROOT="$(dirname $(pwd))" export CPPFLAGS="--sysroot=$STAGE2_SYSROOT" - export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" + export LDFLAGS="--sysroot=$STAGE2_SYSROOT" make CONFIG_PREFIX="$DESTDIR$PREFIX" \ HOSTCC="/usr/bin/gcc" CROSS_COMPILE=$TARGET_STAGE1- install && chmod 6755 "$DESTDIR$PREFIX"/bin/busybox diff --git a/strata/build-essential/stage2-gawk.morph b/strata/build-essential/stage2-gawk.morph index f644d72b..15c838b6 100644 --- a/strata/build-essential/stage2-gawk.morph +++ b/strata/build-essential/stage2-gawk.morph @@ -3,7 +3,7 @@ kind: chunk build-system: autotools configure-commands: - STAGE2_SYSROOT="$(dirname $(pwd))" CPPFLAGS="--sysroot=$STAGE2_SYSROOT" CXX=false - LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls + LDFLAGS="--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls --build=$(sh config.guess) --host=$TARGET_STAGE1 build-commands: - STAGE2_SYSROOT="$(dirname $(pwd))" make diff --git a/strata/build-essential/stage2-gcc.morph b/strata/build-essential/stage2-gcc.morph index 21666c72..d48e236f 100644 --- a/strata/build-essential/stage2-gcc.morph +++ b/strata/build-essential/stage2-gcc.morph @@ -19,11 +19,12 @@ configure-commands: # 3. Disable searching /usr/local/include for headers # 4. This flag causes the correct --sysroot flag to be passed when # calling stage 1 GCC. -# 5. C++ is built in stage 3. - | export STAGE2_SYSROOT="$(dirname $(pwd))" export CC="$TARGET_STAGE1-gcc --sysroot=$STAGE2_SYSROOT" - export LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" + export CXX="$TARGET_STAGE1-g++ --sysroot=$STAGE2_SYSROOT" + export AR="$TARGET_STAGE1-ar" + export RANLIB="$TARGET_STAGE1-ranlib" cd o && ../configure \ $(../morph-arch-config) \ --build=$(sh ../config.guess) \ @@ -33,21 +34,19 @@ configure-commands: `# [2]` --libdir=$PREFIX/lib \ `# [3]` --with-local-prefix=$PREFIX \ `# [4]` --with-build-sysroot="$STAGE2_SYSROOT" \ - --with-mpfr-include="$(pwd)/../mpfr/src" \ - --with-mpfr-lib="$(pwd)/mpfr/src/.libs" \ - --without-cloog \ - --without-ppl \ --disable-bootstrap \ --disable-nls \ --disable-multilib \ --disable-libgomp \ - --enable-clocale=gnu \ - --enable-shared \ - --enable-threads=posix \ - `# [5]` --enable-languages=c + --disable-libstdcxx-pch \ + --enable-languages=c,c++ build-commands: - | + case "$MORPH_ARCH" in + armv7*) sed -i "s/--host=none/--host=armv7a/" o/Makefile + sed -i "s/--target=none/--target=armv7a/" o/Makefile ;; + esac export STAGE2_SYSROOT="$(dirname $(pwd))" cd o && make diff --git a/strata/build-essential/stage2-libstdc++.morph b/strata/build-essential/stage2-libstdc++.morph new file mode 100644 index 00000000..3d89ad85 --- /dev/null +++ b/strata/build-essential/stage2-libstdc++.morph @@ -0,0 +1,36 @@ +name: stage2-libstdc++ +kind: chunk +configure-commands: +- mkdir o + +# Configure flag notes: +# 1. The thread C++ library cannot be built, as the thread C library +# was not build in stage1-gcc. +# 2. Prevents the installation of precompiled include files, which are +# not needed at this stage. +# 3. From LFS: the header location of C++ needs to be explicitly given +# as we are running the configure script from the top-level +# directory. +- | + export STAGE2_SYSROOT="$(dirname $(pwd))" + # -fPIC must be given, otherwise it will not be possible to create + # shared libraries linked to libstdc++ + export CPPFLAGS="--sysroot=$STAGE2_SYSROOT -fPIC" + export LDFLAGS="--sysroot=$STAGE2_SYSROOT" + cd o && ../libstdc++-v3/configure \ + --build=$(sh ../config.guess) \ + --host="$TARGET_STAGE1" \ + --target="$TARGET_STAGE1" \ + --prefix="$PREFIX" \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + `# [1]` --disable-libstdcxx-threads \ + `# [2]` --disable-libstdcxx-pch \ + `# [3]` --with-gxx-include-dir=/tools/"$TARGET_STAGE1"/include/c++/4.9.2 + +build-commands: +- cd o && make + +install-commands: +- cd o && make DESTDIR="$DESTDIR" install diff --git a/strata/build-essential/stage2-make.morph b/strata/build-essential/stage2-make.morph index d3c8bf22..0b05581c 100644 --- a/strata/build-essential/stage2-make.morph +++ b/strata/build-essential/stage2-make.morph @@ -3,7 +3,7 @@ kind: chunk build-system: autotools configure-commands: - STAGE2_SYSROOT="$(dirname $(pwd))" CPPFLAGS="--sysroot=$STAGE2_SYSROOT" CXX=false - LDFLAGS="-Wl,--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls + LDFLAGS="--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls --build=$(sh config/config.guess) --host=$TARGET_STAGE1 build-commands: - STAGE2_SYSROOT="$(dirname $(pwd))" make diff --git a/strata/coreutils-common/coreutils.morph b/strata/coreutils-common/coreutils.morph index 479e9925..08808333 100644 --- a/strata/coreutils-common/coreutils.morph +++ b/strata/coreutils-common/coreutils.morph @@ -5,5 +5,7 @@ configure-commands: - sed -i -e '/^buildreq="/,/^"/{/rsync/d}' bootstrap.conf - bash bootstrap --skip-po - FORCE_UNSAFE_CONFIGURE=1 ./configure --prefix="$PREFIX" --disable-nls +build-commands: +- make WERROR_CFLAGS= install-commands: - make INSTALL_PROGRAM=install DESTDIR="$DESTDIR" install diff --git a/strata/tools.morph b/strata/tools.morph index 20bc1d27..d43ad549 100644 --- a/strata/tools.morph +++ b/strata/tools.morph @@ -22,6 +22,7 @@ chunks: unpetrify-ref: baserock/morph build-depends: [] - name: gdb + morph: strata/tools/gdb.morph repo: upstream:gdb ref: c4bf5268b1a32ec475b61d2fe90e9218780c03c8 unpetrify-ref: baserock/morph diff --git a/strata/tools/gdb.morph b/strata/tools/gdb.morph new file mode 100644 index 00000000..8b82b9d9 --- /dev/null +++ b/strata/tools/gdb.morph @@ -0,0 +1,5 @@ +name: gdb +kind: chunk +build-system: autotools +configure-commands: +- ./configure --prefix="$PREFIX" --disable-werror -- cgit v1.2.1 From 941c6a9653c784962aab1579ff066d7a274e8d84 Mon Sep 17 00:00:00 2001 From: Paul Sherwood Date: Thu, 15 Jan 2015 20:58:32 +0000 Subject: Embed morph-arch and morph-arch-config This will make it easier to advance refs later. --- strata/build-essential/gcc.morph | 11 ++++++++++- strata/build-essential/linux-api-headers.morph | 16 +++++++++++++++- strata/build-essential/stage1-gcc.morph | 11 ++++++++++- strata/build-essential/stage2-gcc.morph | 10 +++++++++- strata/build-essential/stage2-linux-api-headers.morph | 16 ++++++++++++++-- 5 files changed, 58 insertions(+), 6 deletions(-) diff --git a/strata/build-essential/gcc.morph b/strata/build-essential/gcc.morph index 3b4b5ece..02be4dda 100644 --- a/strata/build-essential/gcc.morph +++ b/strata/build-essential/gcc.morph @@ -11,8 +11,17 @@ configure-commands: # 2. Avoid having more than one copy of ZLib in use on the system # 3. Multilib does not make sense in Baserock. - | + case "$MORPH_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 + cd o && ../configure \ - $(../morph-arch-config) \ + $ARCH_FLAGS \ --prefix="$PREFIX" \ `# [1]` --libdir=$PREFIX/lib \ --disable-bootstrap \ diff --git a/strata/build-essential/linux-api-headers.morph b/strata/build-essential/linux-api-headers.morph index e1ff2638..0f7ce171 100644 --- a/strata/build-essential/linux-api-headers.morph +++ b/strata/build-essential/linux-api-headers.morph @@ -1,6 +1,20 @@ name: linux-api-headers kind: chunk install-commands: -- ARCH=$(./morph-arch) make INSTALL_HDR_PATH=dest headers_install +- | + case "$MORPH_ARCH" in + armv7b|armv7l|armv7lhf) + ARCH="arm" ;; + x86_32) + ARCH="i386" ;; + x86_64) + ARCH="x86_64" ;; + ppc64) + ARCH="powerpc" ;; + *) + echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2 + exit 1 + esac + ARCH=$ARCH make INSTALL_HDR_PATH=dest headers_install - install -d "$DESTDIR${PREFIX-/usr}/include" - cp -r dest/include/* "$DESTDIR/${PREFIX-/usr}/include" diff --git a/strata/build-essential/stage1-gcc.morph b/strata/build-essential/stage1-gcc.morph index 1bf6dfb2..ed85b684 100644 --- a/strata/build-essential/stage1-gcc.morph +++ b/strata/build-essential/stage1-gcc.morph @@ -23,8 +23,17 @@ configure-commands: # without an existing libc, and generally try to keep this build as # simple as possible. - | + case "$MORPH_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 + cd o && ../configure \ - $(../morph-arch-config) \ + $ARCH_FLAGS \ --build=$(sh ../config.guess) \ --host=$(sh ../config.guess) \ --target=$TARGET_STAGE1 \ diff --git a/strata/build-essential/stage2-gcc.morph b/strata/build-essential/stage2-gcc.morph index d48e236f..98f9cfe7 100644 --- a/strata/build-essential/stage2-gcc.morph +++ b/strata/build-essential/stage2-gcc.morph @@ -20,13 +20,21 @@ configure-commands: # 4. This flag causes the correct --sysroot flag to be passed when # calling stage 1 GCC. - | + case "$MORPH_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 $(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 \ - $(../morph-arch-config) \ + $ARCH_FLAGS \ --build=$(sh ../config.guess) \ `# [1]` --host=$TARGET_STAGE1 \ `# [1]` --target=$TARGET_STAGE1 \ diff --git a/strata/build-essential/stage2-linux-api-headers.morph b/strata/build-essential/stage2-linux-api-headers.morph index 5cbf2f05..50e1aaa5 100644 --- a/strata/build-essential/stage2-linux-api-headers.morph +++ b/strata/build-essential/stage2-linux-api-headers.morph @@ -2,7 +2,19 @@ name: stage2-linux-api-headers kind: chunk install-commands: - | - export ARCH=$(./morph-arch) - make INSTALL_HDR_PATH=dest headers_install + case "$MORPH_ARCH" in + armv7b|armv7l|armv7lhf) + ARCH="arm" ;; + x86_32) + ARCH="i386" ;; + x86_64) + ARCH="x86_64" ;; + ppc64) + ARCH="powerpc" ;; + *) + echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2 + exit 1 + esac + ARCH=$ARCH make INSTALL_HDR_PATH=dest headers_install - install -d "$DESTDIR${PREFIX-/usr}/include" - cp -r dest/include/* "$DESTDIR/${PREFIX-/usr}/include" -- cgit v1.2.1