This document describes the state of Chromium on Apple Silicon Macs. The short summary is that almost everything works, without needing Rosetta.
There's a main waterfall bot that builds for Arm. It cross-builds on an Intel machine.
There's a main waterfall bot that builds for Arm on an Arm bot as well. This bot does not have Rosetta installed.
There‘s also a tester bot that continuously runs tests. Most tests pass. The tester bots don’t have Rosetta installed.
ASan builds do not yet work (tracking bug)
If you are on an Intel Mac, all that's required to build Chromium for arm64 is to add a
target_cpu = "arm64" line to your
args.gn. Then build normally. If you are on an Arm Mac, your build will by default be an Arm build, though please see the section below about building on Arm Macs for specific things to keep in mind.
A note about copying a Chromium build to your Arm Mac. If you don‘t do a component build (e.g. a regular
is_debug=false build), you can just copy over Chromium.app from your build directory. If you copy it using macOS’s “Shared Folder” feature and Finder, Chromium.app should be directly runnable. If you zip, upload Chromium.app to some web service and download it to an Arm Mac, browsers will set the
com.apple.quarantine bit, which will cause the Finder to say
"Chromium" is damanged and can't be opened. You should move it to the Trash.". In Console.app, the kernel will log
kernel: Security policy would not allow process: 2204, /Users/you/Downloads/Chromium.app/Contents/MacOS/Chromium and amfid will log
amfid: /Users/you/Downloads/Chromium.app/Contents/MacOS/Chromium signature not valid: -67050. To fix this, open a terminal and run
% cd ~/Downloads && xattr -rc Chromium.app
After that, it should start fine.
Arm Mac-specific bugs are tagged with the Mac-ARM64 label.
A “universal” (or “fat”)
.app can be created from distinct x86_64 and arm64 builds produced from the same source version. Chromium has a
universalizer.py tool that can then be used to merge the two builds into a single universal
% ninja -C out/release_x86_64 chrome % ninja -C out/release_arm64 chrome % mkdir out/release_universal % chrome/installer/mac/universalizer.py \ out/release_x86_64/Chromium.app \ out/release_arm64/Chromium.app \ out/release_universal/Chromium.app
The universal build is produced in this way rather than having a single all-encompassing
gn configuration because:
gn. However, as of November 2020, Chromium builds for the two architectures converged and are expected to remain on the same version indefinitely, so this is now more of a historical artifact.
It's possible to build on an arm Mac, without Rosetta. This configuration is covered by a main waterfall bot.
Checking out and building (with goma too) should just work. You should be able to run
fetch chromium normally, and then build, using
ninja etc like normal.
Building Chrome/Mac/Intel on an arm Mac currently needs a small local tweak to work, see tracking bug.
All tests should build, run, and mostly pass.