name: build-essential kind: stratum description: | Toolchain stratum Stage 1: build a minimal cross compiler with the host's tools. Starting with a cross compiler ensures that (a) nothing from the host can leak into the build-essential artifacts, and (b) cross-compiling build-essential is fully tested and supported, since we always use the cross code paths. Stage 2: cross-build the whole of build-essential, using the host's tools but the cross-compiler toolchain. Stage 2 GCC outputs code for the same 'bootstrap' machine as stage 1 GCC, but because stage 2 GCC is also built to *run* on the bootstrap machine it can only execute inside the stage 3 chroot (due to being built against a libc with a non-standard prefix). Stage 3: build the whole of build-essential again, this time using a staging area containing only the output of stage 2. The result of this build is fully reproducible. We do a switch-a-roo between stage 2 and 3: stages 2 chunks are all built to run on a host *-bootstrap-* while stage 3 chunks are native-built for a *-baserock-* machine. This works, because the cross build was all for show (and cleanliness) and the binaries actually still run on the host. After build-essential is built we do another trick. See 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. chunks: - 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-musl morph: strata/build-essential/stage1-gcc.morph repo: upstream:gcc-tarball ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils-musl build-mode: bootstrap prefix: /tools - name: stage2-linux-api-headers-musl morph: strata/build-essential/stage2-linux-api-headers.morph repo: upstream:linux ref: 6d90449f594534084a7847c0b9f0216b0f9056b1 unpetrify-ref: baserock/v3.12-musl build-depends: - stage1-binutils-musl - stage1-gcc-musl build-mode: bootstrap prefix: /tools - 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-musl - stage1-gcc-musl - stage2-linux-api-headers-musl build-mode: bootstrap prefix: /tools - name: stage2-libstdc++-musl morph: strata/build-essential/stage2-libstdc++.morph repo: upstream:gcc-tarball ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - 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-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - name: stage2-gcc-fixed-headers-musl morph: strata/build-essential/stage2-gcc-fixed-headers.morph repo: upstream:gcc-tarball ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - name: stage2-gcc-musl morph: strata/build-essential/stage2-gcc.morph repo: upstream:gcc-tarball ref: 64b6dc020e879808a0c8f2271585e2f5ae45372a unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl - stage2-gcc-fixed-headers-musl - stage2-libstdc++-musl build-mode: bootstrap prefix: /tools - name: stage2-busybox-musl morph: strata/build-essential/stage2-busybox.morph repo: upstream:busybox ref: 1ecfe811fe2f70380170ef7d820e8150054e88ca unpetrify-ref: 1_23_1 build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - 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-musl morph: strata/build-essential/stage2-fhs-dirs.morph repo: baserock:baserock/fhs-dirs ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 unpetrify-ref: master build-depends: [] build-mode: bootstrap prefix: /tools - name: stage2-gawk-musl morph: strata/build-essential/stage2-gawk.morph repo: upstream:gawk ref: 1da41261fba4cd03a32362d44c8634f599ae64db unpetrify-ref: master build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - name: stage2-make-musl morph: strata/build-essential/stage2-make.morph repo: upstream:make-tarball ref: f75919b038da8a28388a911303fb86ed7a70ea2c unpetrify-ref: make-4.1 build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-musl build-mode: bootstrap prefix: /tools - name: stage2-reset-specs-musl morph: strata/build-essential/stage2-reset-specs.morph repo: upstream:musl ref: 12cc52b5f2ca421786dc7ac227a0d41a8c8ed0c2 unpetrify-ref: baserock/1.1.6 build-depends: - stage1-binutils-musl - stage1-gcc-musl - stage2-linux-api-headers-musl - stage2-musl build-mode: bootstrap prefix: /tools - name: fhs-dirs-musl morph: strata/build-essential/fhs-dirs.morph repo: baserock:baserock/fhs-dirs ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 unpetrify-ref: master build-depends: - 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: 6d90449f594534084a7847c0b9f0216b0f9056b1 unpetrify-ref: baserock/v3.12-musl build-depends: - 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-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-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-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: 1ecfe811fe2f70380170ef7d820e8150054e88ca unpetrify-ref: 1_23_1 build-depends: - 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: 1da41261fba4cd03a32362d44c8634f599ae64db unpetrify-ref: master build-depends: - 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-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: 64b6dc020e879808a0c8f2271585e2f5ae45372a unpetrify-ref: baserock/build-essential build-depends: - 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 build-depends: - 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-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