From d3a5f948cabd9d4440e5b13b7daa2ced51030b8c Mon Sep 17 00:00:00 2001 From: Richard Maw Date: Thu, 15 Aug 2013 16:08:47 +0000 Subject: Rework to allow a read-only rootfs The diff is unfortunately useless as the build-essential has lost all formatting, but apart from the usual changes to use different branches, two new chunks have been added. Before stage2-gcc there is now stage2-gcc-fixed-headers, which updates stage1-gcc's internal headers to use limits from system headers. This was previously done at the beginning of stage2-gcc, but required changes to the staging area. There is now also stage2-reset-specs before stage3, which does a nasty hack to prevent gcc using the sysroot specs in the chroot. --- base-system-armv7-highbank.morph | 8 +- base-system-armv7b-highbank.morph | 8 +- base-system-x86_64-generic.morph | 8 +- bsp-armv7-highbank.morph | 2 +- bsp-armv7b-highbank.morph | 2 +- bsp-x86_64-generic.morph | 2 +- build-essential.morph | 545 ++++++++++++++++++-------------------- core.morph | 2 +- foundation.morph | 2 +- 9 files changed, 279 insertions(+), 300 deletions(-) diff --git a/base-system-armv7-highbank.morph b/base-system-armv7-highbank.morph index a317f6a0..37985bc6 100644 --- a/base-system-armv7-highbank.morph +++ b/base-system-armv7-highbank.morph @@ -6,16 +6,16 @@ arch: armv7 strata: - morph: build-essential repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: core repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: foundation repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: bsp-armv7-highbank repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area configuration-extensions: - set-hostname - ssh diff --git a/base-system-armv7b-highbank.morph b/base-system-armv7b-highbank.morph index ce86b415..d6a4141b 100644 --- a/base-system-armv7b-highbank.morph +++ b/base-system-armv7b-highbank.morph @@ -6,16 +6,16 @@ arch: armv7b strata: - morph: build-essential repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: core repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: foundation repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: bsp-armv7b-highbank repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area configuration-extensions: - set-hostname - ssh diff --git a/base-system-x86_64-generic.morph b/base-system-x86_64-generic.morph index 89e7f397..7950ee3d 100644 --- a/base-system-x86_64-generic.morph +++ b/base-system-x86_64-generic.morph @@ -6,16 +6,16 @@ arch: x86_64 strata: - morph: build-essential repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: core repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: foundation repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area - morph: bsp-x86_64-generic repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area configuration-extensions: - set-hostname - ssh diff --git a/bsp-armv7-highbank.morph b/bsp-armv7-highbank.morph index a3eaf2dc..8e23c69e 100644 --- a/bsp-armv7-highbank.morph +++ b/bsp-armv7-highbank.morph @@ -3,7 +3,7 @@ description: The platform dependent components required to boot an ARM highbank kind: stratum build-depends: - repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area morph: core chunks: - name: linux diff --git a/bsp-armv7b-highbank.morph b/bsp-armv7b-highbank.morph index 0a921f9d..ae41a6a7 100644 --- a/bsp-armv7b-highbank.morph +++ b/bsp-armv7b-highbank.morph @@ -3,7 +3,7 @@ description: The platform dependent components required to boot an ARM highbank kind: stratum build-depends: - repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area morph: core chunks: - name: linux diff --git a/bsp-x86_64-generic.morph b/bsp-x86_64-generic.morph index 4f2ad85b..58845629 100644 --- a/bsp-x86_64-generic.morph +++ b/bsp-x86_64-generic.morph @@ -4,7 +4,7 @@ description: The set of platform specific components required for booting a 64-b kind: stratum build-depends: - repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area morph: core chunks: - name: linux diff --git a/build-essential.morph b/build-essential.morph index f4708e3d..4454bdbd 100644 --- a/build-essential.morph +++ b/build-essential.morph @@ -1,287 +1,266 @@ name: build-essential description: Toolchain stratum kind: stratum - chunks: - # 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. - - - name: stage1-binutils - repo: upstream:binutils-redhat - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: [] - - - name: stage1-gcc - repo: upstream:gcc-tarball - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - # 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). - - - name: stage2-linux-api-headers - repo: upstream:linux - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - - name: stage2-eglibc - repo: upstream:eglibc2 - ref: baserock/2.15-build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-linux-api-headers - - - name: stage2-binutils - repo: upstream:binutils-redhat - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-eglibc - - - name: stage2-gcc - repo: upstream:gcc-tarball - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-eglibc - - - name: stage2-busybox - repo: upstream:busybox - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-eglibc - - - name: stage2-fhs-dirs - repo: baserock:baserock/fhs-dirs - ref: master - build-mode: bootstrap - prefix: /tools - build-depends: [] - - - name: stage2-gawk - repo: upstream:gawk - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-eglibc - - - name: stage2-make - repo: upstream:make - ref: baserock/build-essential - build-mode: bootstrap - prefix: /tools - build-depends: - - stage1-binutils - - stage1-gcc - - stage2-eglibc - - # 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. - - - name: fhs-dirs - repo: baserock:baserock/fhs-dirs - ref: master - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - - name: linux-api-headers - repo: upstream:linux - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - - name: eglibc - repo: upstream:eglibc2 - ref: baserock/2.15-build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - linux-api-headers - - - name: zlib - repo: upstream:zlib - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - - name: binutils - repo: upstream:binutils-redhat - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - zlib - - - name: busybox - repo: upstream:busybox - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - - name: gawk - repo: upstream:gawk - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - - name: gcc - repo: upstream:gcc-tarball - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - zlib - - - name: make - repo: upstream:make - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - # Extras that need to be in build-essential but don't need bootstrapping. - - - name: ccache - repo: upstream:ccache - ref: baserock/build-essential - build-mode: staging - prefix: /usr - build-depends: - - stage2-binutils - - stage2-busybox - - stage2-eglibc - - stage2-fhs-dirs - - stage2-gawk - - stage2-gcc - - stage2-linux-api-headers - - stage2-make - - eglibc - - zlib +- name: stage1-binutils + repo: upstream:binutils-redhat + ref: baserock/build-essential + build-mode: bootstrap + prefix: /tools + build-depends: [] +- name: stage1-gcc + repo: upstream:gcc-tarball + ref: baserock/build-essential + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils +- name: stage2-linux-api-headers + repo: upstream:linux + ref: baserock/build-essential + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc +- name: stage2-eglibc + repo: upstream:eglibc2 + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers +- name: stage2-binutils + repo: upstream:binutils-redhat + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc +- name: stage2-gcc-fixed-headers + repo: upstream:gcc-tarball + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc +- name: stage2-gcc + repo: upstream:gcc-tarball + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc + - stage2-gcc-fixed-headers +- name: stage2-busybox + repo: upstream:busybox + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc +- name: stage2-fhs-dirs + repo: baserock:baserock/fhs-dirs + ref: master + build-mode: bootstrap + prefix: /tools + build-depends: [] +- name: stage2-gawk + repo: upstream:gawk + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc +- name: stage2-make + repo: upstream:make + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-eglibc +- name: stage2-reset-specs + repo: upstream:eglibc2 + ref: baserock/richardmaw/S8564/ro-staging-area + build-mode: bootstrap + prefix: /tools + build-depends: + - stage1-binutils + - stage1-gcc + - stage2-linux-api-headers + - stage2-eglibc +- name: fhs-dirs + repo: baserock:baserock/fhs-dirs + ref: master + build-mode: staging + prefix: /usr + build-depends: + - stage2-binutils + - stage2-busybox + - stage2-eglibc + - stage2-fhs-dirs + - stage2-gawk + - stage2-gcc + - stage2-linux-api-headers + - stage2-make + - stage2-reset-specs +- name: linux-api-headers + repo: upstream:linux + ref: baserock/build-essential + build-mode: staging + prefix: /usr + build-depends: + - stage2-binutils + - stage2-busybox + - stage2-eglibc + - stage2-fhs-dirs + - stage2-gawk + - stage2-gcc + - stage2-linux-api-headers + - stage2-make + - stage2-reset-specs +- name: eglibc + repo: upstream:eglibc2 + ref: baserock/2.15-build-essential + build-mode: staging + prefix: /usr + 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 +- name: zlib + repo: upstream:zlib + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: binutils + repo: upstream:binutils-redhat + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: busybox + repo: upstream:busybox + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: gawk + repo: upstream:gawk + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: gcc + repo: upstream:gcc-tarball + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: make + repo: upstream:make + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 +- name: ccache + repo: upstream:ccache + ref: baserock/build-essential + build-mode: staging + prefix: /usr + 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 diff --git a/core.morph b/core.morph index 435bd54c..e6cd5eae 100644 --- a/core.morph +++ b/core.morph @@ -4,7 +4,7 @@ description: Core components of a Baserock base system that are build tools requ kind: stratum build-depends: - repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area morph: build-essential chunks: - name: cmake diff --git a/foundation.morph b/foundation.morph index 329fb35b..c4cc1946 100644 --- a/foundation.morph +++ b/foundation.morph @@ -3,7 +3,7 @@ kind: stratum description: Basic userland runtime system build-depends: - repo: baserock:baserock/morphs - ref: master + ref: baserock/richardmaw/S8564/ro-staging-area morph: core chunks: - name: attr -- cgit v1.2.1