1个稳定版本

121.0.0 2024年1月10日

#238 in 图形API

MIT/Apache

170KB
4.5K SLoC

ckia_sys

此项目将skia生成Rust绑定,并负责构建skia。

编译速度是最高的优先级。我们通过以下方式实现:

  1. 提供预构建的静态和动态库,这些库可以通过构建脚本下载,用于常见配置
  2. 维护手动C绑定和预生成的绑定,而不是在构建时生成绑定。避免了bindgen依赖,节省了6秒的构建时间。

生成绑定

  1. 使用以下命令安装bindgen:cargo install bindgen
  2. 运行
# merge extern blocks creates a smaller and denser bindings.rs
# no-layout-tests avoids a lot of tests and makes bindings.rs cleaner. But for sanity, we might generate layout tests first, run cargo test, and then generate bindings without tests to publish. 
# -Iskia is necessary to let clang know where to search for include paths.
bindgen --merge-extern-blocks --default-enum-style rust --no-layout-tests -o bindings.rs skia/ckia/src/sk_all.c -- -Iskia/
  1. 最后,修复需要在Windows上使用不同ABI的函数。
    1. gr_vk_get_proc. 将其ABI更改为 extern "system",以便在Windows平台上使用 __stdcall ABI。

构建

Skia在构建时暴露了大量的配置。为了避免处理所有复杂性,我们只提供常见“通用”配置的预构建库,并期望用户在需要自定义构建时从头开始构建。

您可以通过启用 build_from_src 功能标志或设置 SKIA_BUILD_FROM_SRC 环境变量来强制从头开始构建。

依赖项

如果您使用默认构建,并且有预构建的二进制文件可用,那么

  1. curl -> 下载预构建库
  2. tar -> 下载后解压缩存档。

Windows 10和Linux默认都有这些。

如果您是从源代码构建

  1. git -> 克隆skia存储库和依赖项
  2. python -> 下载构建依赖项并运行构建脚本
  3. tar (可选) -> 在将它们复制到 SKIA_COPY_LIBS 之前打包库(见下文)
  4. curl -> 可能需要下载我们需要的某些东西,如从GitHub下载源代码包。
  5. clangclang++。 (LLVM)。
  6. sccacheccache(可选) -> 用于缓存编译后的对象,因为 cargo clean 最终会从目标中删除所有内容。强烈推荐。
  7. 需要很多耐心。skia 正在经历从 gnbazel 的混乱构建系统转换阶段。因此,你可能会遇到一些问题。

如果你是从源代码构建,那么你可能需要设置一些环境变量。

名称 默认值 用途
SKIA_CC clang* c 编译器。skia 倾向于使用 clang
SKIA_CC_WRAPPER sccache* 或 ccache* 通过使用全局缓存来提高编译时间。强烈推荐
SKIA_CXX clang++* c++ 编译器。skia 倾向于使用 clang++
SKIA_CLANG_WIN(仅限 Windows) C:\Program Files\LLVM* LLVM 安装路径。使用 clang 所必需的
SKIA_CLANG_WIN_VERSION(仅限 Windows) SKIA_CLANG_WIN/lib/clang/version** 要使用的 clang 版本。ckia_sys 将尝试使用 SKIA_CLANG_WIN/lib/clang/ 中最新版本。使用 clang 所必需的
SKIA_BUILD_FROM_SRC 0 如果非零,告诉 ckia_sys 从源代码构建 skia。作为 feature build_from_src 的替代方案提供的便利性
SKIA_GN_ARGS(仅当从源代码构建时适用) "" 传递给 skia 构建的自定义构建的额外 GN 参数。
SKIA_COPY_LIBS "" 告诉 ckia_sys 构建系统将构建的二进制文件复制到根据此变量中设置的路径的目录中。在构建后分发库的流程中很有用
SKIA_SRC_DIR "" 如果设置,我们将使用此作为构建的源。
SKIA_SRC_ARCHIVE_URL "" 如果设置,我们将使用 curl 下载此存档 (.tar.gz),并在 OUT_DIR 中提取它,并将其用作 skia 源目录。存档必须有一个顶层文件夹,其中包含 skia 源代码

* 我们将仅在此默认值可用时使用它。否则,我们将避免设置该 gn 参数。例如,如果 clang --version 不可用,我们将仅使用 clang 作为 SKIA_CC。否则,我们将只让 skia 使用默认的 cc

** 我们将检查 LLVM/lib/clang 目录,读取版本并设置为最新版本。否则,我们将跳过设置它。

依赖项