Windows 下从 Chromium/V8 源码编译 V8 10.8.168.25

前言

本文记录一次在 Windows 环境下,从已有 Chromium checkout 中单独编译 V8 10.8.168.25 的完整过程。

本次目标产物是 V8 单体静态库:

text 复制代码
v8_monolith.lib

如果需要 V8 命令行工具,也可以额外编译:

text 复制代码
d8.exe

环境说明

本文使用的本地目录如下:

text 复制代码
C:\chromium119

已有 Chromium 目录:

text 复制代码
C:\chromium119\src

已有 depot_tools:

text 复制代码
C:\chromium119\depot_tools

本次新建的 V8 独立目录:

text 复制代码
C:\chromium119\v8-10.8.168.25

当前机器已安装的 Windows SDK:

text 复制代码
10.0.22621.0
10.0.26100.0

1. 确认本地是否有 V8 版本 tag

先在已有 Chromium checkout 的 V8 仓库中确认 tag 是否存在:

powershell 复制代码
git -C C:\chromium119\src\v8 tag --list "10.8.168.25"

如果输出:

text 复制代码
10.8.168.25

说明本地已经有这个 tag。

查看版本提交信息:

powershell 复制代码
git -C C:\chromium119\src\v8 show -s --format="%H %ci %s" 10.8.168.25

本次对应提交为:

text 复制代码
18a6255a7b7c82e94089589396db33b2f66f83a0 2022-12-20 14:51:43 +0000 Version 10.8.168.25

2. 创建独立 V8 worktree

不要直接切换 C:\chromium119\src\v8,因为它属于 Chromium 119 checkout,当前版本是 V8 11.9.169.6,直接切换会影响原来的 Chromium 构建目录。

推荐创建独立 worktree:

powershell 复制代码
git -C C:\chromium119\src\v8 worktree add C:\chromium119\v8-10.8.168.25 10.8.168.25

确认版本:

powershell 复制代码
git -C C:\chromium119\v8-10.8.168.25 describe --tags --always

输出应为:

text 复制代码
10.8.168.25

3. 为独立 V8 目录添加 .gclient

V8 独立构建需要 build、buildtools、third_party/icu 等依赖。新建:

text 复制代码
C:\chromium119\v8-10.8.168.25\.gclient

内容如下:

python 复制代码
solutions = [
  {
    "name": ".",
    "url": "https://chromium.googlesource.com/v8/v8.git",
    "deps_file": "DEPS",
    "managed": False,
    "custom_deps": {},
    "custom_vars": {},
  },
]
cache_dir = "C:\\chromium119\\git_cache"

这里复用已有的 Chromium git cache,避免重复下载大量 Git 对象。

4. 同步依赖

先配置 depot_tools 到 PATH,并关闭 depot_tools 自动更新:

powershell 复制代码
cd C:\chromium119\v8-10.8.168.25
$env:DEPOT_TOOLS_UPDATE='0'
$env:PATH='C:\chromium119\depot_tools;' + $env:PATH

同步依赖:

powershell 复制代码
gclient sync --no-history --nohooks

然后运行 hooks:

powershell 复制代码
gclient runhooks

hooks 会完成这些工作:

  • 下载或校验 Clang
  • 生成 build/util/LASTCHANGE
  • 下载部分测试包
  • 安装 vpython 环境

5. 处理 Windows SDK 版本问题

V8 10.8.168.25 的旧版构建脚本中硬编码了 Windows SDK:

text 复制代码
10.0.20348.0

如果机器上没有这个 SDK,gn gen 会报错:

text 复制代码
Exception: Path "C:\Program Files (x86)\Windows Kits\10\\include\10.0.20348.0\\um" from environment variable "include" does not exist.

本机实际安装的是:

text 复制代码
10.0.22621.0
10.0.26100.0

可以查看:

powershell 复制代码
Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\Include'
Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\Lib'

因此只在独立 V8 worktree 中修改:

text 复制代码
C:\chromium119\v8-10.8.168.25\build\toolchain\win\setup_toolchain.py

将:

python 复制代码
args.append('10.0.20348.0')

改为:

python 复制代码
args.append('10.0.22621.0')

注意:这个修改只影响 C:\chromium119\v8-10.8.168.25,不影响原 Chromium 119 目录。

6. 配置 GN 参数

创建输出目录:

powershell 复制代码
New-Item -ItemType Directory -Force C:\chromium119\v8-10.8.168.25\out\x64.release | Out-Null

创建:

text 复制代码
C:\chromium119\v8-10.8.168.25\out\x64.release\args.gn

内容如下:

gn 复制代码
is_debug = false
target_cpu = "x64"
is_component_build = false
v8_monolithic = true
v8_use_external_startup_data = false
v8_enable_i18n_support = false

参数说明:

  • is_debug = false:Release 构建
  • target_cpu = "x64":构建 x64 目标
  • is_component_build = false:关闭组件构建
  • v8_monolithic = true:生成单体静态库 v8_monolith.lib
  • v8_use_external_startup_data = false:不额外生成外部 snapshot blob
  • v8_enable_i18n_support = false:关闭 ICU 国际化支持,减少依赖

生成 Ninja 文件:

powershell 复制代码
gn gen out\x64.release

成功时会看到类似输出:

text 复制代码
Done. Made 178 targets from 97 files

7. 编译 v8_monolith.lib

执行:

powershell 复制代码
autoninja -C out\x64.release v8_monolith

成功后产物在:

text 复制代码
C:\chromium119\v8-10.8.168.25\out\x64.release\obj\v8_monolith.lib

本次生成的文件大小:

text 复制代码
892,289,528 bytes

8. 整理可分发目录

为了方便其他项目使用,可以整理一个 package 目录:

powershell 复制代码
$pkg='C:\chromium119\v8-10.8.168.25\package\x64.release'
New-Item -ItemType Directory -Force $pkg | Out-Null
Copy-Item -Recurse -Force C:\chromium119\v8-10.8.168.25\include $pkg\include
Copy-Item -Force C:\chromium119\v8-10.8.168.25\out\x64.release\obj\v8_monolith.lib $pkg\v8_monolith.lib
Copy-Item -Force C:\chromium119\v8-10.8.168.25\out\x64.release\args.gn $pkg\args.gn
Copy-Item -Force C:\chromium119\v8-10.8.168.25\out\x64.release\v8_build_config.json $pkg\v8_build_config.json

最终目录:

text 复制代码
C:\chromium119\v8-10.8.168.25\package\x64.release

包含:

text 复制代码
include
v8_monolith.lib
args.gn
v8_build_config.json

9. 如果需要 d8.exe

本文默认生成的是静态库,不会生成 exe。

如果需要 V8 命令行工具 d8.exe,额外执行:

powershell 复制代码
cd C:\chromium119\v8-10.8.168.25
$env:DEPOT_TOOLS_UPDATE='0'
$env:PATH='C:\chromium119\depot_tools;' + $env:PATH
autoninja -C out\x64.release d8

生成位置:

text 复制代码
C:\chromium119\v8-10.8.168.25\out\x64.release\d8.exe

如果想把 d8.exe 也放到 package 目录:

powershell 复制代码
Copy-Item -Force C:\chromium119\v8-10.8.168.25\out\x64.release\d8.exe C:\chromium119\v8-10.8.168.25\package\x64.release\d8.exe

10. 常见问题

gclient 尝试更新 depot_tools 失败

如果看到:

text 复制代码
Failed to update depot_tools.

可以关闭 depot_tools 自动更新:

powershell 复制代码
$env:DEPOT_TOOLS_UPDATE='0'

缺少 LASTCHANGE 或 Clang 版本不匹配

如果 gn gen 报:

text 复制代码
Did you run "gclient sync"?
FileNotFoundError: build\util\LASTCHANGE.committime

说明 hooks 没跑完整,执行:

powershell 复制代码
gclient runhooks

Windows SDK 10.0.20348.0 不存在

先查看本机 SDK:

powershell 复制代码
Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\Include'

然后修改独立 V8 目录中的:

text 复制代码
build\toolchain\win\setup_toolchain.py

将硬编码 SDK 版本改为本机实际存在的版本。

11. 本次构建结果

本次最终产物:

text 复制代码
C:\chromium119\v8-10.8.168.25\package\x64.release\v8_monolith.lib

构建配置:

json 复制代码
{
  "current_cpu": "x64",
  "is_component_build": false,
  "is_debug": false,
  "target_cpu": "x64",
  "v8_enable_i18n_support": false,
  "v8_enable_pointer_compression": true,
  "v8_enable_sandbox": true,
  "v8_enable_webassembly": true,
  "v8_target_cpu": "x64"
}

总结:

  • V8 版本:10.8.168.25
  • 构建目标:v8_monolith
  • 构建模式:x64 Release
  • 主要产物:v8_monolith.lib
  • 可选 exe:d8.exe
相关推荐
Thneonl2 小时前
桌宠穿透不是一行 SetWindowLong
windows·程序员
艺杯羹20 小时前
Windows原生软件锁设计:从暴力杀进程丢数据到零轮询事件驱动架构
windows·系统架构·开源·开源软件·内存管理·开源协议
csdn_aspnet1 天前
Redis 入门:Windows、Mac安装指南
数据库·windows·redis·缓存·mac
没差c2 天前
winsw将jar、nginx等注册为Windows服务
windows·nginx·jar
光谱SpectrAI2 天前
Claude Code 2.1.318 的隐私模块:4 条命令,拦了 2 条
windows
Hello_Pyhx2 天前
NWinfo 导出 Windows 硬件信息:从 JSON 报告到缺项排查
windows·json
百事牛科技3 天前
Excel的三种密码:防看、防存、防乱改,各管各的
windows·excel
the3clipse4 天前
MPC-HC 下载安装与最佳配置教程:免费开源、轻量无广告、支持 4K 硬解的 Windows 播放器
windows·播放器·安装教程·硬件加速·mpc-hc·字幕设置·lav filters
独隅4 天前
WebStorm Windows 版 React / Next.js 实战替换指南
javascript·windows·webstorm
陈工大模型4 天前
2026年11月最新免费解压软件横评:7-Zip 、 Win解压缩名列前茅
windows·软件工程·7-zip·压缩软件