|
1 | 1 | #!/bin/bash |
2 | | -set -ex |
| 2 | +set -ex -o pipefail |
3 | 3 |
|
4 | | -docker_build() { |
5 | | - echo "Target dir: $TARGET_DIR" |
6 | | - echo "Platform: $PLATFORM" |
| 4 | +# Common vars: |
| 5 | +CRATE_NAME="${1}crate" |
| 6 | +CRATE_PATH="./test/${CRATE_NAME}" |
| 7 | + |
| 8 | +# Build and verify successful static compilation of a crate: |
| 9 | +function docker_build() { |
| 10 | + echo "Target dir: ${TARGET_DIR}" |
| 11 | + echo "Platform: ${PLATFORM}" |
7 | 12 |
|
8 | 13 | # NB: add -vv to cargo build when debugging |
9 | | - local -r crate="$1"crate |
10 | | - docker run --rm \ |
11 | | - -v "$PWD/test/${crate}:/volume" \ |
12 | | - -v cargo-cache:/root/.cargo/registry \ |
13 | | - -e RUST_BACKTRACE=1 \ |
| 14 | + docker run --rm -it \ |
| 15 | + --env RUST_BACKTRACE=1 \ |
| 16 | + --volume "${CRATE_PATH}:/volume" \ |
| 17 | + --volume cargo-cache:/opt/cargo/registry \ |
14 | 18 | --platform "${PLATFORM}" \ |
15 | 19 | rustmusl-temp \ |
16 | 20 | cargo build |
17 | 21 |
|
18 | | - cd "test/${crate}" |
19 | | - |
20 | | - # Ideally we would use `ldd` but due to a qemu bug we can't :( |
21 | | - # See https://github.com/multiarch/qemu-user-static/issues/172 |
22 | | - # Instead we use `file`. |
23 | | - docker run --rm \ |
24 | | - -v "$PWD:/volume" \ |
25 | | - -e RUST_BACKTRACE=1 \ |
| 22 | + # Verify the build artifact works and is statically linked: |
| 23 | + # (A container is used for `ldd` so that a non-native platform can also be tested) |
| 24 | + local CRATE_ARTIFACT="./target/${TARGET_DIR}/debug/${CRATE_NAME}" |
| 25 | + docker run --rm -it \ |
| 26 | + --env RUST_BACKTRACE=1 \ |
| 27 | + --volume "${CRATE_PATH}:/volume" \ |
| 28 | + --workdir /volume \ |
26 | 29 | --platform "${PLATFORM}" \ |
27 | 30 | test-runner \ |
28 | | - bash -c "cd volume; ./target/$TARGET_DIR/debug/${crate} && file ./target/$TARGET_DIR/debug/${crate} && file /volume/target/$TARGET_DIR/debug/${crate} 2>&1 | grep -qE 'static-pie linked|statically linked' && echo ${crate} is a static executable" |
| 31 | + bash -ex -o pipefail -c " |
| 32 | + '${CRATE_ARTIFACT}' |
| 33 | + ldd '${CRATE_ARTIFACT}' 2>&1 \ |
| 34 | + | grep -qE 'not a dynamic|statically linked' \ |
| 35 | + && echo '${crate} is a static executable' |
| 36 | + " |
29 | 37 | } |
30 | 38 |
|
31 | | -# Helper to check how ekidd/rust-musl-builder does it |
32 | | -docker_build_ekidd() { |
33 | | - local -r crate="$1"crate |
34 | | - docker run --rm \ |
35 | | - -v "$PWD/test/${crate}:/home/rust/src" \ |
36 | | - -v cargo-cache:/home/rust/.cargo \ |
37 | | - -e RUST_BACKTRACE=1 \ |
38 | | - -it ekidd/rust-musl-builder:nightly \ |
| 39 | +# Reference - Helpers to locally compare builds from alternative images (x86_64 arch only): |
| 40 | +# - `ekidd/rust-musl-builder` |
| 41 | +# - `golddranks/rust_musl_docker` |
| 42 | +function docker_build_ekidd() { |
| 43 | + docker run --rm -it \ |
| 44 | + --env RUST_BACKTRACE=1 \ |
| 45 | + --volume "${CRATE_PATH}:/home/rust/src" \ |
| 46 | + --volume cargo-cache:/home/rust/.cargo \ |
| 47 | + ekidd/rust-musl-builder:nightly \ |
39 | 48 | cargo build -vv |
40 | | - cd "test/${crate}" |
41 | | - ./target/x86_64-unknown-linux-musl/debug/"${crate}" |
42 | | - ldd "target/x86_64-unknown-linux-musl/debug/${crate}" 2>&1 | grep -qE "not a dynamic|statically linked" && \ |
43 | | - echo "${crate} is a static executable" |
| 49 | + |
| 50 | + check_crate_build_locally |
44 | 51 | } |
45 | 52 |
|
46 | | -# Helper to check how golddranks/rust_musl_docker does it |
47 | | -docker_build_golddranks() { |
48 | | - local -r crate="$1"crate |
49 | | - docker run --rm \ |
50 | | - -v "$PWD/test/${crate}:/workdir" \ |
51 | | - -e RUST_BACKTRACE=1 \ |
52 | | - -it golddranks/rust_musl_docker:nightly-2017-10-03 \ |
| 53 | +function docker_build_golddranks() { |
| 54 | + docker run --rm -it \ |
| 55 | + --env RUST_BACKTRACE=1 \ |
| 56 | + --volume "${CRATE_PATH}:/workdir" \ |
| 57 | + golddranks/rust_musl_docker:nightly-2017-10-03 \ |
53 | 58 | cargo build -vv --target=x86_64-unknown-linux-musl |
54 | | - cd "test/${crate}" |
55 | | - ./target/x86_64-unknown-linux-musl/debug/"${crate}" |
56 | | - ldd "target/x86_64-unknown-linux-musl/debug/${crate}" 2>&1 | grep -qE "not a dynamic|statically linked" && \ |
57 | | - echo "${crate} is a static executable" |
| 59 | + |
| 60 | + check_crate_build_locally |
| 61 | +} |
| 62 | + |
| 63 | +# Verify the build artifact works and is statically linked: |
| 64 | +function check_crate_build_locally() { |
| 65 | + local CRATE_ARTIFACT="${CRATE_PATH}/target/x86_64-unknown-linux-musl/debug/${CRATE_NAME}" |
| 66 | + |
| 67 | + "${CRATE_ARTIFACT}" |
| 68 | + ldd "${CRATE_ARTIFACT}" 2>&1 \ |
| 69 | + | grep -qE 'not a dynamic|statically linked' \ |
| 70 | + && echo "${CRATE_NAME} is a static executable" |
58 | 71 | } |
59 | 72 |
|
60 | | -docker_build "$1" |
| 73 | +docker_build |
0 commit comments