| #!/usr/bin/env bash |
| # Install/update rust. |
| # The first argument should be the toolchain to install. |
| |
| set -ex |
| if [ -z "$1" ] |
| then |
| echo "First parameter must be toolchain to install." |
| exit 1 |
| fi |
| TOOLCHAIN="$1" |
| |
| rustup set profile minimal |
| rustup component remove --toolchain=$TOOLCHAIN rust-docs || echo "already removed" |
| rustup update --no-self-update $TOOLCHAIN |
| if [ -n "$2" ] |
| then |
| TARGET="$2" |
| HOST=$(rustc -Vv | grep ^host: | sed -e "s/host: //g") |
| if [ "$HOST" != "$TARGET" ] |
| then |
| rustup component add llvm-tools-preview --toolchain=$TOOLCHAIN |
| rustup component add rust-std-$TARGET --toolchain=$TOOLCHAIN |
| fi |
| if [[ $TARGET == *"musl" ]] |
| then |
| # This is needed by libdbus-sys. |
| sudo apt update -y && sudo apt install musl-dev musl-tools -y |
| fi |
| if [[ $TARGET == "aarch64-unknown-linux-musl" ]] |
| then |
| echo CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=rust-lld >> $GITHUB_ENV |
| # This `CC` is some nonsense needed for libdbus-sys (via opener). |
| # I don't know if this is really the right thing to do, but it seems to work. |
| sudo apt install gcc-aarch64-linux-gnu -y |
| echo CC=aarch64-linux-gnu-gcc >> $GITHUB_ENV |
| fi |
| fi |
| |
| rustup default $TOOLCHAIN |
| rustup -V |
| rustc -Vv |
| cargo -V |