diff --git a/.travis.yml b/.travis.yml index ff3c1e07..28478f22 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,12 @@ matrix: - os: osx rust: stable env: TARGET=x86_64-apple-darwin + - os: linux + rust: stable + env: + - TARGET=arm-unknown-linux-gnueabihf + - CC_arm_unknown_linux_gnueabihf=/usr/bin/arm-linux-gnueabihf-gcc-4.8 + - CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc-4.8 # Minimum Rust supported channel. - os: linux @@ -39,15 +45,10 @@ matrix: - cargo install --debug --force rustfmt-nightly script: cargo fmt -- --check -addons: - apt: - packages: - # needed for i686-unknown-linux-gnu target - - gcc-multilib - # needed for musl targets - - musl-tools - # needed to build deb packages - - fakeroot +sudo: required + +before_install: + - ci/before_install.bash env: global: @@ -62,11 +63,7 @@ install: - if [[ $TRAVIS_OS_NAME = linux && $HOST != $TARGET ]]; then rustup target add $TARGET; fi script: - # Incorporate TARGET env var to the build and test process - - cargo build --target $TARGET --verbose - - cargo test --target $TARGET --verbose - # Run 'bat' on its own source code and the README - - cargo run --target $TARGET -- src/main.rs README.md --paging=never + - ci/script.bash before_deploy: - bash ci/before_deploy.bash diff --git a/ci/before_deploy.bash b/ci/before_deploy.bash index 42dd3986..74ed6040 100755 --- a/ci/before_deploy.bash +++ b/ci/before_deploy.bash @@ -11,17 +11,24 @@ pack() { local tempdir local out_dir local package_name + local gcc_prefix tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp) out_dir=$(pwd) package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET" + if [[ $TARGET == "arm-unknown-linux-gnueabihf" ]]; then + gcc_prefix="arm-linux-gnueabihf-" + else + gcc_prefix="" + fi + # create a "staging" directory mkdir "$tempdir/$package_name" # copying the main binary cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/" - strip "$tempdir/$package_name/$PROJECT_NAME" + "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME" # readme and license cp README.md "$tempdir/$package_name" @@ -50,8 +57,8 @@ make_deb() { architecture=i386 ;; *) - echo "ERROR: unknown target" >&2 - return 1 + echo "make_deb: skipping target '${TARGET}'" >&2 + return 0 ;; esac version=${TRAVIS_TAG#v} diff --git a/ci/before_install.bash b/ci/before_install.bash new file mode 100755 index 00000000..709be7d5 --- /dev/null +++ b/ci/before_install.bash @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -ex + +if [ "$TRAVIS_OS_NAME" != linux ]; then + exit 0 +fi + +sudo apt-get update + +# needed for musl targets +sudo apt-get install -y musl-tools + +# needed to build deb packages +sudo apt-get install -y fakeroot + +# needed for i686 linux gnu target +if [[ $TARGET == i686-unknown-linux-gnu ]]; then + sudo apt-get install -y gcc-multilib +fi + +# needed for cross-compiling for arm +if [[ $TARGET == arm-unknown-linux-gnueabihf ]]; then + sudo apt-get install -y \ + gcc-4.8-arm-linux-gnueabihf \ + binutils-arm-linux-gnueabihf \ + libc6-armhf-cross \ + libc6-dev-armhf-cross +fi diff --git a/ci/script.bash b/ci/script.bash new file mode 100755 index 00000000..321dcb14 --- /dev/null +++ b/ci/script.bash @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -ex + +# Incorporate TARGET env var to the build and test process +cargo build --target "$TARGET" --verbose + +# We cannot run arm executables on linux +if [[ $TARGET != arm-unknown-linux-gnueabihf ]]; then + cargo test --target "$TARGET" --verbose + + # Run 'bat' on its own source code and the README + cargo run --target "$TARGET" -- src/main.rs README.md --paging=never +fi