本文将指导你在 Ubuntu 24.04 LTS 系统上如何准备并编译 V8 引擎,包括如何使用 depot_tools
工具来同步代码,以及如何编译 x64 和 arm64 的静态库。
1. 准备 Linux 系统
本教程基于 Ubuntu 24.04 LTS 最新版本。
1.1 安装 depot_tools
首先,安装 V8 编译所需的 depot_tools
工具。运行以下命令克隆该工具:
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
接下来,添加 depot_tools
到你的 PATH
环境变量中。可以将以下内容添加到 ~/.bashrc
或 ~/.zshrc
文件中:
$ export PATH=/path/to/depot_tools:$PATH
确保 /path/to/depot_tools
是你实际存放 depot_tools
的路径。
1.2 初始化 V8 项目
使用 depot_tools
工具初始化 V8 项目。在终端中运行以下命令:
gclient
然后创建 V8 项目的目录:
mkdir ~/v8
cd ~/v8
fetch v8
cd v8
2. 切换分支
在 V8 项目的 Git 仓库中,切换到指定的分支。通常情况下,你需要切换到 branch-heads
分支。你可以查看所有分支并切换到你需要的版本。
2.1 查看所有远程分支
查看 V8 项目的所有远程分支,并过滤出 branch-heads
分支:
$ git branch --remotes | grep branch-heads/
这将显示所有远程的 branch-heads
分支,例如:
origin/branch-heads/13.1
origin/branch-heads/13.2
2.2 切换到指定分支
使用以下命令切换到指定的 branch-heads
分支,并创建本地分支:
$ git checkout branch-heads/13.1 -b sample -t
这条命令会:
-
切换到
branch-heads/13.1
分支 -
创建一个名为
sample
的本地分支,并跟踪远程分支branch-heads/13.1
3. 编译 x64 静态库
3.1 创建构建配置
使用 v8gen.py
脚本为 x64 系统创建构建配置:
tools/dev/v8gen.py x64.release.sample
你可以通过运行以下命令检查并手动编辑构建配置:
gn args out.gn/x64.release.sample
3.2 构建静态库
在 Linux 64 位系统上,使用 ninja
构建静态库:
ninja -C out.gn/x64.release.sample v8_monolith
3.3 编译示例代码
编译一个简单的 hello-world.cc
文件,并链接到刚刚构建的 V8 静态库。在 64 位 Linux 系统上,使用 GNU 编译器和 LLD 链接器编译:
g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -fuse-ld=lld -lv8_monolith -lv8_libbase -lv8_libplatform -ldl -Lout.gn/x64.release.sample/obj/ -pthread -std=c++20 -DV8_COMPRESS_POINTERS -DV8_ENABLE_SANDBOX
3.4 处理 ICU 数据文件
如果你使用更复杂的代码,V8 在没有 ICU 数据文件的情况下会报错。你需要将 icudtl.dat
文件复制到你的二进制文件所在的目录:
cp out.gn/x64.release.sample/icudtl.dat .
3.5 运行示例代码
在 Linux 系统中,运行 hello_world
可执行文件:
./hello_world
4. 编译 arm64 静态库
V8 的许多应用场景是在移动平台上,尤其是 Android 平台。下面是如何为 Android 平台编译 V8。
4.1 修改 .gclient
文件
编辑 .gclient
文件,添加 target_os
配置,指定目标平台为 Android:
solutions = [
{
"name": "v8",
"url": "https://chromium.googlesource.com/v8/v8.git",
"deps_file": "DEPS",
"managed": False,
"custom_deps": {},
},
]
target_os = ['android']
4.2 更新依赖库
执行以下命令更新所有依赖库和工具:
$ gclient sync
4.3 创建 arm64 构建配置
使用 gn
命令生成 arm64 构建配置:
$ gn gen out/arm64.release
4.4 编辑构建参数
编辑 out/arm64.release/args.gn
文件,根据实际情况调整参数:
v8_static_library = true
is_debug = false
target_os = "android"
target_cpu = "arm64"
v8_enable_backtrace = true
v8_target_cpu = "arm64"
is_component_build = false
v8_monolithic = true
v8_use_external_startup_data = false
symbol_level = 0
strip_debug_info = true
v8_enable_i18n_support = false
v8_enable_fast_mksnapshot = true
use_custom_libcxx = false
4.5 编译 arm64 静态库
运行以下命令开始编译:
$ autoninja -C out/arm64.release v8_monolith
总结
本文介绍了如何在 Ubuntu 系统上使用 depot_tools
工具初始化和编译 V8 引擎,涵盖了 x64 和 arm64 平台的静态库编译过程。还提供了如何切换和查看分支的操作说明,希望能帮助你在开发中顺利使用 V8 引擎。如果在编译过程中遇到问题,可以参考 V8 官方文档或社区获取更多支持。