rust/src/ci/docker
Alex Crichton 631f761f18 travis: Update musl for i686/x86_64
This is a random stab towards #38618, no idea if it'll work. But hey more
up-to-date software is better, right?
2017-04-05 11:10:48 -07:00
..
arm-android travis: Split Android into dist/test images 2017-02-27 21:20:23 -08:00
armhf-gnu travis: Update sccache again 2017-03-24 19:00:35 -07:00
cross travis: Update sccache again 2017-03-24 19:00:35 -07:00
dist-aarch64-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-android travis: Update sccache again 2017-03-24 19:00:35 -07:00
dist-arm-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-armhf-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-armv7-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-fuchsia travis: Update sccache again 2017-03-24 19:00:35 -07:00
dist-i586-gnu-i686-musl travis: Update musl for i686/x86_64 2017-04-05 11:10:48 -07:00
dist-i686-freebsd travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-i686-linux Merge remote-tracking branch 'hub/centos5-vault' into rollup 2017-04-04 15:43:07 +02:00
dist-mips-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-mips64-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-mips64el-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-mipsel-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-powerpc-linux travis: Update sccache again 2017-03-24 19:00:35 -07:00
dist-powerpc64-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-powerpc64le-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-s390x-linux travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-x86_64-freebsd travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
dist-x86_64-linux fix rollup 2017-04-04 15:46:48 +02:00
dist-x86_64-musl travis: Update musl for i686/x86_64 2017-04-05 11:10:48 -07:00
dist-x86_64-netbsd travis: Split all dist builders in two 2017-04-03 12:30:06 -07:00
emscripten Auto merge of #40809 - alexcrichton:update-sccache-again, r=alexcrichton 2017-03-26 01:33:39 +00:00
i686-gnu travis: Update sccache again 2017-03-24 19:00:35 -07:00
i686-gnu-nopt travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-aux travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-debug travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-distcheck travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-full-bootstrap travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-incremental travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-llvm-3.7 travis: Update sccache again 2017-03-24 19:00:35 -07:00
x86_64-gnu-nopt travis: Update sccache again 2017-03-24 19:00:35 -07:00
README.md travis: move IBM backwards in time 2017-01-28 21:25:11 -08:00
run.sh Attempt to cache git modules 2017-03-29 02:51:56 +01:00

Docker images for CI

This folder contains a bunch of docker images used by the continuous integration (CI) of Rust. An script is accompanied (run.sh) with these images to actually execute them. To test out an image execute:

./src/ci/docker/run.sh $image_name

for example:

./src/ci/docker/run.sh x86_64-gnu

Images will output artifacts in an obj dir at the root of a repository.

Cross toolchains

A number of these images take quite a long time to compile as they're building whole gcc toolchains to do cross builds with. Much of this is relatively self-explanatory but some images use crosstool-ng which isn't quite as self explanatory. Below is a description of where these *.config files come form, how to generate them, and how the existing ones were generated.

Generating a .config file

If you have a linux-cross image lying around you can use that and skip the next two steps.

  • First we spin up a container and copy build_toolchain_root.sh into it. All these steps are outside the container:
# Note: We use ubuntu:15.10 because that's the "base" of linux-cross Docker
# image
$ docker run -it ubuntu:15.10 bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cfbec05ed730        ubuntu:15.10        "bash"              16 seconds ago      Up 15 seconds                           drunk_murdock
$ docker cp build_toolchain_root.sh drunk_murdock:/
  • Then inside the container we build crosstool-ng by simply calling the bash script we copied in the previous step:
$ bash build_toolchain_root.sh
  • Now, inside the container run the following command to configure the toolchain. To get a clue of which options need to be changed check the next section and come back.
$ ct-ng menuconfig
  • Finally, we retrieve the .config file from the container and give it a meaningful name. This is done outside the container.
$ docker drunk_murdock:/.config arm-linux-gnueabi.config
  • Now you can shutdown the container or repeat the two last steps to generate a new .config file.

Toolchain configuration

Changes on top of the default toolchain configuration used to generate the .config files in this directory. The changes are formatted as follows:

$category > $option = $value -- $comment

arm-linux-gnueabi.config

For targets: arm-unknown-linux-gnueabi

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Target options > Target Architecture = arm
  • Target options > Architecture level = armv6 -- (+)
  • Target options > Floating point = software (no FPU) -- (*)
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 3.2.72 -- Precise kernel
  • C-library > glibc version = 2.14.1
  • C compiler > gcc version = 4.9.3
  • C compiler > C++ = ENABLE -- to cross compile LLVM

arm-linux-gnueabihf.config

For targets: arm-unknown-linux-gnueabihf

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Target options > Target Architecture = arm
  • Target options > Architecture level = armv6 -- (+)
  • Target options > Use specific FPU = vfp -- (+)
  • Target options > Floating point = hardware (FPU) -- (*)
  • Target options > Default instruction set mode = arm -- (+)
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 3.2.72 -- Precise kernel
  • C-library > glibc version = 2.14.1
  • C compiler > gcc version = 4.9.3
  • C compiler > C++ = ENABLE -- to cross compile LLVM

armv7-linux-gnueabihf.config

For targets: armv7-unknown-linux-gnueabihf

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Target options > Target Architecture = arm
  • Target options > Suffix to the arch-part = v7
  • Target options > Architecture level = armv7-a -- (+)
  • Target options > Use specific FPU = vfpv3-d16 -- (*)
  • Target options > Floating point = hardware (FPU) -- (*)
  • Target options > Default instruction set mode = thumb -- (*)
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 3.2.72 -- Precise kernel
  • C-library > glibc version = 2.14.1
  • C compiler > gcc version = 4.9.3
  • C compiler > C++ = ENABLE -- to cross compile LLVM

(*) These options have been selected to match the configuration of the arm toolchains shipped with Ubuntu 15.10 (+) These options have been selected to match the gcc flags we use to compile C libraries like jemalloc. See the mk/cfg/arm(v7)-uknown-linux-gnueabi{,hf}.mk file in Rust's source code.

aarch64-linux-gnu.config

For targets: aarch64-unknown-linux-gnu

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Target options > Target Architecture = arm
  • Target options > Bitness = 64-bit
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 4.2.6
  • C-library > glibc version = 2.17 -- aarch64 support was introduced in this version
  • C compiler > gcc version = 5.2.0
  • C compiler > C++ = ENABLE -- to cross compile LLVM

powerpc-linux-gnu.config

For targets: powerpc-unknown-linux-gnu

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Path and misc options > Patches origin = Bundled, then local
  • Path and misc options > Local patch directory = /tmp/patches
  • Target options > Target Architecture = powerpc
  • Target options > Emit assembly for CPU = power4 -- (+)
  • Target options > Tune for CPU = power6 -- (+)
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 2.6.32.68 -- ~RHEL6 kernel
  • C-library > glibc version = 2.12.2 -- ~RHEL6 glibc
  • C compiler > gcc version = 4.9.3
  • C compiler > Core gcc extra config = --with-cpu-32=power4 --with-cpu=default32 -- (+)
  • C compiler > gcc extra config = --with-cpu-32=power4 --with-cpu=default32 -- (+)
  • C compiler > C++ = ENABLE -- to cross compile LLVM

(+) These CPU options match the configuration of the toolchains in RHEL6.

powerpc64-linux-gnu.config

For targets: powerpc64-unknown-linux-gnu

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Path and misc options > Patches origin = Bundled, then local
  • Path and misc options > Local patch directory = /tmp/patches
  • Target options > Target Architecture = powerpc
  • Target options > Bitness = 64-bit
  • Target options > Emit assembly for CPU = power4 -- (+)
  • Target options > Tune for CPU = power6 -- (+)
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 2.6.32.68 -- ~RHEL6 kernel
  • C-library > glibc version = 2.12.2 -- ~RHEL6 glibc
  • C compiler > gcc version = 4.9.3
  • C compiler > C++ = ENABLE -- to cross compile LLVM

(+) These CPU options match the configuration of the toolchains in RHEL6.

s390x-linux-gnu.config

For targets: s390x-unknown-linux-gnu

  • Path and misc options > Prefix directory = /x-tools/${CT_TARGET}
  • Path and misc options > Patches origin = Bundled, then local
  • Path and misc options > Local patch directory = /build/patches
  • Target options > Target Architecture = s390
  • Target options > Bitness = 64-bit
  • Operating System > Target OS = linux
  • Operating System > Linux kernel version = 2.6.32.68 -- ~RHEL6 kernel
  • C-library > glibc version = 2.12.2 -- ~RHEL6 glibc
  • C compiler > gcc version = 4.9.3
  • C compiler > gcc extra config = --with-arch=z10 -- LLVM's minimum support
  • C compiler > C++ = ENABLE -- to cross compile LLVM