吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 859|回复: 5
收起左侧

[学习记录] 记一次由源码构建 V8的过程

  [复制链接]
andyhah 发表于 2023-8-16 17:20
本帖最后由 andyhah 于 2023-8-16 17:26 编辑

前言

一篇关于编译v8的工具文。记录了编译时的大概步骤,方便大伙编译时少踩坑,无脑跟步骤即可^。^
笔者的机器是m1的mac,如果使用linux编译,步骤因该大差不差。。。

v8官网

步骤

  1. 配置代{过}{滤}理

    笔者使用的是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变化

  2. 下载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
      ```
  3. 安装依赖

    • 进入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
  4. fetch v8

    • 进入v8-env,开始fetch

      fetch v8
    • 查看v8文件大小

      du -h -d=1 v8
      
      4G  v8
  5. 编译v8

    • 笔者使用ninja编译,首先生成ninja构建文件,这样会在v8路径下生成生成 out.gn/x64.release 文件夹

      cd v8
      ./tools/dev/v8gen.py x64.release
    • 开始编译,此过程也比较漫长,耐心等待

      ninja -C out.gn/x64.release
  6. 编译结束并测试

    • 编译完成后会在指定路径生成一个叫 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]### 前言

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wabisabi07 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

toplogo 发表于 2023-8-17 16:44
楼主想问一下学习在哪个网站学习比较好,或者有没有推荐学习的地方呀
 楼主| andyhah 发表于 2023-8-18 10:01
toplogo 发表于 2023-8-17 16:44
楼主想问一下学习在哪个网站学习比较好,或者有没有推荐学习的地方呀

没有具体的网站,多阅览多沟通,找自己节奏
toplogo 发表于 2023-8-22 12:10
andyhah 发表于 2023-8-18 10:01
没有具体的网站,多阅览多沟通,找自己节奏

感谢回复,谢谢楼主
doublecode 发表于 2023-8-28 22:13
开始编译之前不需要安装什么依赖吗
 楼主| andyhah 发表于 2023-8-29 17:33
doublecode 发表于 2023-8-28 22:13
开始编译之前不需要安装什么依赖吗

depot_tools就会装依赖,另外mac需要先安装xcode
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表