0

我有一个使用 BUILD.gn 和 ninja 的 Emscripten WASM 项目。

我希望能够在模块 gn 文件本身中指定由 emscripten 编译为 WASM 的 C++ 代码使用的“安装”资源。

然后,我希望能够获得这些资源,而不必在可执行文件中重复自己,收集它们并将它们“--preload”提供到 emscripten 文件系统中。

大多数文件只是静态数据(配置文件等),少量是由构建步骤生成的。

我尝试过或考虑过的事情:

  1. 使用元数据和元数据集合。这可以为我提供一整套信息,但不是在构建期间使用该信息集的方法。在构建期间无法依赖资源的生成。我可以根据收集的元数据尝试第二个构建步骤吗?

  2. 走部门并收集清单。我不知道如何关闭我所依赖的部门。我想我可以将 dep 名称映射到文件目标,然后自己重​​新收集并收集它们?

  3. 制作一个单独的工具链来构建预加载的数据文件,并让我的可执行 wasm 构建依赖于我的预加载可执行目标作为数据依赖项。js wasm 模板假定 .data 文件在那里,因为它只在运行时需要。我缺乏编写完整的仅预加载工具链的技能,或者不知道这样做是否有意义。

  4. 只需将资源文件放在硬编码位置即可。这确实不能很好地扩展。

我发现 Bazel 文档似乎直接针对这个问题(比如递归依赖关系以查找所有 .foo 文件并将它们传递给编译器),但我不知道如何将其转换为 GN。

任何人都知道如何做到这一点?这感觉像是一个非常基本的“一键构建”要求,但我的 GN 一点也不流利。

4

0 回答 0