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 #39053
This commit is contained in:
parent
ff591b6dc0
commit
6162637762
@ -15,6 +15,7 @@ matrix:
|
||||
# Linux builders, all docker images
|
||||
- env: IMAGE=arm-android DEPLOY=1
|
||||
- env: IMAGE=cross DEPLOY=1
|
||||
- env: IMAGE=linux-tested-targets DEPLOY=1
|
||||
- env: IMAGE=dist-arm-linux DEPLOY=1
|
||||
- env: IMAGE=dist-armv7-aarch64-linux DEPLOY=1
|
||||
- env: IMAGE=dist-freebsd DEPLOY=1
|
||||
@ -32,7 +33,6 @@ matrix:
|
||||
- env: IMAGE=x86_64-gnu-nopt
|
||||
- env: IMAGE=x86_64-gnu-make
|
||||
- env: IMAGE=x86_64-gnu-llvm-3.7 ALLOW_PR=1 RUST_BACKTRACE=1
|
||||
- env: IMAGE=x86_64-musl DEPLOY=1
|
||||
- env: IMAGE=x86_64-gnu-distcheck
|
||||
|
||||
# OSX builders
|
||||
|
@ -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
|
64
src/ci/docker/linux-tested-targets/build-musl.sh
Normal file
64
src/ci/docker/linux-tested-targets/build-musl.sh
Normal file
@ -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
|
@ -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
|
||||
};
|
@ -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
|
@ -8,8 +8,9 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(cfg_target_feature)]
|
||||
|
||||
|
||||
#[cfg(any(not(target_arch = "x86"), target_feature = "sse2"))]
|
||||
fn main() {
|
||||
if let Ok(x) = "3.1415".parse::<f64>() {
|
||||
assert_eq!(false, x <= 0.0);
|
||||
@ -21,3 +22,6 @@ fn main() {
|
||||
assert_eq!(8.1415, { x += 5.0; x });
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(target_arch = "x86", not(target_feature = "sse2")))]
|
||||
fn main() {}
|
||||
|
@ -10,9 +10,16 @@
|
||||
|
||||
#![feature(cfg_target_feature)]
|
||||
|
||||
pub fn main() {
|
||||
use std::env;
|
||||
|
||||
fn main() {
|
||||
// Skip this tests on i586-unknown-linux-gnu where sse2 is disabled
|
||||
let real_target = env::var("TARGET").unwrap();
|
||||
if real_target.contains("i586") {
|
||||
return
|
||||
}
|
||||
if cfg!(any(target_arch = "x86", target_arch = "x86_64")) {
|
||||
assert!(cfg!(target_feature = "sse2"),
|
||||
"SSE2 was not detected as available on an x86 platform");
|
||||
"SSE2 was not detected as available on an x86 platform");
|
||||
}
|
||||
}
|
||||
|
@ -319,6 +319,10 @@ pub fn run_tests(config: &Config) {
|
||||
// Prevent issue #21352 UAC blocking .exe containing 'patch' etc. on Windows
|
||||
// If #11207 is resolved (adding manifest to .exe) this becomes unnecessary
|
||||
env::set_var("__COMPAT_LAYER", "RunAsInvoker");
|
||||
|
||||
// Let tests know which target they're running as
|
||||
env::set_var("TARGET", &config.target);
|
||||
|
||||
let res = test::run_tests_console(&opts, tests.into_iter().collect());
|
||||
match res {
|
||||
Ok(true) => {}
|
||||
|
@ -12,39 +12,44 @@ use std::env;
|
||||
use common::Config;
|
||||
|
||||
/// Conversion table from triple OS name to Rust SYSNAME
|
||||
const OS_TABLE: &'static [(&'static str, &'static str)] = &[("android", "android"),
|
||||
("bitrig", "bitrig"),
|
||||
("darwin", "macos"),
|
||||
("dragonfly", "dragonfly"),
|
||||
("freebsd", "freebsd"),
|
||||
("haiku", "haiku"),
|
||||
("ios", "ios"),
|
||||
("linux", "linux"),
|
||||
("mingw32", "windows"),
|
||||
("netbsd", "netbsd"),
|
||||
("openbsd", "openbsd"),
|
||||
("win32", "windows"),
|
||||
("windows", "windows"),
|
||||
("solaris", "solaris"),
|
||||
("emscripten", "emscripten")];
|
||||
const OS_TABLE: &'static [(&'static str, &'static str)] = &[
|
||||
("android", "android"),
|
||||
("bitrig", "bitrig"),
|
||||
("darwin", "macos"),
|
||||
("dragonfly", "dragonfly"),
|
||||
("freebsd", "freebsd"),
|
||||
("haiku", "haiku"),
|
||||
("ios", "ios"),
|
||||
("linux", "linux"),
|
||||
("mingw32", "windows"),
|
||||
("netbsd", "netbsd"),
|
||||
("openbsd", "openbsd"),
|
||||
("win32", "windows"),
|
||||
("windows", "windows"),
|
||||
("solaris", "solaris"),
|
||||
("emscripten", "emscripten"),
|
||||
];
|
||||
|
||||
const ARCH_TABLE: &'static [(&'static str, &'static str)] = &[("aarch64", "aarch64"),
|
||||
("amd64", "x86_64"),
|
||||
("arm", "arm"),
|
||||
("arm64", "aarch64"),
|
||||
("hexagon", "hexagon"),
|
||||
("i386", "x86"),
|
||||
("i686", "x86"),
|
||||
("mips", "mips"),
|
||||
("msp430", "msp430"),
|
||||
("powerpc", "powerpc"),
|
||||
("powerpc64", "powerpc64"),
|
||||
("s390x", "s390x"),
|
||||
("sparc", "sparc"),
|
||||
("x86_64", "x86_64"),
|
||||
("xcore", "xcore"),
|
||||
("asmjs", "asmjs"),
|
||||
("wasm32", "wasm32")];
|
||||
const ARCH_TABLE: &'static [(&'static str, &'static str)] = &[
|
||||
("aarch64", "aarch64"),
|
||||
("amd64", "x86_64"),
|
||||
("arm", "arm"),
|
||||
("arm64", "aarch64"),
|
||||
("hexagon", "hexagon"),
|
||||
("i386", "x86"),
|
||||
("i586", "x86"),
|
||||
("i686", "x86"),
|
||||
("mips", "mips"),
|
||||
("msp430", "msp430"),
|
||||
("powerpc", "powerpc"),
|
||||
("powerpc64", "powerpc64"),
|
||||
("s390x", "s390x"),
|
||||
("sparc", "sparc"),
|
||||
("x86_64", "x86_64"),
|
||||
("xcore", "xcore"),
|
||||
("asmjs", "asmjs"),
|
||||
("wasm32", "wasm32"),
|
||||
];
|
||||
|
||||
pub fn get_os(triple: &str) -> &'static str {
|
||||
for &(triple_os, os) in OS_TABLE {
|
||||
|
Loading…
x
Reference in New Issue
Block a user