summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Gomes <tiago.gomes@codethink.co.uk>2015-01-26 16:22:47 +0000
committerTiago Gomes <tiago.gomes@codethink.co.uk>2015-01-26 16:22:47 +0000
commit40cff71921b8e20e6fdefd41560e89067ba21483 (patch)
treee27a743c39a22b9ef0e76824c4a2c008d25c33d1
parenteaf31937a6c16adac30e5c8ba71d457336b5df0d (diff)
parent941c6a9653c784962aab1579ff066d7a274e8d84 (diff)
downloaddefinitions-40cff71921b8e20e6fdefd41560e89067ba21483.tar.gz
Merge branch 'baserock/tiagogomes/update-toolchain-v2'
Reviewed by: * Sam Thursfield * Paul Sherwood * Josh Malkinson
-rw-r--r--strata/bsp-x86_32-generic.morph4
-rw-r--r--strata/bsp-x86_64-generic.morph4
-rw-r--r--strata/bsp-x86_64-generic/syslinux.morph4
-rw-r--r--strata/bsp-x86_both-tools.morph4
-rw-r--r--strata/build-essential.morph79
-rw-r--r--strata/build-essential/gcc.morph46
-rw-r--r--strata/build-essential/linux-api-headers.morph16
-rw-r--r--strata/build-essential/m4.morph (renamed from strata/core/m4.morph)0
-rw-r--r--strata/build-essential/stage1-binutils.morph18
-rw-r--r--strata/build-essential/stage1-gcc.morph94
-rw-r--r--strata/build-essential/stage2-binutils.morph11
-rw-r--r--strata/build-essential/stage2-busybox.morph4
-rw-r--r--strata/build-essential/stage2-gawk.morph2
-rw-r--r--strata/build-essential/stage2-gcc.morph74
-rw-r--r--strata/build-essential/stage2-libstdc++.morph36
-rw-r--r--strata/build-essential/stage2-linux-api-headers.morph16
-rw-r--r--strata/build-essential/stage2-make.morph2
-rw-r--r--strata/core.morph10
-rw-r--r--strata/coreutils-common/coreutils.morph2
-rw-r--r--strata/tools.morph1
-rw-r--r--strata/tools/gdb.morph5
21 files changed, 297 insertions, 135 deletions
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 b6f3ae6a..59f2b532 100644
--- a/strata/build-essential.morph
+++ b/strata/build-essential.morph
@@ -41,20 +41,22 @@ 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
+
- 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
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,40 +79,57 @@ chunks:
- stage2-linux-api-headers
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
- ref: 987eb543a034cddc4eeb103f08f566f24a5f964a
- unpetrify-ref: baserock/build-essential
+ ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8
+ unpetrify-ref: baserock/tiagogomes/update-toolchain
build-depends:
- stage1-binutils
- stage1-gcc
- 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
- ref: 999c918a7ad32ad436395666def22ab90b3447fe
- unpetrify-ref: baserock/build-essential
+ ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ unpetrify-ref: baserock/tiagogomes/update-toolchain
build-depends:
- stage1-binutils
- stage1-gcc
- stage2-glibc
build-mode: bootstrap
prefix: /tools
+
- 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
+
- name: stage2-busybox
morph: strata/build-essential/stage2-busybox.morph
repo: upstream:busybox
@@ -121,6 +141,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 +150,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 +159,7 @@ chunks:
build-depends: []
build-mode: bootstrap
prefix: /tools
+
- name: stage2-gawk
morph: strata/build-essential/stage2-gawk.morph
repo: upstream:gawk
@@ -148,6 +171,7 @@ chunks:
- stage2-glibc
build-mode: bootstrap
prefix: /tools
+
- name: stage2-make
morph: strata/build-essential/stage2-make.morph
repo: upstream:make
@@ -159,6 +183,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 +196,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 +212,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 +228,7 @@ chunks:
- stage2-linux-api-headers
- stage2-make
- stage2-reset-specs
+
- name: glibc
morph: strata/build-essential/glibc.morph
repo: upstream:glibc
@@ -222,6 +250,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,11 +269,12 @@ chunks:
- glibc
artifacts:
zlib-libs: build-essential-minimal
+
- 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
@@ -257,6 +287,7 @@ chunks:
- stage2-reset-specs
- glibc
- zlib
+
- name: busybox
morph: strata/build-essential/busybox.morph
repo: upstream:busybox
@@ -273,6 +304,7 @@ chunks:
- stage2-make
- stage2-reset-specs
- glibc
+
- name: gawk
morph: strata/build-essential/gawk.morph
repo: upstream:gawk
@@ -289,11 +321,27 @@ chunks:
- stage2-make
- 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
- ref: 5c08cea34d5562dc828b85c7c02519246823aaf0
- unpetrify-ref: baserock/build-essential-4.7
+ ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ unpetrify-ref: baserock/tiagogomes/update-toolchain
build-depends:
- stage2-binutils
- stage2-busybox
@@ -306,8 +354,10 @@ chunks:
- stage2-reset-specs
- glibc
- zlib
+ - m4
artifacts:
gcc-libs: build-essential-minimal
+
- name: make
morph: strata/build-essential/make.morph
repo: upstream:make
@@ -324,6 +374,7 @@ chunks:
- stage2-make
- stage2-reset-specs
- glibc
+
- name: ccache
morph: strata/build-essential/ccache.morph
repo: upstream:ccache
diff --git a/strata/build-essential/gcc.morph b/strata/build-essential/gcc.morph
index 50e2918c..02be4dda 100644
--- a/strata/build-essential/gcc.morph
+++ b/strata/build-essential/gcc.morph
@@ -8,30 +8,34 @@ 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
-# 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
+# 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 \
- --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
+ 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 \
+ $ARCH_FLAGS \
+ --prefix="$PREFIX" \
+ `# [1]` --libdir=$PREFIX/lib \
+ --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/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/core/m4.morph b/strata/build-essential/m4.morph
index b76afbe4..b76afbe4 100644
--- a/strata/core/m4.morph
+++ b/strata/build-essential/m4.morph
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 0cb03568..ed85b684 100644
--- a/strata/build-essential/stage1-gcc.morph
+++ b/strata/build-essential/stage1-gcc.morph
@@ -2,47 +2,77 @@ 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. Standard flags. 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
+# 1. See gcc.morph.
+# 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
+# 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.
- |
- 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" \
- `# [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
+ 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 \
+ $ARCH_FLAGS \
+ --build=$(sh ../config.guess) \
+ --host=$(sh ../config.guess) \
+ --target=$TARGET_STAGE1 \
+ --prefix="$PREFIX" \
+ `# [1]` --libdir="$PREFIX/lib" \
+ `# [2]` --with-sysroot=/nonexistentdir \
+ --with-newlib \
+ `# [3]` --with-local-prefix="$PREFIX" \
+ `# [4]` --with-native-system-header-dir="$PREFIX/include" \
+ --without-headers \
+ --disable-nls \
+ --disable-shared \
+ --disable-multilib \
+ `# [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 bf6378c1..98f9cfe7 100644
--- a/strata/build-essential/stage2-gcc.morph
+++ b/strata/build-essential/stage2-gcc.morph
@@ -4,45 +4,57 @@ 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.
- |
+ 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 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"
+ export CXX="$TARGET_STAGE1-g++ --sysroot=$STAGE2_SYSROOT"
+ export AR="$TARGET_STAGE1-ar"
+ export RANLIB="$TARGET_STAGE1-ranlib"
+ cd o && ../configure \
+ $ARCH_FLAGS \
+ --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" \
+ --disable-bootstrap \
+ --disable-nls \
+ --disable-multilib \
+ --disable-libgomp \
+ --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-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"
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/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/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 0c4771dc..fea33132 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