Chromium和 V8 编译环境配置
系统要求
Chromium 开发环境需要满足以下系统要求:
- 一台 x86-64 架构的机器
- 至少 8GB 内存,建议使用超过 16GB 内存
- 至少 100GB 的可用磁盘空间
- 硬盘必须为 NTFS 格式(FAT32 格式无法使用,因为某些 Git 包文件大于 4GB)
- Windows 10 或更高版本
- Visual Studio 2022 (版本 ≥17.0.0)
详细环境配置指南
Visual Studio 完整配置
Chromium 构建需要 Visual Studio 2022(版本 ≥17.0.0)。虽然使用的是 clang-cl 编译器,但仍然需要 Visual Studio 的头文件、库和部分工具。Visual Studio Community Edition 也可以使用,只要它的许可证适用于您即可。
必须安装的组件:
- "使用 C++ 的桌面开发" 工作负载
- "MFC/ATL 支持" 子组件
- Windows 11 SDK,版本 10.0.26100.3323(可单独安装或在VS安装器中勾选)
- SDK 调试工具,版本 10.0.26100.3323 或更高(Chrome使用了大页面PDB文件)
可以通过命令行安装所需组件:
PATH_TO_INSTALLER.EXE ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--includeRecommended
如需构建 ARM64 Win32,需要额外参数:
PATH_TO_INSTALLER.EXE ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^
--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
--includeRecommended
Git 配置
安装 Git
如果先前没有安装Git,可以从Git官网下载最新版本的Git for Windows。
更新 Git
根据当前版本选择更新方式:
- 2.14.1或更早:需手动卸载Git,然后重新安装
- 2.14.2至2.16.1:运行
git update
- 2.16.1(2)及更高版本:运行
git update-git-for-windows
Git 性能优化
-
启用 untracked cache:
git update-index --test-untracked-cache git config core.untrackedCache true
-
启用 fsmonitor:
git config core.fsmonitor true
-
启用长路径支持:
git config --global core.longpaths true
-
基本Git配置:
git config --global user.name "My Name" git config --global user.email "my-name@chromium.org" git config --global core.autocrlf false git config --global core.filemode false git config --global core.preloadindex true git config --global core.fscache true git config --global branch.autosetuprebase always
下载源码
1. 代理设置
# Git 代理设置
git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890
# Windows 系统代理设置
netsh winhttp set proxy 127.0.0.1:7890
# 环境变量代理设置
set http_proxy=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890
# Privoxy 代理配置
# 从 https://www.privoxy.org/ 下载
# 通过源码分析使用的是golong的net/http库访问http/https,可通过环境变量设置代理
# 在C:\Program Files (x86)\Privoxy\config文件中加入:
forward-socks5t / 127.0.0.1:7890 .
listen-address 127.0.0.1:8118
# 我们要把socks5转化为http代理,因为cipd不支持socks5代理
set HTTP_PROXY=127.0.0.1:8118 # 注意不要加http://或者https://
set HTTPS_PROXY=127.0.0.1:8118 # 注意不要加http://或者https://
# 本地代理(VPN)要求1081端口是本地http/https代理服务
2. 配置拉取信息并下载源码
参考:chromium版本号
3. 三种拉取源码方式
方式一:手动配置下载信息,再下载
# 先配置
gclient config https://chromium.googlesource.com/chromium/src.git
# 后下载,'114.0.5735.358'为版本号
gclient sync --revision src@114.0.5735.358 --with_tags --with_branch_heads
方式二:fetch自动配置并下载
fetch v8
fetch chromium # 单独拉取这个的话,v8不要拉取
方式三:先通过 gitee 拉取,再切换到 google 仓库进行更新
git clone --depth 100 -b 114.0.5735.358 https://gitee.com/mirrors/chromium.git src
cd src
git remote set-url origin https://chromium.googlesource.com/chromium/src.git
cd ..
gclient config --unmanaged https://chromium.googlesource.com/chromium/src.git
# gclient 文件可能需要配置 `"checkout_pgo_profiles": True`
4. 更新工具,拉取或更新源码
gclient sync
Visual Studio 环境配置
1. 安装 Visual Studio 2022
2. 安装工作载荷,以下为必选项
3. 启用 SDK 调试功能
4. 设置环境变量,depot_tools 会根据该变量到系统中查找编译工具链
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Professional
编译
V8 编译
生成编译文件
gn args out/x64
配置编译参数/文件
gn gen --ide=vs2022 out/v8_x64 --args='is_debug=false target_cpu="x64" v8_static_library=true use_goma=true'
编译
ninja -C out/x64
编译参数
is_component_build = false
is_debug = false
target_cpu = "x64"
v8_enable_sandbox = true
v8_enable_backtrace = true
v8_enable_disassembler = true
v8_enable_object_print = true
v8_enable_verify_heap = true
dcheck_always_on = false
预定义宏
V8_COMPRESS_POINTERS
V8_ENABLE_SANDBOX
Chromium 编译
调试版本
# 指定使用 vs2022, 如使用 vs, 默认为 vs2019
# 必须带编译参数生成项目,防止生成的 vs 工程与编译参数的工程不符
gn args --ide=vs2022 out/x86_debug
gn gen --ide=vs2022 --filters=//chrome --no-deps out\x86_debug
如果弹出报错 gn.py: Could not find gn executable at: ['C:\src\chromium\src\buildtools\win\gn\gn.exe', 'C:\src\chromium\src\buildtools\win\gn.exe']
,请访问 GN 官方仓库 下载 gn.exe
并放到相应的文件夹中。
如果还有其他报错 Unable to load "C:/src/chromium/src/build/config/gclient_args.gni"
,可能是下载过程中缺失文件。执行:
gclient sync --force
继续安装过程中若遇到报错 FileNotFoundError: [Errno 2] No such file or directory: 'C:\src\chromium\src\build\util\LASTCHANGE'
,在 src
目录下运行:
python3 /build/util/lastchange.py build/util/LASTCHANGE
如果继续报错:
C:\src\chromium\src>gn args --ide=vs2022 out/x86_debug
并提示工具链过时,请运行:
gclient runhooks
如果弹出错误提示需安装 Windows 10 SDK 版本 10.0.22621.0,请打开 SDK 管理器并勾选相应功能。
找到相应程序并点击修改,确保选择 "Debugging Tools for Windows" 特性。
选择 Change。
确保勾选上此选项。
再次执行:
gn args --ide=vs2022 out/x86_debug
调试版本参数
is_debug=true # 生成调试版本
target_cpu="x86" # x86生成比x64快
is_component_build=true # 通过动态链接库方式生成
enable_nacl=false
proprietary_codecs=true
ffmpeg_branding="Chrome"
use_v8_context_snapshot=true # 启用v8快照功能
google_api_key="AIzaSyDCNWofwOkYgeS3aBnd901sIJqSS4p3nKc" # 内部版本
google_default_client_id ="752805503192-gigd4quq46757vjupq4rv5oga3sougnp.apps.googleusercontent.com"
google_default_client_secret="bEbljK3NYvuRBe-zn7UyS4Zy"
ninja -C out/x86_debug chrome
发布版本
gn args --ide=vs2022 out/x64_release
发布版本参数
target_os = "win" # windows平台
target_cpu="x86" # x86
chrome_pgo_phase=0
is_debug=false # 生成不调试版本
is_official_build=true # 生成官方标准版
is_component_build=true # 通过静态库方式生成
use_v8_context_snapshot=true # 启用v8快照功能
google_api_key="AIzaSyDCNWofwOkYgeS3aBnd901sIJqSS4p3nKc" # 内部版本
google_default_client_id ="752805503192-gigd4quq46757vjupq4rv5oga3sougnp.apps.googleusercontent.com"
google_default_client_secret="bEbljK3NYvuRBe-zn7UyS4Zy"
ninja -C out/x64_release chrome
带参数的项目生成命令
# 指定使用 vs2022, 如使用 vs, 默认为 vs2019
# 必须带编译参数生成项目,防止生成的 vs 工程与编译参数的工程不符
gn gen --ide=vs2022 out\Debug_x86 --args='is_debug=true is_component_build=true enable_nacl=false target_cpu="x86" proprietary_codecs=true ffmpeg_branding="Chrome" use_v8_context_snapshot=true is_official_build=true'
API密钥
google_api_key="AIzaSyDCNWofwOkYgeS3aBnd901sIJqSS4p3nKc"
google_default_client_id ="752805503192-gigd4quq46757vjupq4rv5oga3sougnp.apps.googleusercontent.com"
google_default_client_secret="bEbljK3NYvuRBe-zn7UyS4Zy"
Visual Studio 配置
Visual Studio 打开编译后的 all.sln
。
如果发现报错:
设置 src/chrome/chrome
为启动项目。
如发现错误缺少 ninja.exe
,请将其放入最初配置的 depot_tools
文件夹中。
常见错误处理
遇到 gbk
编码报错时,可以在相应的 Python 文件中添加 ,encoding='UTF-8'
。
这种 UTF-8 问题其实可以忽略,编译仍会成功。
如果编译release版本时遇到PGO相关错误,则在src/out/*/args.gn
加上chrome_pgo_phase=0
,然后运行:
gclient runhooks
也可以直接在GN参数中设置chrome_pgo_phase = 0
来禁用PGO优化。
后续计划
过cdp 魔改指纹
番外
交流群v: 群满➕v:a1140601003
qq: