diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-01-19 15:49:29 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-01-20 08:35:46 -0800 |
| commit | 0c7117457dbefa93468f8fb1a85eba75f32e2865 (patch) | |
| tree | e57cd3d263ea0544fd17ae19045eb904b08c315a /src/ci | |
| parent | 18a39ed66e8a73afd4e4fb00ad2eb3615e3f7c3d (diff) | |
| parent | 6162637762d12760ba5b6c1e20f01298111ae8fe (diff) | |
| download | rust-0c7117457dbefa93468f8fb1a85eba75f32e2865.tar.gz rust-0c7117457dbefa93468f8fb1a85eba75f32e2865.zip | |
Rollup merge of #39068 - alexcrichton:more-small-tests, r=brson
travis: Add i586 linux and i686 musl This commit expands the existing x86_64-musl entry in the Travis matrix to also build/test i586-unknown-linux-gnu and i686-unknown-linux-musl. cc #38531 Closes #35599 Closes #39053
Diffstat (limited to 'src/ci')
| -rw-r--r-- | src/ci/docker/linux-tested-targets/Dockerfile (renamed from src/ci/docker/x86_64-musl/Dockerfile) | 25 | ||||
| -rw-r--r-- | src/ci/docker/linux-tested-targets/build-musl.sh | 64 | ||||
| -rw-r--r-- | src/ci/docker/linux-tested-targets/musl-libunwind-patch.patch | 15 | ||||
| -rw-r--r-- | src/ci/docker/x86_64-musl/build-musl.sh | 33 |
4 files changed, 96 insertions, 41 deletions
diff --git a/src/ci/docker/x86_64-musl/Dockerfile b/src/ci/docker/linux-tested-targets/Dockerfile index 11b85a6c8fd..2a43201ed0a 100644 --- a/src/ci/docker/x86_64-musl/Dockerfile +++ b/src/ci/docker/linux-tested-targets/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:16.04 RUN apt-get update && apt-get install -y --no-install-recommends \ - g++ \ + g++-multilib \ make \ file \ curl \ @@ -11,10 +11,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ cmake \ xz-utils \ sudo \ - gdb + gdb \ + patch WORKDIR /build/ -COPY build-musl.sh /build/ +COPY musl-libunwind-patch.patch build-musl.sh /build/ RUN sh /build/build-musl.sh && rm -rf /build RUN curl -OL https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \ @@ -27,9 +28,17 @@ RUN curl -L https://api.pub.build.mozilla.org/tooltool/sha512/$SCCACHE_DIGEST | tar xJf - -C /usr/local/bin --strip-components=1 ENV RUST_CONFIGURE_ARGS \ - --target=x86_64-unknown-linux-musl \ - --musl-root-x86_64=/musl-x86_64 -ENV PATH=$PATH:/musl-x86_64/bin + --target=x86_64-unknown-linux-musl,i686-unknown-linux-musl,i586-unknown-linux-gnu \ + --musl-root-x86_64=/musl-x86_64 \ + --musl-root-i686=/musl-i686 + ENV SCRIPT \ - python2.7 ../x.py test --target x86_64-unknown-linux-musl && \ - python2.7 ../x.py dist --target x86_64-unknown-linux-musl + python2.7 ../x.py test \ + --target x86_64-unknown-linux-musl \ + --target i686-unknown-linux-musl \ + --target i586-unknown-linux-gnu \ + && \ + python2.7 ../x.py dist \ + --target x86_64-unknown-linux-musl \ + --target i686-unknown-linux-musl \ + --target i586-unknown-linux-gnu diff --git a/src/ci/docker/linux-tested-targets/build-musl.sh b/src/ci/docker/linux-tested-targets/build-musl.sh new file mode 100644 index 00000000000..2382605f9bd --- /dev/null +++ b/src/ci/docker/linux-tested-targets/build-musl.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +# file at the top-level directory of this distribution and at +# http://rust-lang.org/COPYRIGHT. +# +# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +set -ex + +export CFLAGS="-fPIC" +MUSL=musl-1.1.14 +curl https://www.musl-libc.org/releases/$MUSL.tar.gz | tar xzf - +cd $MUSL +./configure --prefix=/musl-x86_64 --disable-shared +make -j10 +make install +make clean +# for i686 +CFLAGS="$CFLAGS -m32" ./configure --prefix=/musl-i686 --disable-shared --target=i686 +make -j10 +make install +cd .. + +# To build MUSL we're going to need a libunwind lying around, so acquire that +# here and build it. +curl -L https://github.com/llvm-mirror/llvm/archive/release_37.tar.gz | tar xzf - +curl -L https://github.com/llvm-mirror/libunwind/archive/release_37.tar.gz | tar xzf - + +# Whoa what's this mysterious patch we're applying to libunwind! Why are we +# swapping the values of ESP/EBP in libunwind?! +# +# Discovered in #35599 it turns out that the vanilla build of libunwind is not +# suitable for unwinding 32-bit musl. After some investigation it ended up +# looking like the register values for ESP/EBP were indeed incorrect (swapped) +# in the source. Similar commits in libunwind (r280099 and r282589) have noticed +# this for other platforms, and we just need to realize it for musl linux as +# well. +# +# More technical info can be found at #35599 +cd libunwind-release_37 +patch -Np1 < /build/musl-libunwind-patch.patch +cd .. + +mkdir libunwind-build +cd libunwind-build +cmake ../libunwind-release_37 -DLLVM_PATH=/build/llvm-release_37 \ + -DLIBUNWIND_ENABLE_SHARED=0 +make -j10 +cp lib/libunwind.a /musl-x86_64/lib + +# (Note: the next cmake call doesn't fully override the previous cached one, so remove the cached +# configuration manually. IOW, if don't do this or call make clean we'll end up building libunwind +# for x86_64 again) +rm -rf * +# for i686 +CFLAGS="$CFLAGS -m32 -g" CXXFLAGS="$CXXFLAGS -m32 -g" cmake ../libunwind-release_37 \ + -DLLVM_PATH=/build/llvm-release_37 \ + -DLIBUNWIND_ENABLE_SHARED=0 +make -j10 +cp lib/libunwind.a /musl-i686/lib diff --git a/src/ci/docker/linux-tested-targets/musl-libunwind-patch.patch b/src/ci/docker/linux-tested-targets/musl-libunwind-patch.patch new file mode 100644 index 00000000000..99cd685b72d --- /dev/null +++ b/src/ci/docker/linux-tested-targets/musl-libunwind-patch.patch @@ -0,0 +1,15 @@ +diff --git a/include/libunwind.h b/include/libunwind.h +index c5b9633..1360eb2 100644 +--- a/include/libunwind.h ++++ b/include/libunwind.h +@@ -151,8 +151,8 @@ enum { + UNW_X86_ECX = 1, + UNW_X86_EDX = 2, + UNW_X86_EBX = 3, +- UNW_X86_EBP = 4, +- UNW_X86_ESP = 5, ++ UNW_X86_ESP = 4, ++ UNW_X86_EBP = 5, + UNW_X86_ESI = 6, + UNW_X86_EDI = 7 + }; diff --git a/src/ci/docker/x86_64-musl/build-musl.sh b/src/ci/docker/x86_64-musl/build-musl.sh deleted file mode 100644 index 2bfbd646b75..00000000000 --- a/src/ci/docker/x86_64-musl/build-musl.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -# Copyright 2016 The Rust Project Developers. See the COPYRIGHT -# file at the top-level directory of this distribution and at -# http://rust-lang.org/COPYRIGHT. -# -# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -# option. This file may not be copied, modified, or distributed -# except according to those terms. - -set -ex - -export CFLAGS="-fPIC" -MUSL=musl-1.1.14 -curl https://www.musl-libc.org/releases/$MUSL.tar.gz | tar xzf - -cd $MUSL -./configure --prefix=/musl-x86_64 --disable-shared -make -j10 -make install -make clean -cd .. - -# To build MUSL we're going to need a libunwind lying around, so acquire that -# here and build it. -curl -L https://github.com/llvm-mirror/llvm/archive/release_37.tar.gz | tar xzf - -curl -L https://github.com/llvm-mirror/libunwind/archive/release_37.tar.gz | tar xzf - -mkdir libunwind-build -cd libunwind-build -cmake ../libunwind-release_37 -DLLVM_PATH=/build/llvm-release_37 \ - -DLIBUNWIND_ENABLE_SHARED=0 -make -j10 -cp lib/libunwind.a /musl-x86_64/lib |
