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. products: - artifact: build-essential-minimal include: - fhs-dirs-.* - busybox-.* - eglibc-nss chunks: - name: stage1-binutils repo: upstream:binutils-redhat ref: 987eb543a034cddc4eeb103f08f566f24a5f964a unpetrify-ref: baserock/build-essential build-depends: [] build-mode: bootstrap prefix: /tools - name: stage1-gcc repo: upstream:gcc-tarball ref: 0a1a077d3466cd99a4ed5590db2146b3fec6fff1 unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils build-mode: bootstrap prefix: /tools - name: stage2-linux-api-headers repo: upstream:linux ref: eff825d6e284eb0fb04b434429a3e3b2e10cabf8 unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc build-mode: bootstrap prefix: /tools - name: stage2-eglibc repo: upstream:eglibc2 ref: 43ee5d250ad47d2bee8ec17954efb7f22d2b804c unpetrify-ref: baserock/2.15-build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-linux-api-headers build-mode: bootstrap prefix: /tools - name: stage2-binutils repo: upstream:binutils-redhat ref: 987eb543a034cddc4eeb103f08f566f24a5f964a unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc build-mode: bootstrap prefix: /tools - name: stage2-gcc-fixed-headers repo: upstream:gcc-tarball ref: 0a1a077d3466cd99a4ed5590db2146b3fec6fff1 unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc build-mode: bootstrap prefix: /tools - name: stage2-gcc repo: upstream:gcc-tarball ref: 0a1a077d3466cd99a4ed5590db2146b3fec6fff1 unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc - stage2-gcc-fixed-headers build-mode: bootstrap prefix: /tools - name: stage2-busybox repo: upstream:busybox ref: eeb9014f28e3aa00673a0fad127e7420da4392db unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc build-mode: bootstrap prefix: /tools - name: stage2-fhs-dirs repo: baserock:baserock/fhs-dirs ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 unpetrify-ref: master build-depends: [] build-mode: bootstrap prefix: /tools - name: stage2-gawk repo: upstream:gawk ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133 unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc build-mode: bootstrap prefix: /tools - name: stage2-make repo: upstream:make ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba unpetrify-ref: baserock/build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-eglibc build-mode: bootstrap prefix: /tools - name: stage2-reset-specs repo: upstream:eglibc2 ref: 43ee5d250ad47d2bee8ec17954efb7f22d2b804c unpetrify-ref: baserock/2.15-build-essential build-depends: - stage1-binutils - stage1-gcc - stage2-linux-api-headers - stage2-eglibc build-mode: bootstrap prefix: /tools - name: fhs-dirs repo: baserock:baserock/fhs-dirs ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 unpetrify-ref: master build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs build-mode: staging prefix: /usr - name: linux-api-headers repo: upstream:linux ref: eff825d6e284eb0fb04b434429a3e3b2e10cabf8 unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs build-mode: staging prefix: /usr - name: eglibc repo: upstream:eglibc2 ref: df0258044f321990eadd647e03095a48ad04c1a8 unpetrify-ref: baserock/2.15-build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - linux-api-headers build-mode: staging artifacts: eglibc-gconv: build-essential-runtime eglibc-libs: build-essential-minimal eglibc-nss: build-essential-runtime prefix: /usr - name: zlib repo: upstream:zlib ref: db333af7e9b90a23fd7f9cd8dc128123b34bf698 unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc build-mode: staging artifacts: zlib-libs: build-essential-minimal prefix: /usr - name: binutils repo: upstream:binutils-redhat ref: 987eb543a034cddc4eeb103f08f566f24a5f964a unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc - zlib build-mode: staging prefix: /usr - name: busybox repo: upstream:busybox ref: bf06394ab87ff22662084c82c1821847c25b7f21 unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc build-mode: staging prefix: /usr - name: gawk repo: upstream:gawk ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133 unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc build-mode: staging prefix: /usr - name: gcc repo: upstream:gcc-tarball ref: b0254026149b13782eae26d38435a4c62a002cf0 unpetrify-ref: baserock/build-essential-4.7 build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc - zlib build-mode: staging artifacts: gcc-libs: build-essential-minimal prefix: /usr - name: make repo: upstream:make ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc build-mode: staging prefix: /usr - name: ccache repo: upstream:ccache ref: 567631456f0899cdf0c382f898d38aadc8901d32 unpetrify-ref: baserock/build-essential build-depends: - stage2-binutils - stage2-busybox - stage2-eglibc - stage2-fhs-dirs - stage2-gawk - stage2-gcc - stage2-linux-api-headers - stage2-make - stage2-reset-specs - eglibc - zlib build-mode: staging prefix: /usr