V8预构建

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2023/03/12/v8-prebuild/



V8 是 Google 为 Chrome 浏览器设计的 JavaScript 执行引擎,其初衷与目标是为 Chrome 设计一个领先行业的高性能 JavaScript 引擎。V8之后的流行和广泛应用已经超过了单纯为Chrome服务的目的的,大量应用也通过嵌入V8获得了JavaScript相关能力。

V8的代码庞大,构建工具使用Ninja,由于外部依赖和网络问题,部分工具获取本来就比较困难,加上使用V8的场景一般需要交叉编译,比如在ubuntu上编译后给Android使用,编译费时费力。由于官方没有提供预构建包,这个工作必须要自己完成,网络上虽然有大量第三方个人构建的,但是由于配置复杂性和版本多样,很多并不符合需求。

V8的版本选择我比较偏好跟随Node,比如Node当前版本使用的V8版本为10.8.168.25。

首先是确定需求,比如我目前比较需要一个完整的静态包,那么需要的参数如下

is_component_build = false
use_custom_libcxx = false
v8_enable_i18n_support = false
v8_use_external_startup_data = false
v8_symbol_level = 0
v8_static_library = true
v8_monolithic = true

这样最终产物就是libv8_monolith.a。配置可以基于v8gen.py生成不同平台和系统的,然后再追加我们的参数,比如android armv8就可以使用

python3 ./tools/dev/v8gen.py arm64.release -vv -- '
target_os = "android"
target_cpu = "arm64"
v8_target_cpu = "arm64"
is_component_build = false
use_custom_libcxx = false
v8_enable_i18n_support = false
v8_use_external_startup_data = false
v8_symbol_level = 0
v8_static_library = true
v8_monolithic = true
'
ninja -C out.gn/arm64.release -t clean
ninja -C out.gn/arm64.release v8_monolith

基本的依赖和工具安装参考官方文档就可以了

cd ~
echo "=====[ Getting Depot Tools ]====="	
git clone -q https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$(pwd)/depot_tools:$PATH
gclient


mkdir v8
cd v8

echo "=====[ Fetching V8 ]====="
fetch v8
echo "target_os = ['android']" >> .gclient
cd v8
./build/install-build-deps-android.sh
git checkout $VERSION
gclient sync

不同平台和架构有少许区别,比如linux就不需要android相关依赖,最后选择的平台有Macos、Linux、Windows、Android x86、Android x86_64、Android armV7、android armV8。分别生成完成后再统一到一个zip中方便下载。

最终包大小为156 MB,使用时还可以根据需要进一步裁减。



本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2023/03/12/v8-prebuild/

发表评论