#!/usr/bin/env bash # # Copyright 2020 Brian Smith. # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set -eux -o pipefail IFS=$'\n\t' target=$1 features=${2-} function install_packages { sudo apt-get -yq --no-install-suggests --no-install-recommends install "$@" } use_clang= case $target in --target*android*) mkdir -p "${ANDROID_SDK_ROOT}/licenses" android_license_file="${ANDROID_SDK_ROOT}/licenses/android-sdk-license" accept_android_license=24333f8a63b6825ea9c5514f83c2829b004d1fee grep --quiet --no-messages "$accept_android_license" "$android_license_file" \ || echo $accept_android_license >> "$android_license_file" sudo "${ANDROID_SDK_ROOT}/tools/bin/sdkmanager" ndk-bundle ;; esac case $target in --target=aarch64-unknown-linux-gnu) # Clang is needed for code coverage. use_clang=1 install_packages \ qemu-user \ gcc-aarch64-linux-gnu \ libc6-dev-arm64-cross ;; --target=aarch64-unknown-linux-musl|--target=armv7-unknown-linux-musleabihf) use_clang=1 install_packages \ qemu-user ;; --target=arm-unknown-linux-gnueabihf) install_packages \ qemu-user \ gcc-arm-linux-gnueabihf \ libc6-dev-armhf-cross ;; --target=i686-unknown-linux-gnu) use_clang=1 install_packages \ gcc-multilib \ libc6-dev-i386 ;; --target=i686-unknown-linux-musl|--target=x86_64-unknown-linux-musl) use_clang=1 ;; --target=wasm32-unknown-unknown) # The version of wasm-bindgen-cli must match the wasm-bindgen version. wasm_bindgen_version=$(cargo metadata --format-version 1 | jq -r '.packages | map(select( .name == "wasm-bindgen")) | map(.version) | .[0]') cargo install wasm-bindgen-cli --vers "$wasm_bindgen_version" --bin wasm-bindgen-test-runner case ${features-} in *wasm32_c*) use_clang=1 ;; *) ;; esac ;; --target=*) ;; esac if [ -n "$use_clang" ]; then llvm_version=10 if [ -n "${RING_COVERAGE-}" ]; then # https://github.com/rust-lang/rust/pull/79365 upgraded the coverage file # format to one that only LLVM 11+ can use llvm_version=11 sudo apt-key add mk/llvm-snapshot.gpg.key sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-$llvm_version main" sudo apt-get update fi install_packages clang-$llvm_version llvm-$llvm_version fi