1 个不稳定版本

0.0.1 2024年6月5日

#40 in #exists

Unlicense OR MIT OR Apache-2.0

27KB

walibc:为 "bare metal wasm" 目标提供的 libc。

[!NOTE]

walibc 目前尚不完整,不可用,且目前不接受外部贡献(暂时如此)。

这个库的目标是允许针对 wasm32-unknown-unknown(例如)的 Rust 代码能够使用捆绑 C 库的 Rust 包。这些目标是实际的裸机,不包含自己的 C 库,即使是像 memcpy 这样的函数也不可用(因为 string.h 不存在)。不幸的是,它们也被广泛使用,因为它们不需要安装单独的 SDK(如 WASI SDK 或 Emscripten SDK)。walibc 存在就是为了填补这个空白。

这不会无缝(C 库捆绑器必须添加对 walibc 的构建依赖),但它将允许像(例如)libsqlite3-sys 这样的库避免携带自己的 libc 函数实现。

目前,它基本上是一个仅包含头文件的 libc 子集。没有很多好的理由,但基本的一个是它让我们在单个构建中使用两个不同的 walibc 复制时避免链接器问题。更好的解决方案是利用 cargo 解决我们自己的问题。话虽如此,这种方式可以避免与 compiler_builtins 提供的函数冲突...

尽管如此,使大多数函数内联是解决我们许多函数实现过于简单的问题的一部分。

非目标

  • 支持非 Clang 编译器。
  • 支持非 wasm 目标。
  • 目前不支持非 Rust 使用。

许可证

公共领域,如 Unlicense 所解释。如果不成,则提供典型的 Rusty 组合 Apache-2.0MIT

此外

  • walibc 的部分内容是从 pdclib 端口迁移的,它也是公共领域的。
  • vsnprintf -系列函数的实现取自 stb_sprintf(有些修改)。这也是公共领域的。

无运行时依赖