#资源 #源文件 #生成 #系统 #目录 #工具

bin+lib erfs-gen

嵌入式资源文件系统(C/Rust):从资源目录生成 C/Rust 源文件的工具

2 个版本

0.1.2 2020年2月23日
0.1.1 2020年2月10日
0.1.0 2020年2月10日

#1289 in 文件系统

MIT/Apache

27KB
674 代码行

嵌入式资源文件系统 (C/Rust)

本项目允许用 C/C++ 或 Rust 编写的应用程序将所需的资源文件嵌入到可执行二进制文件中。

有两个组件

  • 一个名为 erfs_gen 的命令行工具可以遍历资源目录并生成 .c/.h 源文件,这些文件应该添加到您的项目中。
  • 一个纯 C 或 Rust lib crate 的运行时库,用于访问资源的内容。

用法

命令行界面

用法如下所述

$./erfs-gen
Usage: ./erfs-gen [options] <src_dir> <id> <dest_dir>
Options:
  --gzip      compress file if needed.
  --rust      generate rust binding codes.

where,
<src_dir>: point to the top level directory contains resources.
<id>: the identity of the resource file system, and a executable may have multiple ERFS instances.
<dest_dir>: to specify where the source files are generated. 

C 开发者

代码生成

一个 cmake 函数有助于在构建时生成文件。

function(gen_erfs_source sourcedir id target)
    add_custom_command(
        OUTPUT ${target}/erfs_${id}.c ${target}/erfs_${id}.h
        COMMAND ${ERFS_GEN} --gzip --rust ${sourcedir} ${id} ${target}
        COMMENT "Generating ERFS source file from: ${sourcedir}"
    )
endfunction()

gen_erfs_source("${CMAKE_CURRENT_SOURCE_DIR}/erfs-rt" "rfsrc" "${CMAKE_CURRENT_BINARY_DIR}")

请参阅 CMakeList.txt 获取详细信息。

C API

请参阅头文件 (erfs-rt/src/resource_fs.h) 和 UT 示例(erfs-rt/tests/erfs_test.cpp) 获取详细信息。

Rust 开发者

Rust 代码生成

需要 build.rs 来生成 .c/.h/.rs 文件并编译 C 文件。请参阅 erfs-example/build.rs 获取详细信息。

Rust API

请参阅 Rust 封装 (erfs-rt/src/lib.rs) 和 UT 示例(erfs-example/src/main.rs) 获取详细信息。

待办事项

  • 支持符号/硬链接
  • 运行时库和代码生成器的纯 Rust 实现。

依赖项

~0.3–2.6MB
~50K SLoC