diff options
Diffstat (limited to 'build-essential.morph')
-rw-r--r-- | build-essential.morph | 140 |
1 files changed, 91 insertions, 49 deletions
diff --git a/build-essential.morph b/build-essential.morph index 0163093..cbda1e4 100644 --- a/build-essential.morph +++ b/build-essential.morph @@ -3,24 +3,26 @@ chunks: build-mode: bootstrap name: stage1-binutils prefix: /tools - ref: baserock/build-essential + ref: c95c6c25ca35e70d2c21daf138daff8371a8c8d9 repo: upstream:binutils-redhat + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils build-mode: bootstrap name: stage1-gcc prefix: /tools - ref: baserock/build-essential + ref: 86eee3c35c3f43b3769a5bd810a45228dcc54343 repo: upstream:gcc-tarball - + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc build-mode: bootstrap name: stage2-linux-api-headers prefix: /tools - ref: baserock/build-essential + ref: f9755c0c4d5274bbb4a34ca147690ec3bba02d94 repo: upstream:linux + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -28,8 +30,9 @@ chunks: build-mode: bootstrap name: stage2-eglibc prefix: /tools - ref: baserock/2.15-build-essential + ref: e51d56cdcf2d9a4372c89a1e88ab78bf7c329df7 repo: upstream:eglibc2 + unpetrify-ref: baserock/2.15-build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -37,8 +40,9 @@ chunks: build-mode: bootstrap name: stage2-binutils prefix: /tools - ref: baserock/build-essential + ref: c95c6c25ca35e70d2c21daf138daff8371a8c8d9 repo: upstream:binutils-redhat + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -46,8 +50,9 @@ chunks: build-mode: bootstrap name: stage2-gcc-fixed-headers prefix: /tools - ref: baserock/build-essential + ref: 86eee3c35c3f43b3769a5bd810a45228dcc54343 repo: upstream:gcc-tarball + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -56,8 +61,9 @@ chunks: build-mode: bootstrap name: stage2-gcc prefix: /tools - ref: baserock/build-essential + ref: 86eee3c35c3f43b3769a5bd810a45228dcc54343 repo: upstream:gcc-tarball + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -65,14 +71,16 @@ chunks: build-mode: bootstrap name: stage2-busybox prefix: /tools - ref: baserock/build-essential + ref: eeb9014f28e3aa00673a0fad127e7420da4392db repo: upstream:busybox + unpetrify-ref: baserock/build-essential - build-depends: [] build-mode: bootstrap name: stage2-fhs-dirs prefix: /tools - ref: master + ref: 442e2a6453ec380bf9d64f6be50e57d54ddf93d3 repo: baserock:baserock/fhs-dirs + unpetrify-ref: master - build-depends: - stage1-binutils - stage1-gcc @@ -80,8 +88,9 @@ chunks: build-mode: bootstrap name: stage2-gawk prefix: /tools - ref: baserock/build-essential + ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133 repo: upstream:gawk + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -89,8 +98,9 @@ chunks: build-mode: bootstrap name: stage2-make prefix: /tools - ref: baserock/build-essential + ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba repo: upstream:make + unpetrify-ref: baserock/build-essential - build-depends: - stage1-binutils - stage1-gcc @@ -99,9 +109,9 @@ chunks: build-mode: bootstrap name: stage2-reset-specs prefix: /tools - ref: baserock/2.15-build-essential + ref: e51d56cdcf2d9a4372c89a1e88ab78bf7c329df7 repo: upstream:eglibc2 - + unpetrify-ref: baserock/2.15-build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -115,8 +125,9 @@ chunks: build-mode: staging name: fhs-dirs prefix: /usr - ref: master + ref: 442e2a6453ec380bf9d64f6be50e57d54ddf93d3 repo: baserock:baserock/fhs-dirs + unpetrify-ref: master - build-depends: - stage2-binutils - stage2-busybox @@ -130,8 +141,9 @@ chunks: build-mode: staging name: linux-api-headers prefix: /usr - ref: baserock/build-essential + ref: f9755c0c4d5274bbb4a34ca147690ec3bba02d94 repo: upstream:linux + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -146,8 +158,9 @@ chunks: build-mode: staging name: eglibc prefix: /usr - ref: baserock/2.15-build-essential + ref: e51d56cdcf2d9a4372c89a1e88ab78bf7c329df7 repo: upstream:eglibc2 + unpetrify-ref: baserock/2.15-build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -162,8 +175,9 @@ chunks: build-mode: staging name: zlib prefix: /usr - ref: baserock/build-essential + ref: db3aed6856d7a23186844fdf93105cad2fcf2f2f repo: upstream:zlib + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -179,8 +193,9 @@ chunks: build-mode: staging name: binutils prefix: /usr - ref: baserock/build-essential + ref: c95c6c25ca35e70d2c21daf138daff8371a8c8d9 repo: upstream:binutils-redhat + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -195,8 +210,9 @@ chunks: build-mode: staging name: busybox prefix: /usr - ref: baserock/build-essential + ref: eeb9014f28e3aa00673a0fad127e7420da4392db repo: upstream:busybox + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -211,8 +227,9 @@ chunks: build-mode: staging name: gawk prefix: /usr - ref: baserock/build-essential + ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133 repo: upstream:gawk + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -228,8 +245,9 @@ chunks: build-mode: staging name: gcc prefix: /usr - ref: baserock/build-essential + ref: 86eee3c35c3f43b3769a5bd810a45228dcc54343 repo: upstream:gcc-tarball + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -244,9 +262,9 @@ chunks: build-mode: staging name: make prefix: /usr - ref: baserock/build-essential + ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba repo: upstream:make - + unpetrify-ref: baserock/build-essential - build-depends: - stage2-binutils - stage2-busybox @@ -262,38 +280,62 @@ chunks: build-mode: staging name: ccache prefix: /usr - ref: baserock/build-essential + ref: 0827e0b0f9c401b3aac87bb66fdeb81d6bdd6139 repo: upstream:ccache -description: | - Toolchain stratum + unpetrify-ref: baserock/build-essential +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 - Stage 1: build a minimal cross compiler with the host's tools. + show (and cleanliness) and the binaries actually still run on the host. - 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. + After build-essential is built we do another trick. See - 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). + stage2-fhs-dirs.morph for details. Basically, /bin is a symlink to - 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. + /tools/bin during stage 2 but in stage 3 it becomes a real directory - 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. + again. - 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. + ' kind: stratum name: build-essential |