summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Dale <richard.dale@codethink.co.uk>2015-06-19 11:56:27 +0100
committerRichard Dale <richard.dale@codethink.co.uk>2015-06-19 11:56:27 +0100
commitac9b2a68f3488baa24d9c3f6d91d403fc3ec09ab (patch)
tree1ddfbdcd254c82a86d773e843af86201ba73b52a
parenta5a754c117db06a87af3eebbf9cf848ed0f8b5c9 (diff)
downloaddefinitions-ac9b2a68f3488baa24d9c3f6d91d403fc3ec09ab.tar.gz
Use the musl build-essential morphs
-rw-r--r--strata/build-essential.morph464
-rw-r--r--strata/build-essential/binutils.morph4
-rw-r--r--strata/build-essential/busybox.morph99
-rw-r--r--strata/build-essential/fhs-dirs.morph3
-rw-r--r--strata/build-essential/gcc.morph32
-rw-r--r--strata/build-essential/glibc.morph10
-rw-r--r--strata/build-essential/linux-api-headers.morph8
-rw-r--r--strata/build-essential/m4-tarball.morph2
-rw-r--r--strata/build-essential/musl.morph28
-rw-r--r--strata/build-essential/stage1-binutils.morph5
-rw-r--r--strata/build-essential/stage1-gcc.morph10
-rw-r--r--strata/build-essential/stage2-binutils.morph7
-rw-r--r--strata/build-essential/stage2-busybox.morph37
-rw-r--r--strata/build-essential/stage2-fhs-dirs.morph1
-rw-r--r--strata/build-essential/stage2-gawk.morph10
-rw-r--r--strata/build-essential/stage2-gcc-fixed-headers.morph8
-rw-r--r--strata/build-essential/stage2-gcc.morph23
-rw-r--r--strata/build-essential/stage2-glibc.morph37
-rw-r--r--strata/build-essential/stage2-libstdc++.morph14
-rw-r--r--strata/build-essential/stage2-linux-api-headers.morph6
-rw-r--r--strata/build-essential/stage2-make.morph10
-rw-r--r--strata/build-essential/stage2-musl.morph54
-rw-r--r--strata/build-essential/stage2-reset-specs.morph1
23 files changed, 535 insertions, 338 deletions
diff --git a/strata/build-essential.morph b/strata/build-essential.morph
index 0c0aebbc..1b1bebac 100644
--- a/strata/build-essential.morph
+++ b/strata/build-essential.morph
@@ -31,381 +31,349 @@ description: |
stage2-fhs-dirs.morph for details. Basically, /bin is a symlink to
/tools/bin during stage 2 but in stage 3 it becomes a real directory
again.
-
- PLEASE KEEP THE REFS IN 'armv7lhf-cross-toolchain' STRATUM UP TO DATE WITH
- THIS ONE!
-
- Please note that the chunk 'build-depends' field is treated differently in
- this stratum to how other strata in definitions.git use it. Other strata
- rely on the fact that dependencies of a dependency (called 'transitive
- dependencies') are implicitly included in the staging area. Within
- build-essential, some chunks list transitive dependencies explicitly to
- make clearer what is going on.
-products:
-- artifact: build-essential-minimal
- include:
- - fhs-dirs-.*
- - busybox-.*
- - glibc-nss
chunks:
-- name: stage1-binutils
+- name: stage1-binutils-musl
morph: strata/build-essential/stage1-binutils.morph
repo: upstream:binutils-redhat
ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8
unpetrify-ref: baserock/build-essential
+ build-depends: []
build-mode: bootstrap
prefix: /tools
-- name: stage1-gcc
+- name: stage1-gcc-musl
morph: strata/build-essential/stage1-gcc.morph
repo: upstream:gcc-tarball
- ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a
unpetrify-ref: baserock/build-essential
build-depends:
- - stage1-binutils
+ - stage1-binutils-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-linux-api-headers
+- name: stage2-linux-api-headers-musl
morph: strata/build-essential/stage2-linux-api-headers.morph
repo: upstream:linux
- ref: 39a8804455fb23f09157341d3ba7db6d7ae6ee76
- unpetrify-ref: v4.0
+ ref: 6d90449f594534084a7847c0b9f0216b0f9056b1
+ unpetrify-ref: baserock/v3.12-musl
build-depends:
- - stage1-binutils
- - stage1-gcc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-glibc
- morph: strata/build-essential/stage2-glibc.morph
- repo: upstream:glibc
- ref: 4e42b5b8f89f0e288e68be7ad70f9525aebc2cff
- unpetrify-ref: glibc-2.21
+- name: stage2-musl
+ morph: strata/build-essential/stage2-musl.morph
+ repo: upstream:musl
+ ref: c7ac6a91178945b79dbbce5ed09e55062e67f7db
+ unpetrify-ref: baserock/1.1.6
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-linux-api-headers-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-libstdc++
+- name: stage2-libstdc++-musl
morph: strata/build-essential/stage2-libstdc++.morph
repo: upstream:gcc-tarball
- ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a
unpetrify-ref: baserock/build-essential
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-binutils
+- name: stage2-binutils-musl
morph: strata/build-essential/stage2-binutils.morph
repo: upstream:binutils-redhat
ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8
unpetrify-ref: baserock/build-essential
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-gcc-fixed-headers
+- name: stage2-gcc-fixed-headers-musl
morph: strata/build-essential/stage2-gcc-fixed-headers.morph
repo: upstream:gcc-tarball
- ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a
unpetrify-ref: baserock/build-essential
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-gcc
+- name: stage2-gcc-musl
morph: strata/build-essential/stage2-gcc.morph
repo: upstream:gcc-tarball
- ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a
unpetrify-ref: baserock/build-essential
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
- - stage2-gcc-fixed-headers
- - stage2-libstdc++
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
+ - stage2-gcc-fixed-headers-musl
+ - stage2-libstdc++-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-busybox
+- name: stage2-busybox-musl
morph: strata/build-essential/stage2-busybox.morph
repo: upstream:busybox
- ref: 91b0c141c6b1ef78d94e567296c968e0dac2d395
- unpetrify-ref: baserock/1.23.2-openwrt
+ ref: 1ecfe811fe2f70380170ef7d820e8150054e88ca
+ unpetrify-ref: 1_23_1
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-fake-bash
+- name: stage2-fake-bash-musl
morph: strata/build-essential/stage2-fake-bash.morph
repo: upstream:bash
ref: 3590145af6f1c9fa321dff231f69ae696e7e740b
unpetrify-ref: baserock/bash-4.3-patch-27
+ build-depends: []
build-mode: bootstrap
prefix: /tools
-- name: stage2-fhs-dirs
+- name: stage2-fhs-dirs-musl
morph: strata/build-essential/stage2-fhs-dirs.morph
repo: baserock:baserock/fhs-dirs
- ref: 1218cbd38a4f4e9da75af6f7fae946ca92666afb
+ ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4
unpetrify-ref: master
+ build-depends: []
build-mode: bootstrap
prefix: /tools
-- name: stage2-gawk
+- name: stage2-gawk-musl
morph: strata/build-essential/stage2-gawk.morph
repo: upstream:gawk
- ref: 925f9363c4b0a5bb9375298afcdcf404efb32587
- unpetrify-ref: gawk-4.1-stable
+ ref: 1da41261fba4cd03a32362d44c8634f599ae64db
+ unpetrify-ref: master
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-make
+- name: stage2-make-musl
morph: strata/build-essential/stage2-make.morph
repo: upstream:make-tarball
- ref: f75919b038da8a28388a911303fb86ed7a70ea2c
- unpetrify-ref: make-4.1
+ ref: f75919b038da8a28388a911303fb86ed7a70ea2c
+ unpetrify-ref: make-4.1
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: stage2-reset-specs
+- name: stage2-reset-specs-musl
morph: strata/build-essential/stage2-reset-specs.morph
- repo: upstream:glibc
- ref: 4e42b5b8f89f0e288e68be7ad70f9525aebc2cff
- unpetrify-ref: glibc-2.21
+ repo: upstream:musl
+ ref: 12cc52b5f2ca421786dc7ac227a0d41a8c8ed0c2
+ unpetrify-ref: baserock/1.1.6
build-depends:
- - stage1-binutils
- - stage1-gcc
- - stage2-linux-api-headers
- - stage2-glibc
+ - stage1-binutils-musl
+ - stage1-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-musl
build-mode: bootstrap
prefix: /tools
-- name: fhs-dirs
+- name: fhs-dirs-musl
morph: strata/build-essential/fhs-dirs.morph
repo: baserock:baserock/fhs-dirs
- ref: 1218cbd38a4f4e9da75af6f7fae946ca92666afb
+ ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4
unpetrify-ref: master
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
-
-- name: linux-api-headers
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+
+- name: linux-api-headers-musl
morph: strata/build-essential/linux-api-headers.morph
repo: upstream:linux
- ref: 39a8804455fb23f09157341d3ba7db6d7ae6ee76
- unpetrify-ref: v4.0
+ ref: 6d90449f594534084a7847c0b9f0216b0f9056b1
+ unpetrify-ref: baserock/v3.12-musl
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
-
-- name: glibc
- morph: strata/build-essential/glibc.morph
- repo: upstream:glibc
- ref: 4e42b5b8f89f0e288e68be7ad70f9525aebc2cff
- unpetrify-ref: glibc-2.21
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+
+- name: musl
+ morph: strata/build-essential/musl.morph
+ repo: upstream:musl
+ ref: c7ac6a91178945b79dbbce5ed09e55062e67f7db
+ unpetrify-ref: baserock/1.1.6
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-fake-bash
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - linux-api-headers
- artifacts:
- glibc-gconv: build-essential-runtime
- glibc-libs: build-essential-minimal
- glibc-nss: build-essential-runtime
-
-- name: zlib
- morph: strata/build-essential/zlib.morph
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-fake-bash-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - linux-api-headers-musl
+
+- name: zlib-musl
repo: upstream:zlib
ref: db333af7e9b90a23fd7f9cd8dc128123b34bf698
unpetrify-ref: baserock/build-essential
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
- artifacts:
- zlib-libs: build-essential-minimal
-
-- name: binutils
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+
+- name: binutils-musl
morph: strata/build-essential/binutils.morph
repo: upstream:binutils-redhat
ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8
unpetrify-ref: baserock/build-essential
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
- - zlib
-
-- name: busybox
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+ - zlib-musl
+
+- name: busybox-musl
morph: strata/build-essential/busybox.morph
repo: upstream:busybox
- ref: 91b0c141c6b1ef78d94e567296c968e0dac2d395
- unpetrify-ref: baserock/1.23.2-openwrt
+ ref: 1ecfe811fe2f70380170ef7d820e8150054e88ca
+ unpetrify-ref: 1_23_1
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
-
-- name: gawk
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+
+- name: gawk-musl
morph: strata/build-essential/gawk.morph
repo: upstream:gawk
- ref: dc5af665700d9b04fdf9c18930526d28eef5d5d9
- unpetrify-ref: gawk-4.1.1
+ ref: 1da41261fba4cd03a32362d44c8634f599ae64db
+ unpetrify-ref: master
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
-
-- name: m4-tarball
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+
+- name: m4-tarball-musl
morph: strata/build-essential/m4-tarball.morph
repo: upstream:m4-tarball
ref: 23c11479b3ad787adc7a651ee0c4347839e47723
unpetrify-ref: m4-1.4.17
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
-
-- name: gcc
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gcc-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+
+- name: gcc-musl
morph: strata/build-essential/gcc.morph
repo: upstream:gcc-tarball
- ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06
+ ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a
unpetrify-ref: baserock/build-essential
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
- - zlib
- - m4-tarball
- - linux-api-headers
- artifacts:
- gcc-libs: build-essential-minimal
-
-- name: make
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+ - zlib-musl
+ - m4-tarball-musl
+
+- name: make-musl
morph: strata/build-essential/make.morph
repo: upstream:make-tarball
- ref: f75919b038da8a28388a911303fb86ed7a70ea2c
- unpetrify-ref: make-4.1
+ ref: f75919b038da8a28388a911303fb86ed7a70ea2c
+ unpetrify-ref: make-4.1
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
-
-- name: ccache
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+
+- name: ccache-musl
morph: strata/build-essential/ccache.morph
repo: upstream:ccache
ref: 567631456f0899cdf0c382f898d38aadc8901d32
unpetrify-ref: baserock/build-essential
build-depends:
- - stage2-binutils
- - stage2-busybox
- - stage2-glibc
- - stage2-fhs-dirs
- - stage2-gawk
- - stage2-gcc
- - stage2-linux-api-headers
- - stage2-make
- - stage2-reset-specs
- - glibc
- - zlib
+ - stage2-binutils-musl
+ - stage2-busybox-musl
+ - stage2-musl
+ - stage2-fhs-dirs-musl
+ - stage2-gawk-musl
+ - stage2-gcc-musl
+ - stage2-linux-api-headers-musl
+ - stage2-make-musl
+ - stage2-reset-specs-musl
+ - musl
+ - zlib-musl
diff --git a/strata/build-essential/binutils.morph b/strata/build-essential/binutils.morph
index bab52672..069d59ef 100644
--- a/strata/build-essential/binutils.morph
+++ b/strata/build-essential/binutils.morph
@@ -4,5 +4,9 @@ build-system: autotools
configure-commands:
- |
+ case "$MORPH_ARCH" in
+ mips64*) ARCH_FLAGS="--with-arch=octeon2" ;;
+ esac
./configure --prefix="$PREFIX" --disable-nls --disable-werror \
+ $ARCH_FLAGS \
--with-system-zlib
diff --git a/strata/build-essential/busybox.morph b/strata/build-essential/busybox.morph
index 6fd21fa0..0232d965 100644
--- a/strata/build-essential/busybox.morph
+++ b/strata/build-essential/busybox.morph
@@ -2,11 +2,25 @@ name: busybox
kind: chunk
configure-commands:
+# Busybox's default config has everything enabled.
- make defconfig
+- sed -e 's|.*UDHCPC_DEFAULT_SCRIPT.*|CONFIG_UDHCPC_DEFAULT_SCRIPT="'"$PREFIX"/share/udhcpc/default.script'"|' -i .config
+- sed -e 's|.*IFUPDOWN_IFSTATE_PATH.*|CONFIG_IFUPDOWN_IFSTATE_PATH="/run/ifstate"|' -i .config
+
# Avoid dividing applets between $PREFIX/[s]bin and $PREFIX/usr/[s]bin.
- '[ "$PREFIX" = /usr ] || sed -e ''s/.*INSTALL_NO_USR.*/CONFIG_INSTALL_NO_USR=y/'' -i .config'
+# We have GAWK, but in GENIVI baseline we want to get rid of it
+# - sed -e 's/CONFIG_AWK=y.*/# CONFIG_AWK is not set/' -i .config
+
+# Depends on stuff that was removed since eglibc 2.14.
+- sed -e 's/CONFIG_INETD=y.*/# CONFIG_INETD is not set/' -i .config
+
+# Busybox Patch is incompatible enough with GNU Patch that it can't be
+# used for GNULib projects built from Git.
+- sed -e 's/CONFIG_PATCH=y.*/# CONFIG_PATCH is not set/' -i .config
+
# None of this is needed because we have kmod; and it actually breaks the
# Linux build because depmod isn't compatible enough with util-linux's.
- sed -e 's/CONFIG_DEPMOD=y.*/# CONFIG_DEPMOD is not set/' -i .config
@@ -16,15 +30,94 @@ configure-commands:
- sed -e 's/CONFIG_LSMOD=y.*/# CONFIG_LSMOD is not set/' -i .config
- sed -e 's/CONFIG_RMMOD=y.*/# CONFIG_RMMOD is not set/' -i .config
+# General features that we don't need.
+- sed -e 's/CONFIG_FEATURE_MOUNT_CIFS=y.*/# CONFIG_FEATURE_MOUNT_CIFS is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_EXTRA_COMPAT=y.*/# CONFIG_FEATURE_EXTRA_COMPAT is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_EXTRA_QUIET=y.*/# CONFIG_FEATURE_EXTRA_QUIET is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INIT_COREDUMPS=y.*/# CONFIG_FEATURE_INIT_COREDUMPS is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INIT_SCTTY=y.*/# CONFIG_FEATURE_INIT_SCTTY is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INIT_SYSLOG=y.*/# CONFIG_FEATURE_INIT_SYSLOG is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INITRD=y.*/# CONFIG_FEATURE_INITRD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ROUTE=y.*/# CONFIG_FEATURE_IP_ROUTE is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_USE_INITTAB=y.*/# CONFIG_FEATURE_USE_INITTAB is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_MINIX2=y.*/# CONFIG_FEATURE_MINIX2 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFCONFIG_SLIP=y.*/# CONFIG_FEATURE_IFCONFIG_SLIP is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INETD_RPC=y.*/# CONFIG_FEATURE_INETD_RPC is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_SELINUX=y.*/# CONFIG_FEATURE_SELINUX is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_SYSTEMD=y.*/# CONFIG_FEATURE_SYSTEMD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_HAVE_RPC=y.*/# CONFIG_FEATURE_HAVE_RPC is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_VI_REGEX_SEARCH=y.*/# CONFIG_FEATURE_VI_REGEX_SEARCH is not set/' -i .config
+- sed -e 's/CONFIG_IFPLUGD=y.*/# CONFIG_IFPLUGD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_LINK=y.*/# CONFIG_FEATURE_IP_LINK is not set/' -i .config
+- sed -e 's/CONFIG_FSCK_MINIX=y.*/# CONFIG_FSCK_MINIX is not set/' -i .config
+- sed -e 's/CONFIG_HALT=y.*/# CONFIG_HALT is not set/' -i .config
+- sed -e 's/CONFIG_IFCONFIG=y.*/# CONFIG_IFCONFIG is not set/' -i .config
+- sed -e 's/CONFIG_IPLINK=y.*/# CONFIG_IPLINK is not set/' -i .config
+- sed -e 's/CONFIG_IPROUTE=y.*/# CONFIG_IPROUTE is not set/' -i .config
+- sed -e 's/CONFIG_INIT_TERMINAL_TYPE=y.*/CONFIG_INIT_TERMINAL_TYPE=""/' -i .config
+- sed -e 's/CONFIG_LOSETUP=y.*/# CONFIG_LOSETUP is not set/' -i .config
+- sed -e 's/CONFIG_LSUSB=y.*/# CONFIG_LSUSB is not set/' -i .config
+- sed -e 's/CONFIG_LSPCI=y.*/# CONFIG_LSPCI is not set/' -i .config
+- sed -e 's/CONFIG_LZMA=y.*/# CONFIG_LZMA is not set/' -i .config
+- sed -e 's/CONFIG_MKFS_EXT2=y.*/# CONFIG_MKFS_EXT2 is not set/' -i .config
+- sed -e 's/CONFIG_MOUNT_NFS=y.*/# CONFIG_MOUNT_NFS is not set/' -i .config
+- sed -e 's/CONFIG_MKFS_MINIX=y.*/# CONFIG_MKFS_MINIX is not set/' -i .config
+- sed -e 's/CONFIG_PAM=y.*/# CONFIG_PAM is not set/' -i .config
+- sed -e 's/CONFIG_RUNLEVEL=y.*/# CONFIG_RUNLEVEL is not set/' -i .config
+- sed -e 's/CONFIG_SELINUXENABLED=y.*/# CONFIG_SELINUXENABLED is not set/' -i .config
+- sed -e 's/CONFIG_STRINGS=y.*/# CONFIG_STRINGS is not set/' -i .config
+- sed -e 's/CONFIG_UNLZMA=y.*/# CONFIG_UNLZMA is not set/' -i .config
+- sed -e 's/CONFIG_UNXZ=y.*/# CONFIG_UNXZ is not set/' -i .config
+- sed -e 's/CONFIG_XZ=y.*/# CONFIG_XZ is not set/' -i .config
+- sed -e 's/CONFIG_WERROR=y.*/# CONFIG_WERROR is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y.*/# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IPV4=y.*/# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IPV6=y.*/# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_MAPPING=y.*/# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set/' -i .config
+- sed -e 's/CONFIG_IP=y.*/# CONFIG_IP is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ADDRESS=y.*/# CONFIG_FEATURE_IP_ADDRESS is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_LINK=y.*/# CONFIG_FEATURE_IP_LINK is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ROUTE=y.*/# CONFIG_FEATURE_IP_ROUTE is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_TUNNEL=y.*/# CONFIG_FEATURE_IP_TUNNEL is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_RULE=y.*/# CONFIG_FEATURE_IP_RULE is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_SHORT_FORMS=y.*/# CONFIG_FEATURE_IP_SHORT_FORMS is not set/' -i .config
+- sed -e 's/CONFIG_IPADDR=y.*/# CONFIG_IPADDR is not set/' -i .config
+- sed -e 's/CONFIG_IPLINK=y.*/# CONFIG_IPLINK is not set/' -i .config
+- sed -e 's/CONFIG_IPROUTE=y.*/# CONFIG_IPROUTE is not set/' -i .config
+- sed -e 's/CONFIG_IPTUNNEL=y.*/# CONFIG_IPTUNNEL is not set/' -i .config
+- sed -e 's/CONFIG_IPRULE=y.*/# CONFIG_IPRULE is not set/' -i .config
+
# Now turn on some little bits we do need
-- sed -e 's/# CONFIG_LOCK is not set/CONFIG_LOCK=y/' -i .config
-- sed -e 's/# CONFIG_NETMSG is not set/CONFIG_NETMSG=y/' -i .config
+- sed -e 's/# CONFIG_BBCONFIG is not set/CONFIG_BBCONFIG=y/' -i .config
+- sed -e 's/# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set/CONFIG_FEATURE_COMPRESS_BBCONFIG=y/' -i .config
+- sed -e 's/# CONFIG_FEATURE_MOUNT_HELPERS is not set/CONFIG_FEATURE_MOUNT_HELPERS=y/' -i .config
+
build-commands:
-- make busybox
+- make
install-commands:
- |
if [ "$PREFIX" = /usr ]; then PREFIX=; fi &&
make CONFIG_PREFIX="$DESTDIR$PREFIX" install &&
chmod 6755 "$DESTDIR$PREFIX"/bin/busybox
+
+# Set up man environment variables
+- mkdir -p "$DESTDIR"/etc
+- |
+ cat << EOF > "$DESTDIR/etc/profile"
+ # Set default pager to less
+ export MANPAGER='less -R'
+ EOF
+- |
+ cat << EOF > "$DESTDIR/etc/man.conf"
+ # This file is used by man to provide a manpath for those without one by
+ # examining their PATH environment variable.
+ #
+ # Lines beginning with `#' are comments and are ignored. Any combination of
+ # tabs or spaces may be used as `whitespace' separators.
+
+ MANDATORY_MANPATH /usr/man
+ MANDATORY_MANPATH /usr/share/man
+ MANDATORY_MANPATH /usr/local/share/man
+ EOF
diff --git a/strata/build-essential/fhs-dirs.morph b/strata/build-essential/fhs-dirs.morph
index 4a44fdad..64474872 100644
--- a/strata/build-essential/fhs-dirs.morph
+++ b/strata/build-essential/fhs-dirs.morph
@@ -7,6 +7,7 @@ install-commands:
- install -m 600 shadow "$DESTDIR/etc/shadow"
- install -m 644 interfaces "$DESTDIR/etc/network/interfaces"
- install -m 644 group "$DESTDIR/etc/group"
+- install -m 644 ld.so.conf "$DESTDIR/etc/ld.so.conf"
- install -m 644 issue "$DESTDIR/etc/issue"
- install -m 644 services "$DESTDIR/etc/services"
- install -m 644 protocols "$DESTDIR/etc/protocols"
@@ -47,5 +48,3 @@ devices:
minor: 5
permissions: '0666'
uid: 0
-post-install-commands:
-- rm -rf "$DESTDIR"/var
diff --git a/strata/build-essential/gcc.morph b/strata/build-essential/gcc.morph
index a9d25ac1..7d036f35 100644
--- a/strata/build-essential/gcc.morph
+++ b/strata/build-essential/gcc.morph
@@ -1,21 +1,11 @@
name: gcc
kind: chunk
-products:
-- artifact: gcc-libs
- include:
- - (usr/)lib/lib.*\.so(\.\d+)*$
-- artifact: gcc-doc
- include:
- - (usr/)?share/doc/.*
- - (usr/)?share/man/.*
- - (usr/)?share/info/.*
-- artifact: gcc-devel
- # devel includes everything which isn't documentation or libs, since
- # everything else gcc produces is required for compiling
- # this is the -devel artifact instead of -misc, since it goes in -devel
- # stratum artifacts by default
- include: [ .* ]
+pre-configure-commands:
+- |
+ case "$MORPH_ARCH" in
+ mips64*) sed -i "s/^\(\#define\s\+MIPS_ABI_DEFAULT\s\+\)ABI_32/\1ABI_64/" gcc/config/mips/mips.h ;;
+ esac
configure-commands:
- mkdir o
@@ -34,22 +24,30 @@ configure-commands:
--with-fpu=vfpv3-d16 \
--with-float=hard" ;;
armv7*) ARCH_FLAGS="--with-arch=armv7-a" ;;
+ mips64*) ARCH_FLAGS="--with-arch=octeon2 \
+ --with-abi=64" ;;
esac
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
cd o && ../configure \
$ARCH_FLAGS \
+ --build=$TARGET_STAGE1 \
--prefix="$PREFIX" \
`# [1]` --libdir=$PREFIX/lib \
--disable-bootstrap \
`# [2]` --with-system-zlib \
`# [3]` --disable-multilib \
+ --disable-libgomp \
+ --disable-libmudflap \
+ --disable-nls \
+ --disable-decimal-float \
+ --disable-libsanitizer \
--enable-languages=c,c++,fortran
+
build-commands:
- |
case "$MORPH_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
diff --git a/strata/build-essential/glibc.morph b/strata/build-essential/glibc.morph
index f820547d..5e5614e7 100644
--- a/strata/build-essential/glibc.morph
+++ b/strata/build-essential/glibc.morph
@@ -20,10 +20,7 @@ products:
- (usr/)?lib/libSegFault\.so(\.\d+)*$
- artifact: glibc-libs
include:
- # This is processed after bins, so bins can take libSegFault.so
- (usr/)?lib(32|64)?/lib[^/]*\.so(\.\d+)*$
- - etc/ld.so.conf
- - etc/ld.so.conf.d
- artifact: glibc-devel
include:
- (usr/)?include/.*
@@ -70,7 +67,6 @@ build-commands:
install-commands:
- cd o && make install_root="$DESTDIR" localtime=UTC install
- mkdir -p "$DESTDIR/etc"
-- mkdir -p "$DESTDIR/etc/ld.so.conf.d"
- |
cat <<EOF > nsswitch.conf
passwd: compat
@@ -96,3 +92,9 @@ install-commands:
include /etc/ld.so.conf.d/*.conf
EOF
- install -m 644 -o root -g root ld.so.conf "$DESTDIR/etc/ld.so.conf"
+# Compatibility symlink to work around the ABI break GLIBC introduced for
+# ARMv7 hard-float platforms in commit d3b36017d43.
+- case "$MORPH_ARCH" in
+ armv7*hf*)
+ ln -s ld-2.20.so "$DESTDIR/lib/ld-linux.so.3" ;;
+ esac
diff --git a/strata/build-essential/linux-api-headers.morph b/strata/build-essential/linux-api-headers.morph
index 62aa22b8..08059a37 100644
--- a/strata/build-essential/linux-api-headers.morph
+++ b/strata/build-essential/linux-api-headers.morph
@@ -3,22 +3,20 @@ kind: chunk
install-commands:
- |
case "$MORPH_ARCH" in
- armv5l)
- ARCH="arm" ;;
armv7b|armv7l|armv7lhf)
ARCH="arm" ;;
- armv8l64|armv8b64)
- ARCH="arm64" ;;
x86_32)
ARCH="i386" ;;
x86_64)
ARCH="x86_64" ;;
ppc64)
ARCH="powerpc" ;;
+ mips*)
+ ARCH="mips" ;;
*)
echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2
exit 1
esac
- ARCH=$ARCH make INSTALL_HDR_PATH=dest headers_install
+ ARCH=$ARCH make INSTALL_HDR_PATH=dest HOSTCFLAGS=-I/tools/include headers_install
- install -d "$DESTDIR${PREFIX-/usr}/include"
- cp -r dest/include/* "$DESTDIR/${PREFIX-/usr}/include"
diff --git a/strata/build-essential/m4-tarball.morph b/strata/build-essential/m4-tarball.morph
index eb16726a..8226d589 100644
--- a/strata/build-essential/m4-tarball.morph
+++ b/strata/build-essential/m4-tarball.morph
@@ -2,4 +2,4 @@ name: m4-tarball
kind: chunk
build-system: autotools
configure-commands:
-- ./configure --prefix="$PREFIX" --disable-gcc-warnings
+- ./configure --prefix="$PREFIX" --disable-gcc-warnings
diff --git a/strata/build-essential/musl.morph b/strata/build-essential/musl.morph
new file mode 100644
index 00000000..a5436d68
--- /dev/null
+++ b/strata/build-essential/musl.morph
@@ -0,0 +1,28 @@
+name: musl
+kind: chunk
+configure-commands:
+- ./configure --prefix="$PREFIX"
+build-commands:
+- make
+install-commands:
+- make install
+- install -d "$DESTDIR$PREFIX/bin" ; cd "$DESTDIR$PREFIX/bin" ; ln -s ../../lib/ld-musl* ldd
+- |
+ case "$MORPH_ARCH" in
+ armv7b|armv7l|armv7lhf)
+ ARCH="arm" ;;
+ x86_32)
+ ARCH="i386" ;;
+ x86_64)
+ ARCH="x86_64" ;;
+ ppc64)
+ ARCH="powerpc" ;;
+ mips*)
+ ARCH="mips" ;;
+ *)
+ echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2
+ exit 1
+ esac
+ echo "/lib:/lib64:/usr/lib64:/usr/lib" >> "ld-musl-$ARCH.path"
+ install -d "$DESTDIR/etc"
+ install "ld-musl-$ARCH.path" "$DESTDIR/etc/ld-musl-$ARCH.path"
diff --git a/strata/build-essential/stage1-binutils.morph b/strata/build-essential/stage1-binutils.morph
index 69a79d14..0543f17d 100644
--- a/strata/build-essential/stage1-binutils.morph
+++ b/strata/build-essential/stage1-binutils.morph
@@ -16,8 +16,13 @@ configure-commands:
# x86_64).
- |
+ case "$MORPH_ARCH" in
+ mips64*) ARCH_FLAGS="--with-arch=octeon2" ;;
+ esac
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
./configure --prefix="$PREFIX" --disable-nls --disable-werror \
--build=$(sh config.guess) \
--host=$(sh config.guess) \
--target=$TARGET_STAGE1 \
+ $ARCH_FLAGS \
--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 ed85b684..6571d346 100644
--- a/strata/build-essential/stage1-gcc.morph
+++ b/strata/build-essential/stage1-gcc.morph
@@ -1,6 +1,12 @@
name: stage1-gcc
kind: chunk
+pre-configure-commands:
+- |
+ case "$MORPH_ARCH" in
+ mips64*) sed -i "s/^\(\#define\s\+MIPS_ABI_DEFAULT\s\+\)ABI_32/\1ABI_64/" gcc/config/mips/mips.h ;;
+ esac
+
configure-commands:
# Workaround from LFS due GCC not detecting stack protection correctly
- sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure
@@ -30,8 +36,12 @@ configure-commands:
--with-fpu=vfpv3-d16 \
--with-float=hard" ;;
armv7*) ARCH_FLAGS="--with-arch=armv7-a" ;;
+ mips64*) ARCH_FLAGS="--with-arch=octeon2 \
+ --with-abi=64" ;;
esac
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
+
cd o && ../configure \
$ARCH_FLAGS \
--build=$(sh ../config.guess) \
diff --git a/strata/build-essential/stage2-binutils.morph b/strata/build-essential/stage2-binutils.morph
index 1c64fb29..8da663e4 100644
--- a/strata/build-essential/stage2-binutils.morph
+++ b/strata/build-essential/stage2-binutils.morph
@@ -4,8 +4,12 @@ build-system: autotools
configure-commands:
- |
+ case "$MORPH_ARCH" in
+ mips64*) ARCH_FLAGS="--with-arch=octeon2" ;;
+ esac
export STAGE2_SYSROOT="$(dirname $(pwd))"
export CXX=false
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
# 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
@@ -13,7 +17,8 @@ configure-commands:
./configure --prefix="$PREFIX" --disable-nls --disable-werror \
--build=$(sh config.guess) \
--host=$TARGET_STAGE1 \
- --target=$TARGET_STAGE1
+ --target=$TARGET_STAGE1 \
+ $ARCH_FLAGS
build-commands:
- |
diff --git a/strata/build-essential/stage2-busybox.morph b/strata/build-essential/stage2-busybox.morph
index 98e4bf33..c629f803 100644
--- a/strata/build-essential/stage2-busybox.morph
+++ b/strata/build-essential/stage2-busybox.morph
@@ -2,6 +2,7 @@ name: stage2-busybox
kind: chunk
configure-commands:
+- TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
# Explicitly setting HOSTCC is required because we have a 'gcc' earlier in
# the PATH supplied by the stage2-gcc chunk, which can't execute outside of
# the stage 3 staging area.
@@ -31,30 +32,65 @@ configure-commands:
# General features that we don't need.
- sed -e 's/CONFIG_FEATURE_MOUNT_CIFS=y.*/# CONFIG_FEATURE_MOUNT_CIFS is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_EXTRA_COMPAT=y.*/# CONFIG_FEATURE_EXTRA_COMPAT is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_EXTRA_QUIET=y.*/# CONFIG_FEATURE_EXTRA_QUIET is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_INIT_COREDUMPS=y.*/# CONFIG_FEATURE_INIT_COREDUMPS is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_INIT_SCTTY=y.*/# CONFIG_FEATURE_INIT_SCTTY is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_INIT_SYSLOG=y.*/# CONFIG_FEATURE_INIT_SYSLOG is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_INITRD=y.*/# CONFIG_FEATURE_INITRD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ROUTE=y.*/# CONFIG_FEATURE_IP_ROUTE is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_USE_INITTAB=y.*/# CONFIG_FEATURE_USE_INITTAB is not set/' -i .config
- sed -e 's/CONFIG_FEATURE_MINIX2=y.*/# CONFIG_FEATURE_MINIX2 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFCONFIG_SLIP=y.*/# CONFIG_FEATURE_IFCONFIG_SLIP is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_INETD_RPC=y.*/# CONFIG_FEATURE_INETD_RPC is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_SELINUX=y.*/# CONFIG_FEATURE_SELINUX is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_SYSTEMD=y.*/# CONFIG_FEATURE_SYSTEMD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_HAVE_RPC=y.*/# CONFIG_FEATURE_HAVE_RPC is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_VI_REGEX_SEARCH=y.*/# CONFIG_FEATURE_VI_REGEX_SEARCH is not set/' -i .config
+- sed -e 's/CONFIG_IFPLUGD=y.*/# CONFIG_IFPLUGD is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_LINK=y.*/# CONFIG_FEATURE_IP_LINK is not set/' -i .config
- sed -e 's/CONFIG_FSCK_MINIX=y.*/# CONFIG_FSCK_MINIX is not set/' -i .config
- sed -e 's/CONFIG_HALT=y.*/# CONFIG_HALT is not set/' -i .config
+- sed -e 's/CONFIG_IFCONFIG=y.*/# CONFIG_IFCONFIG is not set/' -i .config
+- sed -e 's/CONFIG_IPLINK=y.*/# CONFIG_IPLINK is not set/' -i .config
+- sed -e 's/CONFIG_IPROUTE=y.*/# CONFIG_IPROUTE is not set/' -i .config
- sed -e 's/CONFIG_INIT=y.*/# CONFIG_INIT is not set/' -i .config
- sed -e 's/CONFIG_INIT_TERMINAL_TYPE=y.*/CONFIG_INIT_TERMINAL_TYPE=""/' -i .config
- sed -e 's/CONFIG_LOSETUP=y.*/# CONFIG_LOSETUP is not set/' -i .config
- sed -e 's/CONFIG_LSUSB=y.*/# CONFIG_LSUSB is not set/' -i .config
- sed -e 's/CONFIG_LZMA=y.*/# CONFIG_LZMA is not set/' -i .config
- sed -e 's/CONFIG_MKFS_EXT2=y.*/# CONFIG_MKFS_EXT2 is not set/' -i .config
+- sed -e 's/CONFIG_MOUNT_NFS=y.*/# CONFIG_MOUNT_NFS is not set/' -i .config
- sed -e 's/CONFIG_MKFS_MINIX=y.*/# CONFIG_MKFS_MINIX is not set/' -i .config
+- sed -e 's/CONFIG_PAM=y.*/# CONFIG_PAM is not set/' -i .config
- sed -e 's/CONFIG_RUNLEVEL=y.*/# CONFIG_RUNLEVEL is not set/' -i .config
+- sed -e 's/CONFIG_SELINUXENABLED=y.*/# CONFIG_SELINUXENABLED is not set/' -i .config
- sed -e 's/CONFIG_STRINGS=y.*/# CONFIG_STRINGS is not set/' -i .config
- sed -e 's/CONFIG_UNLZMA=y.*/# CONFIG_UNLZMA is not set/' -i .config
- sed -e 's/CONFIG_UNXZ=y.*/# CONFIG_UNXZ is not set/' -i .config
- sed -e 's/CONFIG_XZ=y.*/# CONFIG_XZ is not set/' -i .config
+- sed -e 's/CONFIG_WERROR=y.*/# CONFIG_WERROR is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y.*/# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IPV4=y.*/# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_IPV6=y.*/# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IFUPDOWN_MAPPING=y.*/# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set/' -i .config
+- sed -e 's/CONFIG_IP=y.*/# CONFIG_IP is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ADDRESS=y.*/# CONFIG_FEATURE_IP_ADDRESS is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_LINK=y.*/# CONFIG_FEATURE_IP_LINK is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_ROUTE=y.*/# CONFIG_FEATURE_IP_ROUTE is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_TUNNEL=y.*/# CONFIG_FEATURE_IP_TUNNEL is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_RULE=y.*/# CONFIG_FEATURE_IP_RULE is not set/' -i .config
+- sed -e 's/CONFIG_FEATURE_IP_SHORT_FORMS=y.*/# CONFIG_FEATURE_IP_SHORT_FORMS is not set/' -i .config
+- sed -e 's/CONFIG_IPADDR=y.*/# CONFIG_IPADDR is not set/' -i .config
+- sed -e 's/CONFIG_IPLINK=y.*/# CONFIG_IPLINK is not set/' -i .config
+- sed -e 's/CONFIG_IPROUTE=y.*/# CONFIG_IPROUTE is not set/' -i .config
+- sed -e 's/CONFIG_IPTUNNEL=y.*/# CONFIG_IPTUNNEL is not set/' -i .config
+- sed -e 's/CONFIG_IPRULE=y.*/# CONFIG_IPRULE is not set/' -i .config
+
build-commands:
- |
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
export STAGE2_SYSROOT="$(dirname $(pwd))"
export CPPFLAGS="--sysroot=$STAGE2_SYSROOT"
export LDFLAGS="--sysroot=$STAGE2_SYSROOT"
@@ -64,6 +100,7 @@ install-commands:
# We expect to be built with a non-standard prefix in stage 2 (i.e. not
# /usr). The install will break if prefix is set to /usr.
- |
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
export STAGE2_SYSROOT="$(dirname $(pwd))"
export CPPFLAGS="--sysroot=$STAGE2_SYSROOT"
export LDFLAGS="--sysroot=$STAGE2_SYSROOT"
diff --git a/strata/build-essential/stage2-fhs-dirs.morph b/strata/build-essential/stage2-fhs-dirs.morph
index 64080217..14a6e253 100644
--- a/strata/build-essential/stage2-fhs-dirs.morph
+++ b/strata/build-essential/stage2-fhs-dirs.morph
@@ -9,6 +9,7 @@ install-commands:
- install -m 600 shadow "$DESTDIR/etc/shadow"
- install -m 644 interfaces "$DESTDIR/etc/network/interfaces"
- install -m 644 group "$DESTDIR/etc/group"
+- install -m 644 ld.so.conf "$DESTDIR/etc/ld.so.conf"
- install -m 644 issue "$DESTDIR/etc/issue"
- install -m 644 services "$DESTDIR/etc/services"
- install -m 644 protocols "$DESTDIR/etc/protocols"
diff --git a/strata/build-essential/stage2-gawk.morph b/strata/build-essential/stage2-gawk.morph
index 15c838b6..1ee5f83b 100644
--- a/strata/build-essential/stage2-gawk.morph
+++ b/strata/build-essential/stage2-gawk.morph
@@ -2,8 +2,12 @@ name: stage2-gawk
kind: chunk
build-system: autotools
configure-commands:
-- STAGE2_SYSROOT="$(dirname $(pwd))" CPPFLAGS="--sysroot=$STAGE2_SYSROOT" CXX=false
- LDFLAGS="--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls
- --build=$(sh config.guess) --host=$TARGET_STAGE1
+- |
+ export TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
+ export STAGE2_SYSROOT="$(dirname $(pwd))"
+ export CPPFLAGS="--sysroot=$STAGE2_SYSROOT"
+ export CXX=false
+ export 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-fixed-headers.morph b/strata/build-essential/stage2-gcc-fixed-headers.morph
index 10794872..9e77c67f 100644
--- a/strata/build-essential/stage2-gcc-fixed-headers.morph
+++ b/strata/build-essential/stage2-gcc-fixed-headers.morph
@@ -1,5 +1,12 @@
name: stage2-gcc-fixed-headers
kind: chunk
+
+pre-configure-commands:
+- |
+ case "$MORPH_ARCH" in
+ mips64*) sed -i "s/^\(\#define\s\+MIPS_ABI_DEFAULT\s\+\)ABI_32/\1ABI_64/" gcc/config/mips/mips.h ;;
+ esac
+
install-commands:
# Stage 1 GCC's fixincludes process created a limits.h before there was
# a real limits.h available for the target. This step (taken from Linux
@@ -10,6 +17,7 @@ install-commands:
# This is undesired behaviour in the long term, as we want to never
# have overlaps, so this functionality may go away.
- |
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
libgcc_dir=$(dirname $($TARGET_STAGE1-gcc -print-libgcc-file-name))
sysroot="$(dirname "$(pwd)")"
target_libgcc_dir="${libgcc_dir#$sysroot}"
diff --git a/strata/build-essential/stage2-gcc.morph b/strata/build-essential/stage2-gcc.morph
index cd600e18..15bad22c 100644
--- a/strata/build-essential/stage2-gcc.morph
+++ b/strata/build-essential/stage2-gcc.morph
@@ -1,6 +1,12 @@
name: stage2-gcc
kind: chunk
+pre-configure-commands:
+- |
+ case "$MORPH_ARCH" in
+ mips64*) sed -i "s/^\(\#define\s\+MIPS_ABI_DEFAULT\s\+\)ABI_32/\1ABI_64/" gcc/config/mips/mips.h ;;
+ esac
+
configure-commands:
- mkdir o
@@ -27,7 +33,10 @@ configure-commands:
--with-fpu=vfpv3-d16 \
--with-float=hard" ;;
armv7*) ARCH_FLAGS="--with-arch=armv7-a" ;;
+ mips64*) ARCH_FLAGS="--with-arch=mips64 \
+ --with-abi=64" ;;
esac
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
export STAGE2_SYSROOT="$(dirname $(pwd))"
export CC="$TARGET_STAGE1-gcc --sysroot=$STAGE2_SYSROOT"
export CXX="$TARGET_STAGE1-g++ --sysroot=$STAGE2_SYSROOT"
@@ -36,7 +45,7 @@ configure-commands:
cd o && ../configure \
$ARCH_FLAGS \
--build=$(sh ../config.guess) \
- `# [1]` --host=$TARGET_STAGE1 \
+ `# [1]` --host=$TARGET_STAGE1 \
`# [1]` --target=$TARGET_STAGE1 \
--prefix="$PREFIX" \
`# [2]` --libdir=$PREFIX/lib \
@@ -47,13 +56,12 @@ configure-commands:
--disable-multilib \
--disable-libgomp \
--disable-libstdcxx-pch \
+ --disable-libsanitizer \
--enable-languages=c,c++
build-commands:
- |
case "$MORPH_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
@@ -71,11 +79,10 @@ install-commands:
# gcc/config/i386/t-linux64 and this might break things, so for now we
# tolerate the inconsistency.
- |
- if [ "$(echo $TARGET | cut -c -6)" = "x86_64" ]; then
- libdir=lib64
- else
- libdir=lib
- fi
+ case "$TARGET" in
+ x86_64* | mips64*) libdir=lib64 ;;
+ *) libdir=lib ;;
+ esac
install -d "$DESTDIR/lib"
ln -s "$PREFIX/$libdir/libgcc_s.so" "$DESTDIR/lib/"
diff --git a/strata/build-essential/stage2-glibc.morph b/strata/build-essential/stage2-glibc.morph
index f44d0ebb..7346cd3b 100644
--- a/strata/build-essential/stage2-glibc.morph
+++ b/strata/build-essential/stage2-glibc.morph
@@ -33,7 +33,6 @@ build-commands:
install-commands:
- cd o && make install_root="$DESTDIR" localtime=UTC install
- mkdir -p "$DESTDIR/etc"
-- mkdir -p "$DESTDIR/etc/ld.so.conf.d"
- |
cat <<EOF > ld.so.conf
/lib
@@ -42,41 +41,7 @@ install-commands:
include /etc/ld.so.conf.d/*.conf
EOF
- install -m 644 -o root -g root ld.so.conf "$DESTDIR/etc/ld.so.conf"
-- |
- # Fix up GCC to handle the sysroot containing glibc being in a different
- # location for each chunk build.
- #
- # For headers, it's enough to pass -B in the CPPFLAGS. This would work for
- # the startup files (crt*.o) as well, except where libtool is involved (in
- # which case it strips -B out of your LDFLAGS before calling GCC). We get
- # around this by making GCC locate them relative to the environment variable
- # STAGE2_SYSROOT, which we can then set along with CPPFLAGS in each stage 2
- # chunk build.
- #
- # We also force the use of the program loader at PREFIX/lib/ld.so instead
- # of its usual home in /lib or /lib64, which is necessary for the output of
- # stage 2 to work as a chroot when building stage 3.
-
- sysroot="$(dirname "$(pwd)")"
- specs_dir="$(dirname $($TARGET_STAGE1-gcc --print-libgcc-file-name))"
- target_specs_dir="$DESTDIR/${specs_dir#$sysroot}"
- mkdir -p "$target_specs_dir"
-
- $TARGET_STAGE1-gcc -dumpspecs |
- sed -e "s@[gMS]\?crt[1in].o%s@%:getenv(STAGE2_SYSROOT $PREFIX/lib/&)@g" \
- -e "s@/lib\(64\)\?/ld@$PREFIX/lib/ld@g" \
- > "$target_specs_dir/specs-for-sysroot"
-
- # NASTY HACK #
- # We create a symlink to the actual specs here, so that later the
- # symlink can be replaced with a dangling link.
- #
- # This is necessary as we need to have gcc use its internal specs,
- # which can differ to the specs generated by `gcc -dumpspecs`.
- #
- # The dangling symlink will not make it onto the final system, just
- # like all other bootstrap only components.
- ln -s specs-for-sysroot "$target_specs_dir/specs"
+- sh stage2-glibc-fix-specs
# Install a symlink for the program interpreter (ld.so) so that binaries
# built in stage 3 before the stage 3 glibc is built can use it.
diff --git a/strata/build-essential/stage2-libstdc++.morph b/strata/build-essential/stage2-libstdc++.morph
index 3d89ad85..3c72596a 100644
--- a/strata/build-essential/stage2-libstdc++.morph
+++ b/strata/build-essential/stage2-libstdc++.morph
@@ -1,5 +1,12 @@
name: stage2-libstdc++
kind: chunk
+
+pre-configure-commands:
+- |
+ case "$MORPH_ARCH" in
+ mips64*) sed -i "s/^\(\#define\s\+MIPS_ABI_DEFAULT\s\+\)ABI_32/\1ABI_64/" gcc/config/mips/mips.h ;;
+ esac
+
configure-commands:
- mkdir o
@@ -13,21 +20,22 @@ configure-commands:
# directory.
- |
export STAGE2_SYSROOT="$(dirname $(pwd))"
+ export TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
# -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" \
+ --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
+ `# [3]` --with-gxx-include-dir="/tools/$TARGET_STAGE1/include/c++/4.9.2"
build-commands:
- cd o && make
diff --git a/strata/build-essential/stage2-linux-api-headers.morph b/strata/build-essential/stage2-linux-api-headers.morph
index 1da94ee9..841f6fb0 100644
--- a/strata/build-essential/stage2-linux-api-headers.morph
+++ b/strata/build-essential/stage2-linux-api-headers.morph
@@ -3,18 +3,16 @@ kind: chunk
install-commands:
- |
case "$MORPH_ARCH" in
- armv5l)
- ARCH="arm" ;;
armv7b|armv7l|armv7lhf)
ARCH="arm" ;;
- armv8l64|armv8b64)
- ARCH="arm64" ;;
x86_32)
ARCH="i386" ;;
x86_64)
ARCH="x86_64" ;;
ppc64)
ARCH="powerpc" ;;
+ mips*)
+ ARCH="mips" ;;
*)
echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2
exit 1
diff --git a/strata/build-essential/stage2-make.morph b/strata/build-essential/stage2-make.morph
index 0b05581c..7d287402 100644
--- a/strata/build-essential/stage2-make.morph
+++ b/strata/build-essential/stage2-make.morph
@@ -2,8 +2,12 @@ name: stage2-make
kind: chunk
build-system: autotools
configure-commands:
-- STAGE2_SYSROOT="$(dirname $(pwd))" CPPFLAGS="--sysroot=$STAGE2_SYSROOT" CXX=false
- LDFLAGS="--sysroot=$STAGE2_SYSROOT" ./configure --prefix="$PREFIX" --disable-nls
- --build=$(sh config/config.guess) --host=$TARGET_STAGE1
+- |
+ export STAGE2_SYSROOT="$(dirname $(pwd))"
+ export CPPFLAGS="--sysroot=$STAGE2_SYSROOT"
+ export CXX=false
+ export TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`;
+ export 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/build-essential/stage2-musl.morph b/strata/build-essential/stage2-musl.morph
new file mode 100644
index 00000000..92b55f28
--- /dev/null
+++ b/strata/build-essential/stage2-musl.morph
@@ -0,0 +1,54 @@
+name: stage2-musl
+kind: chunk
+configure-commands:
+# Configure flag notes:
+# 1. Avoid installing to PREFIX/lib64 on x86_64.
+# 2. Location of linux-api-headers.
+# 3. Normal flags. See glibc.morph.
+# 4. Force configuration values of certain things that can't be detected
+# in a cross-compile.
+- |
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`; \
+ export CFLAGS="-O2 $CFLAGS"; export CXX=false; \
+ ./configure \
+ CROSS_COMPILE="$TARGET_STAGE1-" \
+ $ARCH_FLAGS \
+ --prefix="$PREFIX" \
+ --host=$TARGET_STAGE1 \
+ --disable-gcc-wrapper \
+ `# [1]` --libdir="$PREFIX/lib" \
+ `# [2]` --with-headers="$(pwd)/../../$PREFIX/include" \
+ `# [3]` --disable-profile --enable-kernel=2.6.25 \
+ `# [4]` libc_cv_c_cleanup=yes libc_cv_ctors_header=yes \
+ libc_cv_forced_unwind=yes libc_cv_ssp=no
+
+build-commands:
+- make localtime=UTC
+
+install-commands:
+- make install_root="$DESTDIR" localtime=UTC install
+- export TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`; sh stage2-musl-fix-specs
+
+# Install a symlink for the program interpreter (ld.so) so that binaries
+# built in stage 3 before the stage 3 musl is built can use it.
+# sysdeps/unix/sysv/linux/configure.
+- install -d $DESTDIR/lib
+- |
+ case "$MORPH_ARCH" in
+ armv7b|armv7l|armv7lhf)
+ ARCH="arm" ;;
+ x86_32)
+ ARCH="i386" ;;
+ x86_64)
+ ARCH="x86_64" ;;
+ ppc64)
+ ARCH="powerpc" ;;
+ mips*)
+ ARCH="mips" ;;
+ *)
+ echo "Error: unsupported Morph architecture: $MORPH_ARCH" >&2
+ exit 1
+ esac
+ loader=$(basename $(ls "$DESTDIR$PREFIX"/lib/libc.so))
+ [ -z $loader ] && ( echo "Bug in stage2-musl ld.so symlinks" ; exit 1 )
+ cd "$DESTDIR$PREFIX"/lib ; ln -s $loader ld-musl-$ARCH.so.1
diff --git a/strata/build-essential/stage2-reset-specs.morph b/strata/build-essential/stage2-reset-specs.morph
index 8892f67c..82b4f0b7 100644
--- a/strata/build-essential/stage2-reset-specs.morph
+++ b/strata/build-essential/stage2-reset-specs.morph
@@ -14,6 +14,7 @@ kind: chunk
# points to a file that doesn't exist.
install-commands:
- |
+ TARGET_STAGE1=`echo $TARGET_STAGE1 | sed -e 's/bootstrap-linux-gnu/linux-musl/'`
STAGE2_SYSROOT="$(dirname "$(pwd)")"
specs_dir="$(dirname $($TARGET_STAGE1-gcc -print-libgcc-file-name))"
target_specs_dir="$DESTDIR/${specs_dir#$STAGE2_SYSROOT}"