V8源码编译

127 阅读3分钟

保姆级源码编译静态lib(少走十八年弯路)

最近想编译一个V8引擎玩一玩,本来想找一些资料看看,发现编译V8的资料少之又少,没办法只能自己摸索着来了,中间遇到了很多的坑,耽误了很长时间!!!

环境准备

我为了和大家环境一致,选择了用W11虚拟机来做,一来可以防止污染本地环境,二来做错了可以快照恢复

  1. 全新W11虚拟机 ,硬盘最少给到100G,要不然会编译不出来报错内存不够;
  2. 安装有VS2022(安装上使用C++的桌面开发、通用Windows平台开发)

VS2022工具下载

这里不多做赘述,直接上图, 注意 win11sdk和win10sdk最好都勾上 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 启用SDK调试功能 在这里插入图片描述 设置环境变量,安装目录更改为自己的安装路径,depot_tools会根据该变量到系统中查找编译工具链

vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Community

depot_tools工具下载

这里是官网下载,我们选择离线下载 commondatastorage.googleapis.com/chrome-infr… 在这里插入图片描述

设置环境变量

  1. 设置环境变量DEPOT_TOOLS_WIN_TOOLCHAIN=0 在这里插入图片描述

  2. 复制刚才下载的depot_tools安装路径设置环境变量 在这里插入图片描述

源码编译安装nijia

git clone https://github.com/ninja-build/ninja.git
cd ninja
git checkout release

接下来打开vs的开发人员命令提示符Developer Command Prompt for VS 2022 在这里插入图片描述 python configure.py --bootstrap (这里的python环境是depot_tools里自带的) 运行完成之后再nijia目录下会出现nijia.exe,然后将nijia.exe移动到depot_tools目录下 在这里插入图片描述

拉取源码

设置代理,或者用科学上网设置全局代理,我使用的全局代理所以下面的我没设置

git config --global http.proxy http://127.0.0.1:xxxx
git config --global https.proxy http://127.0.0.1:xxxx
netsh winhttp set proxy 127.0.0.1:xxxx
set HTTP_PROXY=http://127.0.0.1:xxxx
set HTTPS_PROXY=http://127.0.0.1:xxxx

找个合适地方位置拉取代码,我这里拉取了两个小时,时间很久期间,最好什么都不要做,慢慢等待就好

fetch v8

拉取完成之后,进入文件夹

cd v8

这里切换分支,我这里选择的是12.5.99

# 获取所有标签
git fetch --all --tags

# 列出所有标签,找到你需要的版本标签
git tag -l

# 检出正确的标签
git checkout tags/12.5.99-pgo

# 同步依赖项
gclient sync

# 验证版本
git describe --tags

开始编译

这里参数我是在官网查看的,感兴趣可以去官网查

gn gen out.gn/x64.release.sample --args="dcheck_always_on=false is_component_build=false is_debug=false treat_warnings_as_errors=false use_custom_libcxx=false v8_deprecation_warnings=true v8_enable_disassembler=false v8_enable_i18n_support=true v8_enable_pointer_compression=false v8_enable_31bit_smis_on_64bit_arch=false v8_imminent_deprecation_warnings=true v8_monolithic=true v8_use_external_startup_data=false"

ninja -C out.gn/x64.release.sample

我这里编译花费了大概4个小时,估计是机械硬盘的原因,期间耐心等待,做好什么都别做 在这里插入图片描述

没报错基本就编译通过了,编译完成输出在out.gn/x64.release.sample\obj文件夹 在这里插入图片描述

仔细寻找可以看到v8_monolith.lib,这个就是我们要的lib静态库了 在这里插入图片描述 Visual Studio 2022调用导入头文件和lib库就没问题了 完结撒花!