SwiftyWasmer

一个用于 Wasmer WebAssembly 运行时的 Swift API。

SwiftyWasmer 为 Swift 编程语言打包了 Wasmer C API,即它提供了一个带有正确模块映射的 CWasmer 系统库,以及一个带有优雅 Swift 风格 API 的 Wasmer 模块,用于 Wasmer。

注意:这是用于从 Swift 主程序中嵌入/运行 WebAssembly (Wasm) 模块。它不是关于将 Swift 编译为 WebAssembly(这方面有 SwiftWasm 项目)。

它看起来像什么? 像这样

import Wasmer

// Just load a file into memory
let wasmFile = URL(fileURLWithPath: "sum.wasm")
let wasmData = try Data(contentsOf: wasmFile)

// Compile the Data into a module, and instantiate that
let module   = try WebAssembly.Module  (wasmData)
let instance = try WebAssembly.Instance(module)

// Run a function exported by the Module
let results  = try instance.exports.sum(.i32(7), .i32(8))

Swift 的 Wasmer 安装

这适用于 Intel 或 M1 Mac。

安装 Wasmer 本身很容易

curl https://get.wasmer.io -sSfL | sh

或者安装一个压缩包:在任何你喜欢的地方安装 Wasmer 1.0.0

为了工作,Swift Package Manager 需要一个 pkg-config 文件在系统位置。 幸运的是 wasmer config 可以为你生成一个

wasmer config --pkg-config > /usr/local/lib/pkgconfig/wasmer.pc

不幸的是 生成的文件在 1.0.0 中 有点问题。 在你喜欢的编辑器中打开该文件

emacs /usr/local/lib/pkgconfig/wasmer.pc
mate  /usr/local/lib/pkgconfig/wasmer.pc
open  /usr/local/lib/pkgconfig/wasmer.pc

并调整两件事

  1. Cflags 行中删除 /wasmer,它应该变成:Cflags: -I/Users/helge/.wasmer/include
  2. -lffi 添加到 Libs 行,它应该变成:Libs: -L/Users/helge/.wasmer/lib -lwasmer -lffi

(后者仅在链接静态库时才需要,但无论哪种方式都不会有坏处)。

要静态链接(推荐),请将 libwasmer.dylib 移开

mv ~/.wasmer/lib/libwasmer.dylib ~/.wasmer/lib/libwasmer.dylib-away

(动态链接也应该有效,但你需要确保 dylib 在动态库查找路径中。)

测试

在一个单独的包中,因为它们携带了一些较大的二进制文件:SwiftyWasmerTests

链接

SwiftyWasmerAlways Right InstituteZeeZide 带给你。 我们喜欢 反馈,GitHub 星星,很酷的 合同工作,大概是你可以想到的任何形式的赞扬。