M1 Macs: Having two Terminals for x86 and ARM architecture
I've recently upgraded to an M1 Mac because Black. Magic. Fuckery.
Nonetheless, I required some command line applications which are not yet available for ARM architectures.
First, make sure you have Rosetta 2 installed: usr/sbin/softwareupdate --install-rosetta --agree-to-license
.
Individual command line tools can be emulated by adding arch -x86_64
to the beginning of the command. However, I wanted a complete emulated shell where everything gets emulated and executed in x86.
For that, I required a Homebrew installation with the corresponding x86 apps. Consequently, I wanted to have two environments which are somewhat seperated – having their own binaries and libraries.
1) Create a copy of the terminal of your choice (I'm using iTerm). I renamed it to "iTerm-x86".
2) Right click the app and select "Get Info". Select "Open using Rosetta".
3) Start the new Terminal application. The Terminal is now running in the emulated x86 environment and requires a new Homebrew installation.
4) Run the script from brew.sh. It will install Homebrew for the corresponding architectures. Homebrew will use different directories for its binaries (/usr/local
for x86, /opt/homebrew
for ARM).
5) Therefore, you want your shell to load the correct $PATH
based on your Terminal app.
Add the following snippet to your .zshrc
or .zshenv
in your home directory.
The snippet checks the architecture (ARM or the emulated x86?), adds the path for the brew
binary and runs eval $(brew shellenv)
which then sets the correct Homebrew paths.