summaryrefslogtreecommitdiffhomepage
path: root/scripts/setup-rust
diff options
context:
space:
mode:
authorKalle Lindström <karl.lindstrom@mullvad.net>2025-02-06 14:30:38 +0100
committerKalle Lindström <karl.lindstrom@mullvad.net>2025-02-18 15:40:07 +0100
commit802570a5521d41ec9a90dae28977386a5d6cc7f9 (patch)
tree692ec6b53f78d6268c7fdb13e5f9162684511bbf /scripts/setup-rust
parent36e03e11c921f5c0d49c94d7fe2f272e7dafa553 (diff)
downloadmullvadvpn-802570a5521d41ec9a90dae28977386a5d6cc7f9.tar.xz
mullvadvpn-802570a5521d41ec9a90dae28977386a5d6cc7f9.zip
Add `setup-rust` script and git hook
The `setup-rust` helper script uses Rustup to install the default targets and components that each platform needs. The `setup-rust-post-checkout` script is a git hook (which needs to be copied to .git/hooks/post-checkout, which can be done manually or by running `setup-rust install-hook`) that detects when the `rust-toolchain.toml` file has changed and installs the default targets/components for the platform that the user has specified via the MULLVAD_SETUP_PLATFORM env variable.
Diffstat (limited to 'scripts/setup-rust')
-rwxr-xr-xscripts/setup-rust92
1 files changed, 92 insertions, 0 deletions
diff --git a/scripts/setup-rust b/scripts/setup-rust
new file mode 100755
index 0000000000..e853935131
--- /dev/null
+++ b/scripts/setup-rust
@@ -0,0 +1,92 @@
+#!/usr/bin/env bash
+#
+# Installs the default toolchains and components for different platforms.
+# To use this script rustup must be installed first.
+
+set -eu
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$SCRIPT_DIR/.."
+
+source scripts/utils/log
+
+ANDROID_TARGETS="x86_64-linux-android i686-linux-android aarch64-linux-android armv7-linux-androideabi"
+ANDROID_COMPONENTS="rust-analyzer"
+
+DESKTOP_TARGETS="x86_64-pc-windows-msvc x86_64-pc-windows-gnu i686-pc-windows-msvc"
+DESKTOP_COMPONENTS="rust-analyzer"
+
+IOS_TARGETS="aarch64-apple-ios-sim aarch64-apple-ios x86_64-apple-ios"
+IOS_COMPONENTS="rust-analyzer"
+
+function main {
+ if [[ $# -eq 0 ]]; then
+ print_usage
+ exit 1
+ fi
+
+ case "$1" in
+ "android")
+ setup "Android" "$ANDROID_TARGETS" "$ANDROID_COMPONENTS"
+ ;;
+ "desktop")
+ setup "Desktop" "$DESKTOP_TARGETS" "$DESKTOP_COMPONENTS"
+ ;;
+ "ios")
+ setup "Android" "$IOS_TARGETS" "$IOS_COMPONENTS"
+ ;;
+ "install-hook")
+ install_hook
+ ;;
+ "--help")
+ print_usage
+ exit 0
+ ;;
+ *)
+ log_error "Invalid argument: \`$1\`"
+ print_usage
+ exit 1
+ ;;
+ esac
+}
+
+function print_usage {
+ log "Setup default Rust targets and components for different platforms"
+ log ""
+ log "Usage: setup-rust android|desktop|ios|install-hook"
+ log " android Run Android-specific setup"
+ log " desktop Run Desktop-specific setup"
+ log " ios Run iOS-specific setup"
+ log " install-hook Copies the setup-rust-post-checkout file to .git/hooks/post-checkout"
+}
+
+function setup {
+ local platform=$1
+ local targets=$2
+ local components=$3
+
+ log "Installing default Rust targets/components"
+ log "platform: $platform"
+ log "targets: $targets"
+ log "components: $components"
+ # shellcheck disable=SC2086
+ rustup target add $targets
+ # shellcheck disable=SC2086
+ rustup component add $components
+}
+
+function install_hook {
+ local hook=$SCRIPT_DIR/../.git/hooks/post-checkout
+ if [[ -f "$hook" ]]; then
+ log_error "$(realpath "$hook") file already exists - will not overwrite"
+ exit 1
+ else
+ cp "$SCRIPT_DIR/setup-rust-post-checkout" "$hook"
+ chmod +x "$hook"
+ log "Hook installed. You must now set the environment variable MULLVAD_SETUP_PLATFORM to "
+ log "\`android\`, \`desktop\` or \`ios\` in your shell environment."
+ fi
+}
+
+# Run script
+main "$@"