好友
阅读权限 10
听众
最后登录 1970-1-1
本帖最后由 andyhah 于 2023-8-16 17:26 编辑
前言
一篇关于编译v8的工具文。记录了编译时的大概步骤,方便大伙编译时少踩坑,无脑跟步骤即可^。^
笔者的机器是m1的mac,如果使用linux编译,步骤因该大差不差。。。
v8官网
步骤
配置代{过}{滤}理
笔者使用的是mac,终端可能开了代{过}{滤}理也不能使用代{过}{滤}理,为此给终端配置可控制开关的代{过}{滤}理。
这是笔者使用的代{过}{滤}理,安利一波~
将下面代{过}{滤}理写入 ~/.zshrc 或 ~/.zprefile文件中,再source 使用配置
# proxy
alias clashproxy='export http_proxy=http://127.0.0.1:7890;export https_proxy=http://127.0.0.1:7890;'
alias unclashproxy='unset http_proxy https_proxy'
配置好后可通过 clashproxy 给终端启用代{过}{滤}理,使用 unclashproxy 关闭使用。可通过 curl ip.sb 查看IP变化
下载depot_tools
创建编译环境的文件夹
mkdir v8-env
cd v8-env
开始获取depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
将depot_tools路径添加进环境变量,并更新环境变量
```text
export PATH = "所在目录/depot_tools":$PATH
```
安装依赖
进入depot_tools,安装依赖
gclient sync
执行上面步骤,可能会失败。可在depot_tools文件下生成 .gclient 文件,文件内容如下
solutions = [
{
"managed": False,
"name": "src",
"url": "https://chromium.googlesource.com/chromium/src.git",
"custom_deps": {},
"deps_file": ".DEPS.git",
"safesync_url": "",
},
]
创建文件后,再执行 gclient sync ,开始下载并进入漫长的等待。。。
# 查看文件下载大小
du -h -d=1 depot_tools
# 笔者下载后有70G+,读者流量酌情下载
74G depot_tools
fetch v8
进入v8-env,开始fetch
fetch v8
查看v8文件大小
du -h -d=1 v8
4G v8
编译v8
笔者使用ninja编译,首先生成ninja构建文件,这样会在v8路径下生成生成 out.gn/x64.release 文件夹
cd v8
./tools/dev/v8gen.py x64.release
开始编译,此过程也比较漫长,耐心等待
ninja -C out.gn/x64.release
编译结束并测试
编译完成后会在指定路径生成一个叫 d8 的动态链接库
# 查看d8类型
# mac的动态链接库的文件类型是*mach-o*
# linux下的为 *elf*
# window下的为 *pe*
file out.gn/x64.release/d8
out.gn/x64.release/d8: Mach-O 64-bit executable x86_64
# 查看d8大小
du -h out.gn/x64.release/d8
38M out.gn/x64.release/d8
使用d8测试脚本
d8 是 v8 的简易 CLI,它提供了一个极简的 JS 宿主环境,可用于 v8 的学习和调试,比起 nodejs,它更精简和专注。除了 JS 以外,d8 也具有 WASM 的解释功能,可以方便地用于测试 WASM 模块的性能。如果你的 WASM 是要在浏览器里运行的,比起 wasmtime,v8(以及 spidermonkey 等主流浏览器 JS 引擎)显然是个更合适的命令行测试方案。
/*
js简易脚本
执行命令 ./out.gn/x64.release/d8 ../t.js,便能在终端看到打印内容
*/
for (var i = 0;i < 100;i++){
console.log(i);
}
总结
至此,编译过程结束,笔者使用mac下载编译,整个过程丝滑顺畅,如仍有疑问,请自行阅览相关资料解决或可留下评论。
参考文章
[md]### 前言
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。