编译器接口
概览
FIDL 编译器分为一个前端和多个后端。编译器会处理一个 存储库。前端使用库的 FIDL 声明(以及 传递依赖关系),执行语义分析,然后输出 库。后端使用中间表示法并生成特定于语言的内容 库绑定
前端
前端是一个名为 fidlc
的命令行程序。fidlc
编译器具有以下标志:
--json JSON_PATH
。如果存在,此标记指示fidlc
输出库的中间 给定路径上的表示法。中间表示法是符合 特定架构。中间表示法用作 输入到各个后端。--name LIBRARY_NAME
。如果存在,此标记指示fidlc
验证该库 都没有被编译的名称此标志有助于在库的 声明和库的实际内容。--files [FIDL_FILE...]...
。每个--files [FIDL_FILE...]
参数块描述一个 库,所有这些都必须具有相同的顶级库名称声明。库必须是 按依赖项顺序呈现,之后的库能够使用之前的 但反之则不然。输出仅针对最终库生成,而不是 及其依赖项
所有标志也可以通过响应文件(表示为 @responsefile
)提供。通过
位于 responsefile
的文件内容将被解释为以空格分隔的
参数。响应文件不能嵌套,且必须是唯一的参数。
后端
后端是一个名为 fidlgen
的命令行程序。fidlgen
编译器具有以下标志:
--json
。必填。库的中间表示形式的路径。通过 中间表示法是符合特定 架构。--generators
。必填。要在给定库上运行的生成器的英文逗号分隔列表。通过 支持以下生成器:cpp
、go
、dart
和rust
。--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