项目简介
本项目名为Jacaranda,是基于gRPC框架构建的WebAssembly编译器/运行时系统。该系统可将WebAssembly模块编译成本地二进制格式,并在本地执行代码,其基础设施主要由代码仓库、运行时和编译器三个核心部分组成。
项目的主要特性和功能
- 代码仓库:作为中央代码存储处,目前可从本地文件读取WebAssembly模块和函数代码,解析后通过gRPC发送,后续功能会进一步完善。
- 运行时:负责内存分配、初始化跳转表以及逐函数处理编译器提供的本地代码的执行。不过其汇编文件目前仅适用于x86架构,移植到ARM时需优先更新。
- 编译器:处理WebAssembly二进制代码的实际编译工作,在集成LLVM之前,会返回预编译的代码。
- Envoy组件:处理服务间的通信,负责将信息序列化和反序列化为协议缓冲区,并通过存根进行远程过程调用,借助gRPC实现双向通信。
安装使用步骤
前提条件
用户已下载本项目的源码文件,并且确保已安装gRPC和其他必要的依赖库。
构建项目
bash
cd jacaranda
mkdir build && cd build
cmake ..
make
执行项目
需打开三个独立的终端,按以下顺序执行,因为每个组件都依赖前一个服务正常运行:
bash
./exe/repository
./exe/compiler
之后可使用运行时可执行文件执行WebAssembly程序,注意当前编译器返回预编译的x86代码,输入的.wasm
文件对程序输出无影响:
bash
./exe/runtime [file.wasm] [program arguments]
调用约定说明
项目目前采用简单的调用约定,参数通过堆栈传递,使用寄存器保存当前函数索引和跳转表指针。未来可能会采用如System V这样更标准的调用约定。
示例
当前编译器仅返回一个非常基础的加法程序的预编译x86代码,期望输出为两个程序参数的和,例如执行./exe/runtime add.wasm 5 6
,应输出11
。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】