on master help sign in
Add arm as a compile target
commit76be0d3933bc3f86a8537f2319e21a74d6b5a354 authorsharkdp <davidpeter@web.de> dateSat 18 Aug 2018, 21:51 (8 years ago) parente5b8c44
4 files changed+64−17
.travis.yml+11−14 ci/before_deploy.bash+10−3 ci/before_install.bash+29 ci/script.bash+14
.travis.yml+11−14
@@ -17,6 +17,12 @@ matrix:
1717 - os: osx
1818 rust: stable
1919 env: TARGET=x86_64-apple-darwin
20+ - os: linux
21+ rust: stable
22+ env:
23+ - TARGET=arm-unknown-linux-gnueabihf
24+ - CC_arm_unknown_linux_gnueabihf=/usr/bin/arm-linux-gnueabihf-gcc-4.8
25+ - CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc-4.8
2026
2127 # Minimum Rust supported channel.
2228 - os: linux
@@ -39,15 +45,10 @@ matrix:
3945 - cargo install --debug --force rustfmt-nightly
4046 script: cargo fmt -- --check
4147
42−addons:
43− apt:
44− packages:
45− # needed for i686-unknown-linux-gnu target
46− - gcc-multilib
47− # needed for musl targets
48− - musl-tools
49− # needed to build deb packages
50− - fakeroot
48+sudo: required
49+
50+before_install:
51+ - ci/before_install.bash
5152
5253env:
5354 global:
@@ -62,11 +63,7 @@ install:
6263 - if [[ $TRAVIS_OS_NAME = linux && $HOST != $TARGET ]]; then rustup target add $TARGET; fi
6364
6465script:
65− # Incorporate TARGET env var to the build and test process
66− - cargo build --target $TARGET --verbose
67− - cargo test --target $TARGET --verbose
68− # Run 'bat' on its own source code and the README
69− - cargo run --target $TARGET -- src/main.rs README.md --paging=never
66+ - ci/script.bash
7067
7168before_deploy:
7269 - bash ci/before_deploy.bash
ci/before_deploy.bash+10−3
@@ -11,17 +11,24 @@ pack() {
1111 local tempdir
1212 local out_dir
1313 local package_name
14+ local gcc_prefix
1415
1516 tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t tmp)
1617 out_dir=$(pwd)
1718 package_name="$PROJECT_NAME-$TRAVIS_TAG-$TARGET"
1819
20+ if [[ $TARGET == "arm-unknown-linux-gnueabihf" ]]; then
21+ gcc_prefix="arm-linux-gnueabihf-"
22+ else
23+ gcc_prefix=""
24+ fi
25+
1926 # create a "staging" directory
2027 mkdir "$tempdir/$package_name"
2128
2229 # copying the main binary
2330 cp "target/$TARGET/release/$PROJECT_NAME" "$tempdir/$package_name/"
24− strip "$tempdir/$package_name/$PROJECT_NAME"
31+ "${gcc_prefix}"strip "$tempdir/$package_name/$PROJECT_NAME"
2532
2633 # readme and license
2734 cp README.md "$tempdir/$package_name"
@@ -50,8 +57,8 @@ make_deb() {
5057 architecture=i386
5158 ;;
5259 *)
53− echo "ERROR: unknown target" >&2
54− return 1
60+ echo "make_deb: skipping target '${TARGET}'" >&2
61+ return 0
5562 ;;
5663 esac
5764 version=${TRAVIS_TAG#v}
ci/before_install.bashnew file+29
@@ -0,0 +1,29 @@
1+#!/usr/bin/env bash
2+
3+set -ex
4+
5+if [ "$TRAVIS_OS_NAME" != linux ]; then
6+ exit 0
7+fi
8+
9+sudo apt-get update
10+
11+# needed for musl targets
12+sudo apt-get install -y musl-tools
13+
14+# needed to build deb packages
15+sudo apt-get install -y fakeroot
16+
17+# needed for i686 linux gnu target
18+if [[ $TARGET == i686-unknown-linux-gnu ]]; then
19+ sudo apt-get install -y gcc-multilib
20+fi
21+
22+# needed for cross-compiling for arm
23+if [[ $TARGET == arm-unknown-linux-gnueabihf ]]; then
24+ sudo apt-get install -y \
25+ gcc-4.8-arm-linux-gnueabihf \
26+ binutils-arm-linux-gnueabihf \
27+ libc6-armhf-cross \
28+ libc6-dev-armhf-cross
29+fi
ci/script.bashnew file+14
@@ -0,0 +1,14 @@
1+#!/usr/bin/env bash
2+
3+set -ex
4+
5+# Incorporate TARGET env var to the build and test process
6+cargo build --target "$TARGET" --verbose
7+
8+# We cannot run arm executables on linux
9+if [[ $TARGET != arm-unknown-linux-gnueabihf ]]; then
10+ cargo test --target "$TARGET" --verbose
11+
12+ # Run 'bat' on its own source code and the README
13+ cargo run --target "$TARGET" -- src/main.rs README.md --paging=never
14+fi