编译chromium/v8

61 阅读6分钟

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 也可以使用,只要它的许可证适用于您即可。

必须安装的组件:
  1. "使用 C++ 的桌面开发" 工作负载
  2. "MFC/ATL 支持" 子组件
  3. Windows 11 SDK,版本 10.0.26100.3323(可单独安装或在VS安装器中勾选)
  4. 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 性能优化
  1. 启用 untracked cache

    git update-index --test-untracked-cache
    git config core.untrackedCache true
    
  2. 启用 fsmonitor

    git config core.fsmonitor true
    
  3. 启用长路径支持

    git config --global core.longpaths true
    
  4. 基本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: