Skip to content

Instantly share code, notes, and snippets.

@briansmith
Created November 20, 2020 22:51
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save briansmith/dd06e8dfeac46d1032d974000dac1fa6 to your computer and use it in GitHub Desktop.
Save briansmith/dd06e8dfeac46d1032d974000dac1fa6 to your computer and use it in GitHub Desktop.
Bootstrap a working native aarch64-apple-darwin Rust toolchain
#!/bin/bash
# "Bash Strict Mode with logging"
set -eux -o pipefail
IFS=$'\n\t'
case $(uname -p) in
arm)
;;
*)
echo This has only been tested with a native ARM shell.
exit 1
;;
esac
if (file $(which rustup) | grep "arm64"); then
exit 0
fi
# Adapted from
# https://github.com/rust-lang/rustup/issues/2413#issuecomment-729140037
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | arch --x86_64 sh -s -- \
-y \
--default-host aarch64-apple-darwin \
--default-toolchain nightly-2020-11-18
rustup_tempdir=$(mktemp -d)
pushd $rustup_tempdir
source ~/.cargo/env
# Adapted from
# https://github.com/rust-lang/rustup/issues/2413#issuecomment-729173518 and
# https://github.com/rust-lang/rustup/issues/2413#issuecomment-729216870
git clone https://github.com/rust-lang/rustup/ .
git checkout 5674652a45ecf9066128df32fbc51e965586e4b2
RUSTC=$(rustup which rustc) $(rustup which cargo) build
RUSTC=$(rustup which rustc) $(rustup which cargo) dev-install
popd
rm -Rf $rustup_tempdir
if ! (file $(which rustup) | grep -q "arm64"); then
echo rustup did not get converted to ARM64 for some reason.
exit 1
fi
@briansmith
Copy link
Author

briansmith commented Nov 21, 2020

I'd love some assistance with the following points:

  • How could I change the above script so that it works even if the shell is running under Rosetta?

  • How can I force the installation of Rosetta 2, ideally from the command line, without signing into the App Store?

  • Even better, how can I use Xcode, targetting macOS and iOS, and with the simulators available, without installing Rosetta 2?

  • How can I script the any of the steps 1-4 above so they could be done over SSH?

@briansmith
Copy link
Author

The above is no longer necessary. curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly-2020-11-25 worked for me today. See https://blog.rust-lang.org/2020/11/27/Rustup-1.23.0.html#support-for-apple-m1-devices for more info. (Today's Rust Nightly is broken because of briansmith/ring#1130; tomorrow's should work.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment