编译v8
终于下定决心要编译V8引擎,这里记录编译过程中的一些关键点
Arch Linux
-
安装Python:要安装2.x版本,因为Arch Linux的默认版本是3.x,执行
$ ln -sf /bin/python2 /bin/python - 翻墙:
shadowsocks-libev + polipo
开始时直接用shadowsocks,通过环境变量http_proxy=socks5://127.0.0.1:1080和https_proxy=socks5://127.0.0.1:1080实现Terminal代理,后来发现在同步工程时,depot_tools里的gsutil报警告,Google之,最后换方案:shadowsocks-libev提供socks代理,默认端口:1080polipo把socks代理转成http代理,默认端口:8123- 修改
git的socks代理配置 - 通过环境变量
NO_AUTH_BOTO_CONFIG,为gsutil指定代理参数1 2 3 4 5 6 7 8 9 10 11 12
# ~/.poliporc的内容 socksParentProxy = "127.0.0.1:1080" socksProxyType = socks5 diskCacheRoot = "~/.polipo-cache/" # 启动HTTP代理 $ polipo -c ~/.poliporc & # ~/.boto的内容 [Boto] proxy = 127.0.0.1 proxy_port = 8123
- 安装depot_tools:
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git$ export PATH=/path/to/depot_tools:$PATH$ gclient,程序会自动更新所依赖的工具
- 环境变量:
1 2
# 为gsutil指定代理参数 $ export NO_AUTH_BOTO_CONFIG=~/.boto
- 下载源码
fetch v8,只需要执行一次 - 同步工程
gclient sync
Windows 10
- 安装Python:要安装2.x版本
-
翻墙:直接用全局VPN
- 安装depot_tools:
- 下载程序包并且解压,注意:要完整解压
- 添加
PATH路径,注意:要添加到最前面 - 安装设置完毕后,打开
CMD直接运行gclient,程序会自动更新所依赖的工具
- 安装VS:
- 安装
VS2017,必须要安装Desktop development with C++与MFC and ATL support - 安装
Windows 10 SDK,一般在安装VS2017时会附带安装上,不过这时要手工去安装Debugging Tools For Windows,方法:控制面板->程序->程序和功能->找到Windows Software Development Kit->更改->选中更改,点下一步->勾选Debugging Tools For Windows,确认更改
- 安装
- 环境变量:
1 2 3 4 5 6
rem 是否使用depot_tools自带的Windows编译工具链,请设置为0 > set DEPOT_TOOLS_WIN_TOOLCHAIN=0 rem 指定VS版本,默认值是2017,如果是旧版本,请设置 > set GYP_MSVS_VERSION=2017 rem 指定VS安装路径,如果是自定义安装路径,请设置 > set GYP_MSVS_OVERRIDE_PATH=
- 下载源码
fetch v8,只需要执行一次 - 同步工程
gclient sync
安装时用到的几个命令
下面以Linux Terminal为例,Windows Command Line请自行作相应修改
首先进入V8的源码目录
./tools/dev/v8gen.py
此脚本其实只是gn命令的封装
./tools/dev/v8gen.py list打印所有支持的编译模式,如:1 2
x64.debug x64.release
./tools/dev/v8gen.py gen生成构建目录,gen是默认行为,可以省略,如:1 2 3 4 5
# 默认在out.gn目录下生成构建目录x64.release $ ./tools/dev/v8gen.py gen x64.release $ ./tools/dev/v8gen.py x64.release # 也可以自定义构建目录 $ ./tools/dev/v8gen.py gen -b x64.release ~/some_path/my_build_dir
gn
-
gn args out.gn/x64.debug --list打印指定构建目录的所有构建参数的当前值与默认值 -
gn args out.gn/x64.debug编辑指定构建目录的构建参数当然你也可以直接编辑
out.gn/x64.debug/args.gn文件
ninja
ninja -C out.gn/x64.debug完全编译,后面也可以指定构建目标,如:1
$ ninja -C out.gn/x64.debug v8
args.gn文件的几个关键构建参数
- Arch Linux
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 是否调试编译 is_debug = false # x64是指64位,x86是32位 target_cpu = "x64" # 是否编译动态库 is_component_build = true # use_sysroot = false # 是否使用libc++库 use_custom_libcxx = false # 是否编译静态库 v8_static_library = false # 是否使用快照模式 v8_use_snapshot = false
- Windows 10
1 2 3 4 5 6 7 8 9 10
# 是否调试编译 is_debug = false # x64是指64位,x86是32位 target_cpu = "x64" # 是否编译动态库 is_component_build = true # 是否编译静态库 v8_static_library = false # 是否使用快照模式 v8_use_snapshot = false
后记
最后,也不知道是我没找到还怎么滴,官方文档真的太让人绝望了:太旧,太简。
开始,在Linux上编译,一路磕磕绊绊编译出so,结果链接自己的代码时提示找不到v8::platform::NewDefaultPlatform,Google之只找到只言片语:说目前不支持动态链接,好,我又去编译成a,还是不行,两天后终于有人发贴才搞定,作为一名没怎么用过C/C++的码农,我能看懂前面帖子里的解释,但是让我去找出原因,有点难度。
接着,在Windows上编译,先是在公司的Win7+VS2015上编译失败,下班回家把Win10上的VS2015卸了装VS2017,因为自定义安装路径折腾了下好歹成功,回到公司总结了前面遇到的坑,Win7+VS2015还是失败,无奈下VS2015卸了装VS2017居然失败???Google也没找到什么资料了,看来看去,回想起家里装VS2017时好像手动勾了个SDK版本,但在公司装VS2017时看到默认已经勾了个就没去动,难道是Win 10 SDK版本的坑?本着死马当活马医,打开安装程序,发现默认安装的SDK版本是10.0.16299,后面还有几个版本,我把其中的10.0.15063也装上,重新编译,成功了,我无喜无悲!!!