From ae60ae2d64dba72c35377a7f8a22d02894804553 Mon Sep 17 00:00:00 2001 From: Paul Sherwood Date: Thu, 19 Mar 2015 21:49:12 +0000 Subject: WIP separate bootstrap into its own stratum Change-Id: Iecc8aec1ab6596c5f215e97a52149902d4ed0267 --- strata/build-essential-bootstrap.morph | 205 +++++++++++++++++++++++ strata/build-essential.morph | 297 +-------------------------------- 2 files changed, 208 insertions(+), 294 deletions(-) create mode 100644 strata/build-essential-bootstrap.morph diff --git a/strata/build-essential-bootstrap.morph b/strata/build-essential-bootstrap.morph new file mode 100644 index 00000000..b2946f03 --- /dev/null +++ b/strata/build-essential-bootstrap.morph @@ -0,0 +1,205 @@ +name: build-essential-bootstrap +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. + + PLEASE KEEP THE REFS IN 'armv7lhf-cross-toolchain' STRATUM UP TO DATE WITH + THIS ONE! +products: +- artifact: build-essential-minimal + include: + - fhs-dirs-.* + - busybox-.* + - glibc-nss +chunks: +- name: stage1-binutils + morph: strata/build-essential/stage1-binutils.morph + repo: upstream:binutils-redhat + ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8 + unpetrify-ref: baserock/build-essential + build-mode: bootstrap + prefix: /tools + +- name: stage1-gcc + morph: strata/build-essential/stage1-gcc.morph + repo: upstream:gcc-tarball + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/build-essential + build-depends: + - stage1-binutils + build-mode: bootstrap + prefix: /tools + +- name: stage2-linux-api-headers + morph: strata/build-essential/stage2-linux-api-headers.morph + repo: upstream:linux + ref: bfa76d49576599a4b9f9b7a71f23d73d6dcff735 + unpetrify-ref: v3.19 + build-depends: + - stage1-binutils + - stage1-gcc + build-mode: bootstrap + prefix: /tools + +- name: stage2-glibc + morph: strata/build-essential/stage2-glibc.morph + repo: upstream:glibc + ref: 52cf9a0153c14df4f6ae3bd0e1e6cc5d171e586c + unpetrify-ref: baserock/glibc-2.20 + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + build-mode: bootstrap + prefix: /tools + +- name: stage2-libstdc++ + morph: strata/build-essential/stage2-libstdc++.morph + repo: upstream:gcc-tarball + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/build-essential + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools + +- name: stage2-binutils + 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 + build-mode: bootstrap + prefix: /tools + +- name: stage2-gcc-fixed-headers + morph: strata/build-essential/stage2-gcc-fixed-headers.morph + repo: upstream:gcc-tarball + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/build-essential + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools + +- name: stage2-gcc + morph: strata/build-essential/stage2-gcc.morph + repo: upstream:gcc-tarball + ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 + unpetrify-ref: baserock/build-essential + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + - stage2-gcc-fixed-headers + - stage2-libstdc++ + build-mode: bootstrap + prefix: /tools + +- name: stage2-busybox + morph: strata/build-essential/stage2-busybox.morph + repo: upstream:busybox + ref: 1ecfe811fe2f70380170ef7d820e8150054e88ca + unpetrify-ref: 1_23_1 + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools + +- name: stage2-fake-bash + morph: strata/build-essential/stage2-fake-bash.morph + repo: upstream:bash + ref: 3590145af6f1c9fa321dff231f69ae696e7e740b + unpetrify-ref: baserock/bash-4.3-patch-27 + build-mode: bootstrap + prefix: /tools + +- name: stage2-fhs-dirs + morph: strata/build-essential/stage2-fhs-dirs.morph + repo: baserock:baserock/fhs-dirs + ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 + unpetrify-ref: master + build-mode: bootstrap + prefix: /tools + +- name: stage2-gawk + morph: strata/build-essential/stage2-gawk.morph + repo: upstream:gawk + ref: dc5af665700d9b04fdf9c18930526d28eef5d5d9 + unpetrify-ref: gawk-4.1.1 + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools + +- name: stage2-make + morph: strata/build-essential/stage2-make.morph + repo: upstream:make-tarball + ref: f75919b038da8a28388a911303fb86ed7a70ea2c + unpetrify-ref: make-4.1 + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools + +- name: stage2-reset-specs + morph: strata/build-essential/stage2-reset-specs.morph + repo: upstream:glibc + ref: 52cf9a0153c14df4f6ae3bd0e1e6cc5d171e586c + unpetrify-ref: baserock/glibc-2.20 + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-glibc + build-mode: bootstrap + prefix: /tools diff --git a/strata/build-essential.morph b/strata/build-essential.morph index f4d865ac..9b0803ff 100644 --- a/strata/build-essential.morph +++ b/strata/build-essential.morph @@ -1,37 +1,10 @@ name: build-essential kind: stratum +build-depends: +- morph: strata/build-essential-bootstrap.morph 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. - PLEASE KEEP THE REFS IN 'armv7lhf-cross-toolchain' STRATUM UP TO DATE WITH THIS ONE! products: @@ -40,201 +13,19 @@ products: - fhs-dirs-.* - busybox-.* - glibc-nss -chunks: -- name: stage1-binutils - morph: strata/build-essential/stage1-binutils.morph - repo: upstream:binutils-redhat - ref: b1d3b01332ae49a60ff5d6bf53d3a5b1805769c8 - unpetrify-ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - -- name: stage1-gcc - morph: strata/build-essential/stage1-gcc.morph - repo: upstream:gcc-tarball - ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 - unpetrify-ref: baserock/build-essential - build-depends: - - stage1-binutils - build-mode: bootstrap - prefix: /tools - -- name: stage2-linux-api-headers - morph: strata/build-essential/stage2-linux-api-headers.morph - repo: upstream:linux - ref: bfa76d49576599a4b9f9b7a71f23d73d6dcff735 - unpetrify-ref: v3.19 - build-depends: - - stage1-binutils - - stage1-gcc - build-mode: bootstrap - prefix: /tools - -- name: stage2-glibc - morph: strata/build-essential/stage2-glibc.morph - repo: upstream:glibc - ref: 52cf9a0153c14df4f6ae3bd0e1e6cc5d171e586c - unpetrify-ref: baserock/glibc-2.20 - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - build-mode: bootstrap - prefix: /tools - -- name: stage2-libstdc++ - morph: strata/build-essential/stage2-libstdc++.morph - repo: upstream:gcc-tarball - ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 - unpetrify-ref: baserock/build-essential - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools - -- name: stage2-binutils - 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 - build-mode: bootstrap - prefix: /tools - -- name: stage2-gcc-fixed-headers - morph: strata/build-essential/stage2-gcc-fixed-headers.morph - repo: upstream:gcc-tarball - ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 - unpetrify-ref: baserock/build-essential - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools - -- name: stage2-gcc - morph: strata/build-essential/stage2-gcc.morph - repo: upstream:gcc-tarball - ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 - unpetrify-ref: baserock/build-essential - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - - stage2-gcc-fixed-headers - - stage2-libstdc++ - build-mode: bootstrap - prefix: /tools - -- name: stage2-busybox - morph: strata/build-essential/stage2-busybox.morph - repo: upstream:busybox - ref: 1ecfe811fe2f70380170ef7d820e8150054e88ca - unpetrify-ref: 1_23_1 - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools - -- name: stage2-fake-bash - morph: strata/build-essential/stage2-fake-bash.morph - repo: upstream:bash - ref: 3590145af6f1c9fa321dff231f69ae696e7e740b - unpetrify-ref: baserock/bash-4.3-patch-27 - build-mode: bootstrap - prefix: /tools - -- name: stage2-fhs-dirs - morph: strata/build-essential/stage2-fhs-dirs.morph - repo: baserock:baserock/fhs-dirs - ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4 - unpetrify-ref: master - build-mode: bootstrap - prefix: /tools - -- name: stage2-gawk - morph: strata/build-essential/stage2-gawk.morph - repo: upstream:gawk - ref: dc5af665700d9b04fdf9c18930526d28eef5d5d9 - unpetrify-ref: gawk-4.1.1 - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools - -- name: stage2-make - morph: strata/build-essential/stage2-make.morph - repo: upstream:make-tarball - ref: f75919b038da8a28388a911303fb86ed7a70ea2c - unpetrify-ref: make-4.1 - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools - -- name: stage2-reset-specs - morph: strata/build-essential/stage2-reset-specs.morph - repo: upstream:glibc - ref: 52cf9a0153c14df4f6ae3bd0e1e6cc5d171e586c - unpetrify-ref: baserock/glibc-2.20 - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - stage2-glibc - build-mode: bootstrap - prefix: /tools +chunks: - name: fhs-dirs morph: strata/build-essential/fhs-dirs.morph repo: baserock:baserock/fhs-dirs 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 morph: strata/build-essential/linux-api-headers.morph repo: upstream:linux ref: bfa76d49576599a4b9f9b7a71f23d73d6dcff735 unpetrify-ref: v3.19 - 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 @@ -242,16 +33,6 @@ chunks: ref: 52cf9a0153c14df4f6ae3bd0e1e6cc5d171e586c unpetrify-ref: baserock/glibc-2.20 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 @@ -264,15 +45,6 @@ chunks: 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 @@ -283,15 +55,6 @@ chunks: 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 @@ -301,15 +64,6 @@ chunks: 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 @@ -318,15 +72,6 @@ chunks: ref: dc5af665700d9b04fdf9c18930526d28eef5d5d9 unpetrify-ref: gawk-4.1.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: m4-tarball @@ -335,15 +80,6 @@ chunks: 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 @@ -352,15 +88,6 @@ chunks: ref: b3c9b176c1f10ebeff5700eb3760e9511f23fa06 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 @@ -373,15 +100,6 @@ chunks: 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 @@ -390,14 +108,5 @@ chunks: 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 -- cgit v1.2.1