V8 编译步骤及踩坑记录。
环境准备
科学的网络环境
Visual Studio 2019 使用 C++ 的桌面开发
Windows 10 SDK 10.0.19041.0 以上
Windows SDK Debugging Tools (到设置中修改安装)
Git
Python
步骤
获取 depot_tools
如果有代理:
1 | > set HTTP_PROXY=代理地址 |
拉代码:
1 | > git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
并把 depot_tools
目录添加到 PATH
环境变量。
设置 DEPOT_TOOLS_WIN_TOOLCHAIN
环境变量值为 0
。
设置 vs2019_install
环境变量值为 VS 安装路径如 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
。
更新 depot_tools 依赖
然后:
1 | > gclient |
坑 1:需要科学的网络环境,而且不会有任何输出,网速慢会耗时很久,静默下载的东西会出现在 depot_tools
根目录下,耐心等吧。
获取 V8 源码
1 | > mkdir C:\v8 |
坑 2:同样需要科学的网络环境,网速慢会耗时很久,而且仓库七百八 M 很大,这一步很容易中断,中断后重新拉:
1 | C:\v8> gclient sync --nohooks |
拉完代码以后检出到想构建的分支或标签后还要再跑 gclient sync
,这一次同步应该不会太久。
1 | C:\v8\v8> git checkout 8.6.51 |
坑 2.1:如果加了 --nohooks
选项,同步以后不会跑 hooks,导致有些东西缺失:
缺少最后更新信息:
1 | C:\v8\v8> python .\build\util\lastchange.py .\build\util\LASTCHANGE |
不存在 third_party\llvm-build\Release+Asserts\bin\clang-cl.exe
:
1 | C:\v8\v8> python .\tools\clang\scripts\update.py |
坑 2.1.1:同样需要科学的网络环境,可以用其他手段把输出的压缩包地址下载下来,手动解压到 third_party\llvm-build\Release+Asserts
编译静态库
到这里就不用科学的网络环境了,所有工具链已经准备完毕。
生成 ninja 配置:
1 | C:\v8\v8> python .\tools\dev\v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false use_custom_libcxx=false is_component_build=false treat_warnings_as_errors=false v8_symbol_level=0 |
也可以手动把参数写进 out.gn\x64.release\args.gn
:
1 | is_debug = false |
编译:
1 | C:\v8\v8> ninja -C .\out.gn\x64.release v8_monolith -j 14 |
坑 3:不加 treat_warnings_as_errors=false
会报错编译失败,不加 v8_symbol_level=0
编译出来的静态库差不多 800M 的大小。
等个十分钟左右,输出 out.gn\x64.release\obj\v8_monolith.lib
构建 Hello World 示例
把 v8_monolith.lib
和 v8\include
复制出来
包含目录要把复制出来的 v8\include
加进去,预定义好 V8_COMPRESS_POINTERS
,库要包含 Dbghelp.lib
和 winmm.lib
。