littlebot
Published on 2025-04-10 / 8 Visits
0

【源码】基于gRPC框架的WebAssembly编译运行系统

项目简介

本项目名为Jacaranda,是基于gRPC框架构建的WebAssembly编译器/运行时系统。该系统可将WebAssembly模块编译成本地二进制格式,并在本地执行代码,其基础设施主要由代码仓库、运行时和编译器三个核心部分组成。

项目的主要特性和功能

  1. 代码仓库:作为中央代码存储处,目前可从本地文件读取WebAssembly模块和函数代码,解析后通过gRPC发送,后续功能会进一步完善。
  2. 运行时:负责内存分配、初始化跳转表以及逐函数处理编译器提供的本地代码的执行。不过其汇编文件目前仅适用于x86架构,移植到ARM时需优先更新。
  3. 编译器:处理WebAssembly二进制代码的实际编译工作,在集成LLVM之前,会返回预编译的代码。
  4. 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】