一个用于 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))
这适用于 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
并调整两件事
Cflags
行中删除 /wasmer
,它应该变成:Cflags: -I/Users/helge/.wasmer/include
-lffi
添加到 Libs
行,它应该变成:Libs: -L/Users/helge/.wasmer/lib -lwasmer -lffi
(后者仅在链接静态库时才需要,但无论哪种方式都不会有坏处)。
要静态链接(推荐),请将 libwasmer.dylib
移开
mv ~/.wasmer/lib/libwasmer.dylib ~/.wasmer/lib/libwasmer.dylib-away
(动态链接也应该有效,但你需要确保 dylib 在动态库查找路径中。)
在一个单独的包中,因为它们携带了一些较大的二进制文件:SwiftyWasmerTests。
SwiftyWasmer 由 Always Right Institute 和 ZeeZide 带给你。 我们喜欢 反馈,GitHub 星星,很酷的 合同工作,大概是你可以想到的任何形式的赞扬。