本教程将指导你如何在 Apple Silicon Macs 上编译 Chromium,包括所需的系统要求、工具安装、源码获取、环境配置、编译和运行步骤。
一、系统要求
- Apple Silicon Mac(如 M1、M2)。
- 安装 Xcode 和 macOS SDK(通过 App Store 安装最新版本的 Xcode)。
- 使用 APFS 格式的卷。
二、安装 depot_tools
 
- 克隆 depot_tools仓库:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git- 将 depot_tools添加到 PATH:
export PATH="$PATH:/path/to/depot_tools"三、获取源码
- 创建目录并切换到该目录:
mkdir chromium && cd chromium- 使用 fetch工具获取源码。fetch是一个用于下载和配置 Chromium 源码的工具。常用参数包括:
在执行 fetch 时,使用 caffeinate 命令可以防止 Mac 进入睡眠状态,确保下载过程不被打断:
caffeinate fetch chromium这里的 caffeinate 是一个 macOS 命令,能防止计算机在命令执行期间进入睡眠状态,确保 fetch 命令能够顺利完成。
- --nohooks:跳过- gclient runhooks步骤。
- --no-history:不下载完整的 Git 历史记录。
- --nohooks和- --no-history可以加快初次下载速度。
- 切换到 src目录:
cd src四、设置编译环境
- 生成编译配置:
gn gen out/Default- 配置 args.gn文件:
 在生成编译配置后,运行以下命令来打开args.gn文件:
gn args out/Default将以下内容添加到 args.gn 文件中,以优化编译过程:
is_debug = false
is_component_build = true
symbol_level = 0- is_debug = false:关闭调试模式,生成优化过的发布版本。
- is_component_build = true:启用组件构建模式,加快链接速度。
- symbol_level = 0:设置符号级别为 0,减少符号信息,进一步优化编译时间。
- 查看可用参数:
 运行以下命令查看可用参数列表:
gn args out/Default --list此命令会显示所有可配置的构建参数及其默认值和说明,例如:
enable_nacl = true  # 启用 Native Client
target_os = "mac"   # 目标操作系统
target_cpu = "arm64"  # 目标 CPU 架构根据需求调整这些参数以优化构建配置。
- 如果在 Intel Mac 上为 ARM64 构建,添加以下行:
target_cpu = "arm64"- 保存并关闭文件。
五、编译 Chromium
- 使用 Ninja 编译 Chromium:
autoninja -C out/Default chrome六、运行 Chromium
- 运行已编译的 Chromium:
out/Default/Chromium.app/Contents/MacOS/Chromium七、避免系统权限对话框
- 通过以下命令运行 Chromium 以避免权限对话框:
out/Default/Chromium.app/Contents/MacOS/Chromium --use-mock-keychain --disable-features=DialMediaRouteProvider八、创建通用二进制文件
- 分别构建 x86_64 和 arm64 版本:
ninja -C out/release_x86_64 chrome
ninja -C out/release_arm64 chrome- 使用 universalizer.py工具合并两个版本:
mkdir out/release_universal
python3 chrome/installer/mac/universalizer.py \out/release_x86_64/Chromium.app \out/release_arm64/Chromium.app \out/release_universal/Chromium.app九、构建和运行测试目标
- 生成编译配置:
gn gen out/Default- 编译单元测试:
autoninja -C out/Default base_unittests- 运行单元测试:
out/Default/base_unittests- 编译浏览器测试:
autoninja -C out/Default browser_tests- 运行特定的浏览器测试:
out/Default/browser_tests --gtest_filter=BrowserTest.*- 编译所有测试:
autoninja -C out/Default all- 运行所有测试:
out/Default/chrome --run-all-tests- 查看测试结果:
 测试运行后,可以在终端查看测试结果的详细信息,确保所有测试通过,或者根据失败的测试信息进行相应的调试和修复。
十、调试 Chromium
- 调试和发布构建
- 调试构建:使用 is_debug=true配置生成包含完整调试信息的调试构建。
- 发布构建:使用 is_debug=false配置生成不包含符号信息的发布构建。
- 中间配置:使用 symbol_level=1配置生成包含最小符号表的构建。
- 使用 LLDB 调试
- 启动 Chromium 并附加调试器:
lldb ./out/Default/Chromium.app/Contents/MacOS/Chromium- 或者附加到正在运行的进程:
lldb -p <pid>- 传递参数
- 启动 Chromium 时传递参数:
lldb ./out/Default/Chromium.app/Contents/MacOS/Chromium -- --renderer-startup-dialog- 设置断点
- 设置简单的函数名断点:
(lldb) b BrowserWindow::Close- 堆栈导航
- 获取回溯:
(lldb) bt- 导航堆栈:
(lldb) up
(lldb) down- 检查执行
- 单步执行:
(lldb) s
(lldb) n- 继续执行:
(lldb) c- 打印值
- 打印变量值:
(lldb) p <value>- 多进程调试
- 附加到正在运行的进程:
lldb -p <pid>- 使用启动对话框参数调试进程启动:
--renderer-startup-dialog- 使用 Xcode 调试
- 生成 Xcode 项目:
gn gen --ide=xcode out/Default- 打开生成的 Xcode 项目:
open out/Default/all.xcodeproj详细内容请参考 Chromium 调试指南。
参考资料
- Chromium Mac 构建指南
- 适用于 ARM Macs 的 Chromium 构建说明
- GN 构建配置
- GN 快速入门
- Chromium 调试指南
本主页会定期更新,为了能够及时获得更新,敬请关注我:点击左下角的关注。也可以关注公众号:请在微信上搜索公众号“iShare爱分享”并关注,或者扫描以下公众号二维码关注,以便在内容更新时直接向您推送。
