aboutsummaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
Diffstat (limited to 'ci')
-rw-r--r--ci/before_deploy.sh5
-rw-r--r--ci/install.sh66
-rw-r--r--ci/script.sh40
3 files changed, 74 insertions, 37 deletions
diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh
index 6493f96..099ae65 100644
--- a/ci/before_deploy.sh
+++ b/ci/before_deploy.sh
@@ -2,6 +2,9 @@
set -ex
+# Generate artifacts for release
+cargo build --target $TARGET --release
+
# create a "staging" directory
mkdir staging
@@ -10,5 +13,5 @@ cp target/$TARGET/release/ilc* staging
cd staging
-# release tarball will look like 'rust-everywhere-v1.2.3-x86_64-unknown-linux-gnu.tar.gz'
+# release tarball will look like 'ilc-unknown-linux-gnu.tar.gz'
tar czf ../${PROJECT_NAME}-${TARGET}.tar.gz *
diff --git a/ci/install.sh b/ci/install.sh
index e4bd198..9d56f57 100644
--- a/ci/install.sh
+++ b/ci/install.sh
@@ -2,32 +2,49 @@
set -ex
-case $TARGET in
- # Install standard libraries needed for cross compilation
- arm-unknown-linux-gnueabihf | \
- i686-apple-darwin | \
- i686-unknown-linux-gnu | \
- x86_64-unknown-linux-musl)
- if [ "$TARGET" = "arm-unknown-linux-gnueabihf" ]; then
- # information about the cross compiler
- arm-linux-gnueabihf-gcc -v
-
- # tell cargo which linker to use for cross compilation
- mkdir -p .cargo
- cat >.cargo/config <<EOF
+# Install multirust
+git clone https://github.com/brson/multirust
+pushd multirust
+./build.sh
+./install.sh --prefix=~/multirust
+multirust default $CHANNEL
+rustc -V
+cargo -V
+popd
+
+case "$TRAVIS_OS_NAME" in
+ linux)
+ host=x86_64-unknown-linux-gnu
+ ;;
+ osx)
+ host=x86_64-apple-darwin
+ ;;
+esac
+
+# Install standard libraries needed for cross compilation
+if [ "$host" != "$TARGET" ]; then
+ if [ "$TARGET" = "arm-unknown-linux-gnueabihf" ]; then
+ # information about the cross compiler
+ arm-linux-gnueabihf-gcc -v
+
+ # tell cargo which linker to use for cross compilation
+ mkdir -p .cargo
+ cat >>.cargo/config <<EOF
[target.$TARGET]
linker = "arm-linux-gnueabihf-gcc"
EOF
+ fi
+
+ if [ "$CHANNEL" = "nightly" ]; then
+ multirust add-target nightly $TARGET
+ else
+ if [ "$CHANNEL" = "stable" ]; then
+ # e.g. 1.6.0
+ version=$(rustc -V | cut -d' ' -f2)
+ else
+ version=beta
fi
- # e.g. 1.6.0
- # doesn't work for nightly
- # version=$(rustc -V | cut -d' ' -f2)
- version=$(rustc -V | cut -d' ' -f2 | cut -d'-' -f2)
-
- if [ "$TARGET" = "x86_64-unknown-linux-musl" ]; then
- version="nightly"
- fi
tarball=rust-std-${version}-${TARGET}
curl -Os http://static.rust-lang.org/dist/${tarball}.tar.gz
@@ -38,10 +55,7 @@ EOF
rm -r ${tarball}
rm ${tarball}.tar.gz
- ;;
- # Nothing to do for native builds
- *)
- ;;
-esac
+ fi
+fi
# TODO if you need to install extra stuff add it here
diff --git a/ci/script.sh b/ci/script.sh
index 3dd9a1b..7dbd352 100644
--- a/ci/script.sh
+++ b/ci/script.sh
@@ -2,35 +2,55 @@
set -ex
-# TODO modify this phase as you see fit
# PROTIP Always pass `--target $TARGET` to cargo commands, this makes cargo output build artifacts
# to target/$TARGET/{debug,release} which can reduce the number of needed conditionals in the
# `before_deploy`/packaging phase
+case "$TRAVIS_OS_NAME" in
+ linux)
+ host=x86_64-unknown-linux-gnu
+ ;;
+ osx)
+ host=x86_64-apple-darwin
+ ;;
+esac
+
+# NOTE Workaround for rust-lang/rust#31907 - disable doc tests when cross compiling
+# This has been fixed in the nightly channel but it would take a while to reach the other channels
+if [ "$host" != "$TARGET" ] && [ "$CHANNEL" != "nightly" ]; then
+ if [ "$TRAVIS_OS_NAME" = "osx" ]; then
+ brew install gnu-sed --default-names
+ fi
+
+ find src -name '*.rs' -type f | xargs sed -i -e 's:\(//.\s*```\):\1 ignore,:g'
+fi
+
case $TARGET in
# use an emulator to run the cross compiled binaries
arm-unknown-linux-gnueabihf)
# build tests but don't run them
- cargo test --target $TARGET --no-run
+ # cargo test --target $TARGET --no-run
# run tests in emulator
- find target/$TARGET/debug -maxdepth 1 -executable -type f | \
- xargs qemu-arm -L /usr/arm-linux-gnueabihf
+ # find target/$TARGET/debug -maxdepth 1 -executable -type f \
+ # -exec qemu-arm -L /usr/arm-linux-gnueabihf '{}' ';'
# build the main executable
- cargo build --target $TARGET
+ cargo build --target $TARGET --verbose
- # run the main executable using the emulator
+ # sanity check the file type
+ file target/$TARGET/debug/ilc
qemu-arm -L /usr/arm-linux-gnueabihf target/$TARGET/debug/ilc -V
;;
*)
cargo build --target $TARGET --verbose
+
+ # sanity check the file type
+ file target/$TARGET/debug/ilc
+ target/$TARGET/debug/ilc -V
+
# this isn't even a temporary solution. :(
# cargo test --target $TARGET --verbose
;;
esac
-cargo build --target $TARGET --release
-
-# sanity check the file type
-file target/$TARGET/release/ilc