112a9d9c8Sopenharmony_ci#!/usr/bin/env bash 212a9d9c8Sopenharmony_ci# Bail on first error 312a9d9c8Sopenharmony_ciset -e 412a9d9c8Sopenharmony_ci# Bail if an unset variable is encountered 512a9d9c8Sopenharmony_ciset -u 612a9d9c8Sopenharmony_ci# Enable debugging output 712a9d9c8Sopenharmony_ciset -x 812a9d9c8Sopenharmony_ci# Give a pipeline a non-zero exit code if one of its constituents fails 912a9d9c8Sopenharmony_ciset -o pipefail 1012a9d9c8Sopenharmony_ci 1112a9d9c8Sopenharmony_cifunction llvm_linux_target_triple() { 1212a9d9c8Sopenharmony_ci echo "x86_64-linux-gnu-ubuntu-16.04" 1312a9d9c8Sopenharmony_ci} 1412a9d9c8Sopenharmony_ci 1512a9d9c8Sopenharmony_cifunction llvm_macos_target_triple() { 1612a9d9c8Sopenharmony_ci case "$1" in 1712a9d9c8Sopenharmony_ci [0-8].* | 9.0.0) echo "x86_64-darwin-apple" ;; 1812a9d9c8Sopenharmony_ci # Starting with 9.0.1, triple swapped ordering 1912a9d9c8Sopenharmony_ci *) echo "x86_64-apple-darwin" ;; 2012a9d9c8Sopenharmony_ci esac 2112a9d9c8Sopenharmony_ci} 2212a9d9c8Sopenharmony_ci 2312a9d9c8Sopenharmony_cifunction llvm_version_triple() { 2412a9d9c8Sopenharmony_ci case "$1" in 2512a9d9c8Sopenharmony_ci 5.0) echo "5.0.1" ;; 2612a9d9c8Sopenharmony_ci # By default, take the .0 patch release 2712a9d9c8Sopenharmony_ci *) echo "$1.0" ;; 2812a9d9c8Sopenharmony_ci esac 2912a9d9c8Sopenharmony_ci} 3012a9d9c8Sopenharmony_ci 3112a9d9c8Sopenharmony_cifunction llvm_base_url() { 3212a9d9c8Sopenharmony_ci local llvm_version_triple=$1 3312a9d9c8Sopenharmony_ci 3412a9d9c8Sopenharmony_ci case "$llvm_version_triple" in 3512a9d9c8Sopenharmony_ci [0-8].* | 9.0.0) 3612a9d9c8Sopenharmony_ci echo "http://releases.llvm.org/$llvm_version_triple" 3712a9d9c8Sopenharmony_ci ;; 3812a9d9c8Sopenharmony_ci # Starting with 9.0.1, releases are hosted on github 3912a9d9c8Sopenharmony_ci *) 4012a9d9c8Sopenharmony_ci echo "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_version_triple" 4112a9d9c8Sopenharmony_ci ;; 4212a9d9c8Sopenharmony_ci esac 4312a9d9c8Sopenharmony_ci} 4412a9d9c8Sopenharmony_ci 4512a9d9c8Sopenharmony_cifunction llvm_download() { 4612a9d9c8Sopenharmony_ci local base_url=$1 4712a9d9c8Sopenharmony_ci local arch=$2 4812a9d9c8Sopenharmony_ci 4912a9d9c8Sopenharmony_ci export LLVM=clang+llvm-${LLVM_VERSION_TRIPLE}-$arch 5012a9d9c8Sopenharmony_ci export LLVM_DIRECTORY="$HOME/.llvm/${LLVM}" 5112a9d9c8Sopenharmony_ci 5212a9d9c8Sopenharmony_ci if [ -d "${LLVM_DIRECTORY}" ]; then 5312a9d9c8Sopenharmony_ci echo "Using cached LLVM download for ${LLVM}..." 5412a9d9c8Sopenharmony_ci else 5512a9d9c8Sopenharmony_ci wget --no-verbose $base_url/${LLVM}.tar.xz 5612a9d9c8Sopenharmony_ci mkdir -p "${LLVM_DIRECTORY}" 5712a9d9c8Sopenharmony_ci tar xf ${LLVM}.tar.xz -C "${LLVM_DIRECTORY}" --strip-components=1 5812a9d9c8Sopenharmony_ci fi 5912a9d9c8Sopenharmony_ci 6012a9d9c8Sopenharmony_ci export LIBCLANG_PATH="${LLVM_DIRECTORY}/lib" 6112a9d9c8Sopenharmony_ci export LLVM_CONFIG_PATH="${LLVM_DIRECTORY}/bin/llvm-config" 6212a9d9c8Sopenharmony_ci} 6312a9d9c8Sopenharmony_ci 6412a9d9c8Sopenharmony_ci# Download and set up a sane LLVM version 6512a9d9c8Sopenharmony_ciset_llvm_env() { 6612a9d9c8Sopenharmony_ci export LLVM_VERSION_TRIPLE=`llvm_version_triple ${LLVM_VERSION}` 6712a9d9c8Sopenharmony_ci local base_url=`llvm_base_url ${LLVM_VERSION_TRIPLE}` 6812a9d9c8Sopenharmony_ci 6912a9d9c8Sopenharmony_ci if [ "$GITHUB_ACTIONS_OS" == "ubuntu-latest" ]; then 7012a9d9c8Sopenharmony_ci llvm_download $base_url `llvm_linux_target_triple ${LLVM_VERSION_TRIPLE}` 7112a9d9c8Sopenharmony_ci export LD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":${LD_LIBRARY_PATH:-} 7212a9d9c8Sopenharmony_ci else 7312a9d9c8Sopenharmony_ci llvm_download $base_url `llvm_macos_target_triple ${LLVM_VERSION_TRIPLE}` 7412a9d9c8Sopenharmony_ci export DYLD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":${DYLD_LIBRARY_PATH:-} 7512a9d9c8Sopenharmony_ci fi 7612a9d9c8Sopenharmony_ci} 7712a9d9c8Sopenharmony_ci 7812a9d9c8Sopenharmony_ci# Need rustfmt to compare the test expectations. 7912a9d9c8Sopenharmony_ciset_rustfmt_env() { 8012a9d9c8Sopenharmony_ci local toolchain="nightly-$(curl https://rust-lang.github.io/rustup-components-history/$(rustup target list --installed | tail -1)/rustfmt)" 8112a9d9c8Sopenharmony_ci rustup update "$toolchain" 8212a9d9c8Sopenharmony_ci rustup component add rustfmt --toolchain "$toolchain" 8312a9d9c8Sopenharmony_ci export RUSTFMT="$(rustup which --toolchain "$toolchain" rustfmt)" 8412a9d9c8Sopenharmony_ci} 8512a9d9c8Sopenharmony_ci 8612a9d9c8Sopenharmony_ciassert_no_diff() { 8712a9d9c8Sopenharmony_ci git add -u 8812a9d9c8Sopenharmony_ci git diff @ 8912a9d9c8Sopenharmony_ci git diff-index --quiet HEAD 9012a9d9c8Sopenharmony_ci} 9112a9d9c8Sopenharmony_ci 9212a9d9c8Sopenharmony_ciset_llvm_env 9312a9d9c8Sopenharmony_ciset_rustfmt_env 9412a9d9c8Sopenharmony_ci 9512a9d9c8Sopenharmony_ciget_cargo_args() { 9612a9d9c8Sopenharmony_ci local args="" 9712a9d9c8Sopenharmony_ci if [ ! -z "$RUST_TARGET" ]; then 9812a9d9c8Sopenharmony_ci args+=" --target $RUST_TARGET" 9912a9d9c8Sopenharmony_ci fi 10012a9d9c8Sopenharmony_ci if [ "$BINDGEN_RELEASE_BUILD" == "1" ]; then 10112a9d9c8Sopenharmony_ci args+=" --release" 10212a9d9c8Sopenharmony_ci fi 10312a9d9c8Sopenharmony_ci if [ "$BINDGEN_NO_DEFAULT_FEATURES" == "1" ]; then 10412a9d9c8Sopenharmony_ci args+=" --no-default-features" 10512a9d9c8Sopenharmony_ci fi 10612a9d9c8Sopenharmony_ci local features="" 10712a9d9c8Sopenharmony_ci if [ "$BINDGEN_FEATURE_RUNTIME" == "1" ]; then 10812a9d9c8Sopenharmony_ci features+="runtime" 10912a9d9c8Sopenharmony_ci fi 11012a9d9c8Sopenharmony_ci if [ "$BINDGEN_FEATURE_EXTRA_ASSERTS" == "1" ]; then 11112a9d9c8Sopenharmony_ci features+=" testing_only_extra_assertions" 11212a9d9c8Sopenharmony_ci fi 11312a9d9c8Sopenharmony_ci if [ "$BINDGEN_FEATURE_TESTING_ONLY_DOCS" == "1" ]; then 11412a9d9c8Sopenharmony_ci features+=" testing_only_docs" 11512a9d9c8Sopenharmony_ci fi 11612a9d9c8Sopenharmony_ci if [ ! -z "$features" ]; then 11712a9d9c8Sopenharmony_ci args+=" --features $(echo $features | tr ' ' ',')" 11812a9d9c8Sopenharmony_ci fi 11912a9d9c8Sopenharmony_ci echo $args 12012a9d9c8Sopenharmony_ci} 12112a9d9c8Sopenharmony_ci 12212a9d9c8Sopenharmony_ciif [ ! -z "$RUST_CROSS_COMPILER" ]; then 12312a9d9c8Sopenharmony_ci export RUSTFLAGS="-C linker=${RUST_CROSS_COMPILER}-gcc" 12412a9d9c8Sopenharmony_cifi 12512a9d9c8Sopenharmony_ci 12612a9d9c8Sopenharmony_ciCARGO_ARGS=`get_cargo_args` 12712a9d9c8Sopenharmony_ci 12812a9d9c8Sopenharmony_ci# Ensure we build without warnings 12912a9d9c8Sopenharmony_ciRUSTFLAGS="-Dwarnings" cargo check $CARGO_ARGS 13012a9d9c8Sopenharmony_ci 13112a9d9c8Sopenharmony_ciif [ "$BINDGEN_MAIN_TESTS" == "1" ]; then 13212a9d9c8Sopenharmony_ci # Run the tests 13312a9d9c8Sopenharmony_ci (cd bindgen-tests && cargo test $CARGO_ARGS) 13412a9d9c8Sopenharmony_cifi 13512a9d9c8Sopenharmony_ci 13612a9d9c8Sopenharmony_ciassert_no_diff 13712a9d9c8Sopenharmony_ci 13812a9d9c8Sopenharmony_ci# Run the integration tests 13912a9d9c8Sopenharmony_ci(cd bindgen-integration && cargo test $CARGO_ARGS) 140