编译适用于 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 调试指南。

参考资料

  • Chromium Mac 构建指南
  • 适用于 ARM Macs 的 Chromium 构建说明
  • GN 构建配置
  • GN 快速入门
  • Chromium 调试指南

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWDAWFAAFAWAWFAWF

创建两张表&#xff1a;部门&#xff08;dept&#xff09;和员工&#xff08;emp&#xff09; 创建视图v_emp_dept_id_1&#xff0c;查询销售部门的员工姓名和家庭住址 创建视图v_emp_dept&#xff0c;查询销售部门员工姓名和家庭住址及部门名称 创建视图v_dept_emp_count(dept…

Ubuntu使用Nginx部署uniapp打包的项目

使用uniapp导出web项目&#xff1a; 安装&#xff1a; sudo apt install nginx解压web.zip unzip web.zip移动到/var/www/html目录下&#xff1a; sudo cp -r ~/web/h5/ /var/www/html/重启Nginx&#xff1a; sudo service nginx restart浏览器访问&#xff1a;http://19…

Java高频面试基础知识点整理4

干货分享&#xff0c;感谢您的阅读&#xff01;背景​​​​​​高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09; 最全文章见&#xff1a;Java高频面试基础知识点整理 &#xff08;一&#xff09;Java基础高频知识考点 针对人员&#xff1a; 1.全部人员都…

算法学习笔记(8.4)-完全背包问题

目录 Question&#xff1a; 图例&#xff1a; 动态规划思路 2 代码实现&#xff1a; 3 空间优化&#xff1a; 代码实现&#xff1a; 下面是0-1背包和完全背包具体的例题&#xff1a; 代码实现&#xff1a; 图例&#xff1a; 空间优化代码示例 Question&#xff1a; 给定n个物品…

Tomcat组件概念和请求流程

Tomcat:是一个Servlet容器(实现了Container接口)&#xff0c;容器分层架构从上到下分为。Engine(List<Host>)->Host(List<Context>)->Context(List<Wrapper>)->Wrapper(List<Servlet>); Engine:引擎&#xff0c;Servlet 的顶层容器&#xff0…

UML建模案例分析-类图中的关系

概要 类图之间的关系比较多&#xff0c;绝大多数情况下重点关注的还是关联关系、组合、聚合这三种&#xff0c;最终是如何对应到代码上的。 例子 以订单为例&#xff1a;订单和订单项之间是组合关系&#xff0c;这和数据库实体之间不一样。数据库实体有主外键&#xff0c;开…

Java聚合跑腿系统对接云洋聚合跑腿系统源码低价快递小程序APP公众号源码

一站式解决方案 &#x1f680;引言&#xff1a;跑腿服务的市场需求与聚合趋势 在快节奏的现代生活中&#xff0c;跑腿服务成为了越来越多人的选择。为了满足这一市场需求&#xff0c;各大跑腿平台纷纷涌现。然而&#xff0c;如何将这些平台进行有效整合&#xff0c;提供更为便…

比特币交易繁忙的一天

早晨:市场开盘与准备工作 6:00 AM - 全球市场监测 交易员们早早起床,开始监测全球市场动态,尤其是亚洲市场的动向。通过查看新闻、分析报告和市场数据,了解可能影响比特币价格的因素。 7:00 AM - 团队会议 召开晨会,讨论当天的交易策略。团队分析前一天的交易情况,评…

HTML网页大设计-家乡天水

代码下载: https://pan.quark.cn/s/6bad4cfaefda

Windows下vscode配置C++环境

一、vscode下载及安装 vscode官网 选安装位置。 勾选这几项。 1.vscode界面中文配置 &#xff08;1&#xff09;点击扩展小图标&#xff0c;搜索插件&#xff0c;找到插件Chinese (Simplified) (简体中文) Language Pack&#xff0c;点击install。 &#xff08;2&#xf…

【vue组件库搭建07】Vitest单元测试

vitest官网 vue-test-utils 我们的测试框架选择的是 Vitest 和 vue-test-utils。两者的关系为&#xff1a; Vitest 提供测试方法&#xff1a;断言、Mock 、SpyOn 等方法。vue-test-utils: 挂载和渲染组件&#xff1a; Vue Test Utils 允许您在隔离中挂载组件&#xff0c;这意…

实用机器学习(快速入门)

前言 因为需要机器学习的助力&#xff0c;所以&#xff08;浅浅&#xff09;进修了一下。现在什么东西和AI结合一下感觉就好发文章了&#xff1b;我看了好多学习视频&#xff0c;发现机器学习实际上是数学&#xff0c;并不是常规的去学习代码什么的&#xff08;虽然代码也很简…

我应该使用 Pinia 还是 Vuex?

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 当项目逐渐变大时,状态管理的问题开始显现了出来。这时,两个强大的状态管理工具:Vuex 和 Pinia。该选择哪一个呢? 今天带各位大佬对比下两者的优势在何处,以及如何选择合适的状态管理库! 什么是 Vuex? Vuex 是 Vue.j…

时间管理的6张清单:做个时间清单控,提高时间颗粒度!

时间管理管理的到底是什么&#xff1f;我觉得其根本就是时间的颗粒度。这与大多数行业精英的时间管理不谋而合&#xff0c;也就是身段越高&#xff0c;时间管理的颗粒度越高。比尔盖茨的颗粒度是5分钟&#xff0c;精确到与人握手&#xff0c;按秒来安排&#xff01;接下来&…

Amesim-帮助文件翻译与总结-tigger(滞环)

元件应用说明 滞环一般应用于控制策略制定&#xff0c;该原件类似于一个开关&#xff0c;当输入值大于设置的high input threshold Value时输出high out value&#xff1b;小于low input threshold value时输出low output value。若输出值在high input threshold Value与low i…

大模型应用中CoT(思维链)技术详细介绍

大模型应用中CoT&#xff08;思维链&#xff09;技术详细介绍 1. 背景 在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;尤其是语言模型&#xff08;如GPT-3, BERT等&#xff09;的应用中&#xff0c;理解和推理复杂的文本信息变得越来越重要。Chain-of-Thought…

01. 课程简介

1. 课程简介 本课程的核心内容可以分为三个部分&#xff0c;分别是需要理解记忆的计算机底层基础&#xff0c;后端通用组件以及需要不断编码练习的数据结构和算法。 计算机底层基础可以包含计算机网络、操作系统、编译原理、计算机组成原理&#xff0c;后两者在面试中出现的频…

走进linux

1、为什么要使用linux 稳定性和可靠性&#xff1a; Linux内核以其稳定性而闻名&#xff0c;能够持续运行数月甚至数年而不需要重新启动。这对于服务器来说至关重要&#xff0c;因为它们需要保持长时间的稳定运行&#xff0c;以提供持续的服务 安全性&#xff1a; Linux系统…

解锁甘肃平凉传统面制品,大烤馍来袭

在平凉这片广袤而多彩的土地上&#xff0c;美食犹如璀璨星辰&#xff0c;点缀着人们的生活。其中各式各样的传统面点以其独特的风味和魅力&#xff0c;散发着诱人的香气。 食家巷大烤馍&#xff0c;作为甘肃传统面制品的代表之一&#xff0c;承载着悠久的历史和深厚的文化底蕴。…

postman录制设置

一、前言&#xff1a; ​ postman是一个很好接口调试或是测试工具&#xff0c;简单方便&#xff0c;不需要很复杂的流程与技术&#xff0c;并且也具备录制条件。对于接口不了解&#xff0c;没有明确对应的说明&#xff0c;但又想通过接口进行一些测试使用其录制是一个不错的办…