FIDL:编译器命令行界面
本文档描述了FIDL编译器的命令行界面。
有关该工具的内部相关信息与它的源码在同一目录下。
有关FIDL的总体目的,目标和要求以及相关文档的链接的更多信息,请参阅FIDL概述。
概览
FIDL编译器分为前端和多个后端。 编译器一次处理一个库。 前端使用库的FIDL声明(以及所有传递性的依赖),执行语义分析,并输出库的中间表示。 后端使用中间表示并为库生成特定语言的绑定。
前端
前端是名为fidlc
的命令行程序。
fidlc
编译器有多个参数:
--c-header HEADER_PATH
。 如果该参数存在,则标识fidlc
在给定路径里输出C语言头文件。 原则上,C语言头文件的生成可在C的后端中得以实现,但出于某些实际原因,我们将其生成直接集成到前端。--tables TABLES_PATH
。 如果该参数存在,则标识fidlc
在给定路径里输出编码表。 编码表的功能是编码和解码来自C和C++绑定的消息。--json JSON_PATH
。 如果该参数存在,则标识fidlc
在给定路径里输出库的中间表示。 中间表示是符合特定模式的JSON文件。 中间表示的功能是,作为各种后端的输入。--name LIBRARY_NAME
。 如果该参数存在,则标识fidlc
验证正在编译的库是否具有给定名称。 此标志可用于在构建系统中的库声明与库的实际内容之间进行交叉检查。--files [FIDL_FILE ...] ...
。 每个--file [FIDL_FILE ...]
参数块都描述了一个库,所有这些库都必须共享相同的顶级库名声明。 库的名字必须以依赖的顺序传入,后面的库可使用前面库中的声明,但反之则不能。 编译的结果是仅输出最后一个库的生成内容,而不是为每个依赖项生成输出。
上述所有的参数也可以通过响应文件的方式提供,并表示为@responsefile
。
responsefile
文件的内容将被解释为以空格分隔的参数列表。
另外,响应文件不能相互嵌套,并且必须是唯一的参数。
后端
后端是一个名为fidlgen
的命令行程序。
fidlgen
编译器也有多个参数:
--json
(必填),FIDL库中间表示的文件路径,中间表示是符合特定模式的JSON文件。--generators
(必填)。 在给定的FIDL库上运行的生成器列表,以逗号分隔。 目前支持以下语言的生成器:cpp
,go
,dart
和rust
。--output-base
(必填)。 生成的文件(不包含扩展名)的基本文件名,生成器将通过添加此文件名的扩展名来创建文件。 例如,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
标志的值。