name: 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
  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 for details. Basically, /bin is a symlink to
  /tools/bin during stage 2 but in stage 3 it becomes a real directory
  again.
products:
- artifact: build-essential-minimal
  include:
  - fhs-dirs-.*
  - busybox-.*
  - glibc-nss
contents:
- name: stage1-binutils
  repo: upstream:binutils-redhat
  ref: 987eb543a034cddc4eeb103f08f566f24a5f964a
  unpetrify-ref: baserock/build-essential
  build-mode: bootstrap
  prefix: /tools
- name: stage1-gcc
  repo: upstream:gcc-tarball
  ref: 999c918a7ad32ad436395666def22ab90b3447fe
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  build-mode: bootstrap
  prefix: /tools
- name: stage2-linux-api-headers
  repo: upstream:linux
  ref: df2e1b9168a7ab5dd8149e38b5ac70cdef86d1fa
  unpetrify-ref: baserock/v3.8
  build-depends:
  - stage1-binutils
  - stage1-gcc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-glibc
  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-binutils
  repo: upstream:binutils-redhat
  ref: 987eb543a034cddc4eeb103f08f566f24a5f964a
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-gcc-fixed-headers
  repo: upstream:gcc-tarball
  ref: 999c918a7ad32ad436395666def22ab90b3447fe
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-gcc
  repo: upstream:gcc-tarball
  ref: 999c918a7ad32ad436395666def22ab90b3447fe
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  - stage2-gcc-fixed-headers
  build-mode: bootstrap
  prefix: /tools
- name: stage2-busybox
  repo: upstream:busybox
  ref: 8a801e0f024f1385d8e989b80b90443546bceae7
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-fake-bash
  repo: upstream:bash
  ref: 3590145af6f1c9fa321dff231f69ae696e7e740b
  unpetrify-ref: baserock/bash-4.3-patch-27
  build-depends:
  - stage2-busybox
  build-mode: bootstrap
  prefix: /tools
- name: stage2-fhs-dirs
  repo: baserock:baserock/fhs-dirs
  ref: 41bbb474cd4647ee715bc94c21c161d12a20deb4
  unpetrify-ref: master
  build-mode: bootstrap
  prefix: /tools
- name: stage2-gawk
  repo: upstream:gawk
  ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-make
  repo: upstream:make
  ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba
  unpetrify-ref: baserock/build-essential
  build-depends:
  - stage1-binutils
  - stage1-gcc
  - stage2-glibc
  build-mode: bootstrap
  prefix: /tools
- name: stage2-reset-specs
  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
- name: fhs-dirs
  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
  repo: upstream:linux
  ref: df2e1b9168a7ab5dd8149e38b5ac70cdef86d1fa
  unpetrify-ref: baserock/v3.8
  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
  repo: upstream:glibc
  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
    glibc-libs: build-essential-minimal
    glibc-nss: build-essential-runtime
- name: zlib
  repo: upstream:zlib
  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
- name: binutils
  repo: upstream:binutils-redhat
  ref: 987eb543a034cddc4eeb103f08f566f24a5f964a
  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
- name: busybox
  repo: upstream:busybox
  ref: 8a801e0f024f1385d8e989b80b90443546bceae7
  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
- name: gawk
  repo: upstream:gawk
  ref: 6a0eb04c3d2ac24d80d505b42a8f67799487d133
  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
- name: gcc
  repo: upstream:gcc-tarball
  ref: 5c08cea34d5562dc828b85c7c02519246823aaf0
  unpetrify-ref: baserock/build-essential-4.7
  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
  artifacts:
    gcc-libs: build-essential-minimal
- name: make
  repo: upstream:make
  ref: 56968f58301e6e5157cf4c8b6deefbaff2955eba
  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
- name: ccache
  repo: upstream:ccache
  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
