编译适用于 Apple Silicon Macs 的 Chromium 教程

本教程将指导你如何在 Apple Silicon Macs 上编译 Chromium,包括所需的系统要求、工具安装、源码获取、环境配置、编译和运行步骤。

一、系统要求

  1. Apple Silicon Mac(如 M1、M2)。
  2. 安装 Xcode 和 macOS SDK(通过 App Store 安装最新版本的 Xcode)。
  3. 使用 APFS 格式的卷。

二、安装 depot_tools

  1. 克隆 depot_tools 仓库:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  1. depot_tools 添加到 PATH:
export PATH="$PATH:/path/to/depot_tools"

三、获取源码

  1. 创建目录并切换到该目录:
mkdir chromium && cd chromium
  1. 使用 fetch 工具获取源码。fetch 是一个用于下载和配置 Chromium 源码的工具。常用参数包括:

在执行 fetch 时,使用 caffeinate 命令可以防止 Mac 进入睡眠状态,确保下载过程不被打断:

caffeinate fetch chromium

这里的 caffeinate 是一个 macOS 命令,能防止计算机在命令执行期间进入睡眠状态,确保 fetch 命令能够顺利完成。

  • --nohooks:跳过 gclient runhooks 步骤。
  • --no-history:不下载完整的 Git 历史记录。
  • --nohooks--no-history 可以加快初次下载速度。
  1. 切换到 src 目录:
cd src

四、设置编译环境

  1. 生成编译配置:
gn gen out/Default
  1. 配置 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,减少符号信息,进一步优化编译时间。
  1. 查看可用参数:
    运行以下命令查看可用参数列表:
gn args out/Default --list

此命令会显示所有可配置的构建参数及其默认值和说明,例如:

enable_nacl = true  # 启用 Native Client
target_os = "mac"   # 目标操作系统
target_cpu = "arm64"  # 目标 CPU 架构

根据需求调整这些参数以优化构建配置。

  1. 如果在 Intel Mac 上为 ARM64 构建,添加以下行:
target_cpu = "arm64"
  1. 保存并关闭文件。

五、编译 Chromium

  1. 使用 Ninja 编译 Chromium:
autoninja -C out/Default chrome

六、运行 Chromium

  1. 运行已编译的 Chromium:
out/Default/Chromium.app/Contents/MacOS/Chromium

七、避免系统权限对话框

  1. 通过以下命令运行 Chromium 以避免权限对话框:
out/Default/Chromium.app/Contents/MacOS/Chromium --use-mock-keychain --disable-features=DialMediaRouteProvider

八、创建通用二进制文件

  1. 分别构建 x86_64 和 arm64 版本:
ninja -C out/release_x86_64 chrome
ninja -C out/release_arm64 chrome
  1. 使用 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

九、构建和运行测试目标

  1. 生成编译配置:
gn gen out/Default
  1. 编译单元测试:
autoninja -C out/Default base_unittests
  1. 运行单元测试:
out/Default/base_unittests
  1. 编译浏览器测试:
autoninja -C out/Default browser_tests
  1. 运行特定的浏览器测试:
out/Default/browser_tests --gtest_filter=BrowserTest.*
  1. 编译所有测试:
autoninja -C out/Default all
  1. 运行所有测试:
out/Default/chrome --run-all-tests
  1. 查看测试结果:
    测试运行后,可以在终端查看测试结果的详细信息,确保所有测试通过,或者根据失败的测试信息进行相应的调试和修复。

十、调试 Chromium

  1. 调试和发布构建
  • 调试构建:使用 is_debug=true 配置生成包含完整调试信息的调试构建。
  • 发布构建:使用 is_debug=false 配置生成不包含符号信息的发布构建。
  • 中间配置:使用 symbol_level=1 配置生成包含最小符号表的构建。
  1. 使用 LLDB 调试
  • 启动 Chromium 并附加调试器:
lldb ./out/Default/Chromium.app/Contents/MacOS/Chromium
  • 或者附加到正在运行的进程:
lldb -p <pid>
  1. 传递参数
  • 启动 Chromium 时传递参数:
lldb ./out/Default/Chromium.app/Contents/MacOS/Chromium -- --renderer-startup-dialog
  1. 设置断点
  • 设置简单的函数名断点:
(lldb) b BrowserWindow::Close
  1. 堆栈导航
  • 获取回溯:
(lldb) bt
  • 导航堆栈:
(lldb) up
(lldb) down
  1. 检查执行
  • 单步执行:
(lldb) s
(lldb) n
  • 继续执行:
(lldb) c
  1. 打印值
  • 打印变量值:
(lldb) p <value>
  1. 多进程调试
  • 附加到正在运行的进程:
lldb -p <pid>
  • 使用启动对话框参数调试进程启动:
--renderer-startup-dialog
  1. 使用 Xcode 调试
  • 生成 Xcode 项目:
gn gen --ide=xcode out/Default
  • 打开生成的 Xcode 项目:
open out/Default/all.xcodeproj

详细内容请参考 Chromium 调试指南

参考资料


本主页会定期更新,为了能够及时获得更新,敬请关注我:点击左下角的关注。也可以关注公众号:请在微信上搜索公众号“AI与编程之窗”并关注,或者扫描以下公众号二维码关注,以便在内容更新时直接向您推送。 

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI与编程之窗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值