FIDL 编译器和工具

编译器接口

概览

FIDL 编译器分为一个前端和多个后端。编译器会处理一个 存储库。前端使用库的 FIDL 声明(以及 传递依赖关系),执行语义分析,然后输出 库。后端使用中间表示法并生成特定于语言的内容 库绑定

前端

前端是一个名为 fidlc 的命令行程序。fidlc 编译器具有以下标志:

  • --json JSON_PATH。如果存在,此标记指示 fidlc 输出库的中间 给定路径上的表示法。中间表示法是符合 特定架构。中间表示法用作 输入到各个后端。

  • --name LIBRARY_NAME。如果存在,此标记指示 fidlc 验证该库 都没有被编译的名称此标志有助于在库的 声明和库的实际内容。

  • --files [FIDL_FILE...]...。每个 --files [FIDL_FILE...] 参数块描述一个 库,所有这些都必须具有相同的顶级库名称声明。库必须是 按依赖项顺序呈现,之后的库能够使用之前的 但反之则不然。输出仅针对最终库生成,而不是 及其依赖项

所有标志也可以通过响应文件(表示为 @responsefile)提供。通过 位于 responsefile 的文件内容将被解释为以空格分隔的 参数。响应文件不能嵌套,且必须是唯一的参数。

后端

后端是一个名为 fidlgen 的命令行程序。fidlgen 编译器具有以下标志:

  • --json。必填。库的中间表示形式的路径。通过 中间表示法是符合特定 架构

  • --generators。必填。要在给定库上运行的生成器的英文逗号分隔列表。通过 支持以下生成器:cppgodartrust

  • --output-base。必填。此生成器生成的文件的基本文件名。通过 generator 通过在此文件名中添加扩展名来创建文件。例如,cpp 后端生成两个文件,一个扩展名为 .h,另一个扩展名为 .cc

  • --include-base。必填。C 和 C++ #include 的相对基目录 指令进行计算。例如,当 cpp 后端生成 #include 时 指令来引用 .cc 文件中的 .h 文件,后端会创建 #include 相对于此目录的路径。

限制

对于 cpp 后端,生成的 .h 文件必须可包含为 #include <fuchsia/cpp/$LIBRARY_NAME.h>,其中 $LIBRARY_NAME 是相应 FIDL 的名称 库。通常,这意味着 --output-base 标志的值将为 $INCLUDE_BASE/fuchsia/cpp/$LIBRARY_NAME,其中 $INCLUDE_BASE--include-base 标志。

Linter

FIDL linter 是一个命令行程序,可处理一个或多个 FIDL 文件,并针对可编译的内容(在技术上有效的 FIDL)发出警告; 但似乎违反了 FIDL 风格指南FIDL 的规定 API 评分准则。它会强制执行样式规范,并尽可能 可检测出的评分准则准则。

可读性非常重要,样式是其中的一个组成部分。此外, 遵循这些指南有助于确保 FIDL API 的跨语言可移植性。

使用 fx lint

Fuchsia 包含 fx lint 命令,该命令可自动选择并运行 为一组指定文件中的每个文件提供适当的代码 linter。fx lint 个套装 扩展名为 .fidl 的文件,并将所有这些文件一起传递给 FIDL linter 命令 fidl-lint

fx lint 是调用 FIDL linter 的推荐方法,理想情况下应为 在上传新的 FIDL 库或对现有 FIDL 进行更改之前运行。没有任何 参数,fx lint 将对您最常使用的所有文件运行所有可用的 linter 最近的git commit

fx lint

如需查看其他可用选项,请运行以下命令:

fx lint --help

格式设置工具

FIDL 格式化程序是一个可格式化 .fidl 文件的命令行程序。时间是 自动内置到 fx format-code 命令中,这会将任何 经过修改的 FIDL 文件:

fx format-code