Skip to content

Commit

Permalink
Enable ARM cross-compilation
Browse files Browse the repository at this point in the history
closes #244
  • Loading branch information
sharkdp committed Aug 19, 2018
1 parent e4f61bc commit 6fb5004
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 13 deletions.
20 changes: 10 additions & 10 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ matrix:
- os: osx
rust: stable
env: TARGET=x86_64-apple-darwin
- os: linux
rust: stable
env:
- TARGET=arm-unknown-linux-gnueabihf
- CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc-4.8

# Beta channel.
- os: linux
Expand Down Expand Up @@ -82,13 +87,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 to build deb packages
- fakeroot
sudo: required

before_install:
- ci/before_install.bash

env:
global:
Expand All @@ -103,9 +105,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
- ci/script.bash

before_deploy:
- bash ci/before_deploy.bash
Expand Down
13 changes: 10 additions & 3 deletions ci/before_deploy.bash
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,25 @@ 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"
mkdir "$tempdir/$package_name/autocomplete"

# 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"

# manpage, readme and license
cp "doc/$PROJECT_NAME.1" "$tempdir/$package_name"
Expand Down Expand Up @@ -57,8 +64,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}
Expand Down
26 changes: 26 additions & 0 deletions ci/before_install.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash

set -ex

if [ "$TRAVIS_OS_NAME" != linux ]; then
exit 0
fi

sudo apt-get update

# 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
11 changes: 11 additions & 0 deletions ci/script.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/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
fi

0 comments on commit 6fb5004

Please sign in to comment.