summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Sherwood <paul.sherwood@codethink.co.uk>2015-03-19 21:49:12 +0000
committerPaul Sherwood <paul.sherwood@codethink.co.uk>2015-03-19 21:49:12 +0000
commitae60ae2d64dba72c35377a7f8a22d02894804553 (patch)
tree0328949b4f456936f351bc3532ec790e80110fd3
parenta3781d3ad5aaeda64b0771914a4e56d1f278465b (diff)
downloaddefinitions-baserock/ps/separate-bootstrap-stratum.tar.gz
WIP separate bootstrap into its own stratumbaserock/ps/separate-bootstrap-stratum
Change-Id: Iecc8aec1ab6596c5f215e97a52149902d4ed0267
-rw-r--r--strata/build-essential-bootstrap.morph205
-rw-r--r--strata/build-essential.morph297
2 files changed, 208 insertions, 294 deletions
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