From ac9b2a68f3488baa24d9c3f6d91d403fc3ec09ab Mon Sep 17 00:00:00 2001 From: Richard Dale Date: Fri, 19 Jun 2015 11:56:27 +0100 Subject: Use the musl build-essential morphs --- strata/build-essential.morph | 464 ++++++++++----------- strata/build-essential/binutils.morph | 4 + strata/build-essential/busybox.morph | 99 ++++- strata/build-essential/fhs-dirs.morph | 3 +- strata/build-essential/gcc.morph | 32 +- strata/build-essential/glibc.morph | 10 +- strata/build-essential/linux-api-headers.morph | 8 +- strata/build-essential/m4-tarball.morph | 2 +- strata/build-essential/musl.morph | 28 ++ strata/build-essential/stage1-binutils.morph | 5 + strata/build-essential/stage1-gcc.morph | 10 + strata/build-essential/stage2-binutils.morph | 7 +- strata/build-essential/stage2-busybox.morph | 37 ++ strata/build-essential/stage2-fhs-dirs.morph | 1 + strata/build-essential/stage2-gawk.morph | 10 +- .../build-essential/stage2-gcc-fixed-headers.morph | 8 + strata/build-essential/stage2-gcc.morph | 23 +- strata/build-essential/stage2-glibc.morph | 37 +- strata/build-essential/stage2-libstdc++.morph | 14 +- .../build-essential/stage2-linux-api-headers.morph | 6 +- strata/build-essential/stage2-make.morph | 10 +- strata/build-essential/stage2-musl.morph | 54 +++ strata/build-essential/stage2-reset-specs.morph | 1 + 23 files changed, 535 insertions(+), 338 deletions(-) create mode 100644 strata/build-essential/musl.morph create mode 100644 strata/build-essential/stage2-musl.morph 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 < 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 < 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}" -- cgit v1.2.1