summaryrefslogtreecommitdiff
path: root/strata/build-essential.morph
diff options
context:
space:
mode:
Diffstat (limited to 'strata/build-essential.morph')
-rw-r--r--strata/build-essential.morph355
1 files changed, 355 insertions, 0 deletions
diff --git a/strata/build-essential.morph b/strata/build-essential.morph
new file mode 100644
index 00000000..5ed73694
--- /dev/null
+++ b/strata/build-essential.morph
@@ -0,0 +1,355 @@
+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.
+build-depends: []
+products:
+- artifact: build-essential-minimal
+ include:
+ - fhs-dirs-.*
+ - busybox-.*
+ - eglibc-nss
+chunks:
+- name: stage1-binutils
+ morph: strata/build-essential/stage1-binutils.morph
+ repo: upstream:binutils-redhat
+ ref: 987eb543a034cddc4eeb103f08f566f24a5f964a
+ unpetrify-ref: baserock/build-essential
+ build-depends: []
+ build-mode: bootstrap
+ prefix: /tools
+- name: stage1-gcc
+ morph: strata/build-essential/stage1-gcc.morph
+ 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
+ morph: strata/build-essential/stage2-linux-api-headers.morph
+ repo: upstream:linux
+ ref: eff825d6e284eb0fb04b434429a3e3b2e10cabf8
+ unpetrify-ref: baserock/build-essential
+ build-depends:
+ - stage1-binutils
+ - stage1-gcc
+ build-mode: bootstrap
+ prefix: /tools
+- name: stage2-eglibc
+ morph: strata/build-essential/stage2-eglibc.morph
+ 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
+ morph: strata/build-essential/stage2-binutils.morph
+ 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
+ morph: strata/build-essential/stage2-gcc-fixed-headers.morph
+ 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
+ morph: strata/build-essential/stage2-gcc.morph
+ 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
+ morph: strata/build-essential/stage2-busybox.morph
+ 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
+ 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
+ morph: strata/build-essential/stage2-gawk.morph
+ 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
+ morph: strata/build-essential/stage2-make.morph
+ 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
+ morph: strata/build-essential/stage2-reset-specs.morph
+ 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
+ morph: strata/build-essential/fhs-dirs.morph
+ 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
+ morph: strata/build-essential/linux-api-headers.morph
+ 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
+ morph: strata/build-essential/eglibc.morph
+ 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
+ morph: strata/build-essential/zlib.morph
+ 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
+ morph: strata/build-essential/binutils.morph
+ 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
+ morph: strata/build-essential/busybox.morph
+ 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
+ morph: strata/build-essential/gawk.morph
+ 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
+ morph: strata/build-essential/gcc.morph
+ 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
+ morph: strata/build-essential/make.morph
+ 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
+ morph: strata/build-essential/ccache.morph
+ 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