Fuchsia 构建系统使用自定义 Ninja 二进制文件,该二进制文件提供了 改善开发者体验。本页对此进行了介绍。
设计初衷
为 Fuchsia 定制 Ninja 的动机详细说明了 RFC-0153。
简而言之,Fuchsia 有许多实用功能。 开发者。
所有特定于 Fuchsia 的更改都在本地 fuchsia-rfc-0153
上执行
本地 Ninja git 镜像的分支,以及
定期重新调整,以便于以 GitHub 拉取请求的形式发送
添加到上游项目,如
RFC 的“策略”部分。
功能:运行命令的状态
将您环境中的NINJA_STATUS_MAX_COMMANDS
设为严格正数
整数供 Ninja 输出,在智能终端中运行时,
运行时间最长的命令以及经过的时间。
例如,对于 export NINJA_STATUS_MAX_COMMANDS=4
,状态可能如下所示
例如:
[0/28477](260) STAMP host_x64/obj/tools/configc/configc_sdk_meta_generated_file.stamp
0.4s | STAMP obj/sdk/zircon_sysroot_meta_verify.stamp
0.4s | CXX obj/BUILD_DIR/fidling/gen/sdk/fidl/fuchsia.me...chsia.media/cpp/fuchsia.media_cpp_common.common_types.cc.o
0.4s | CXX obj/BUILD_DIR/fidling/gen/sdk/fidl/fuchsia.me...fuchsia.media/cpp/fuchsia.media_cpp.natural_messaging.cc.o
0.4s | CXX obj/BUILD_DIR/fidling/gen/sdk/fidl/fuchsia.me...dia/cpp/fuchsia.media_cpp_natural_types.natural_types.cc.o
以下动画图片展示了实际操作方式:
请注意:
在试运行或详细调用中,此功能会自动停用 Ninja(即使用
-n
或--verbose
标志)。当 Ninja 不在 是交互式 / 智能终端。
运行控制台命令时也会暂停此功能(可见 )。
借助此功能,您可以轻松直观呈现构建中的瓶颈,即 会阻止其他命令并行运行的长效命令。
命令表默认每秒更新 10 次,这非常有用
来了解哪些长命令会阻碍构建进程可以
将 NINJA_STATUS_REFRESH_MILLIS
设置为小数以更改刷新周期
以毫秒为单位的值(并非所有小于 100 的值都会被忽略,因为
用时仅输出一个十进制小数)。
功能:可缩短启动时间的持久模式
通过将 NINJA_PERSISTENT_MODE=1
您的环境此功能使 Ninja 启动后台服务器进程
读取一次构建清单,然后将构建图保存在内存中,
后续版本。
请注意:
此功能应是完全透明的,不应影响 其他忍者的行为。如果您发现了问题或不同之处,请 请发送电子邮件至
fuchsia-build-team@google.com
与我们联系!系统会自动检测输入
.ninja
文件中的任何更改。在本课中, 系统会关闭现有服务器,并启动新的服务器 。更改后不需要额外的用户互动 GN build 文件或执行jiri update
。服务器进程将在空闲 5 分钟后正常关闭。 在您的环境中设置
NINJA_PERSISTENT_TIMEOUT_SECONDS=<count>
来更改此延迟时间使用
fx build -t server status
检索服务器的状态 。使用
fx build -t server stop
停止正在运行的服务器实例 。设置
NINJA_PERSISTENT_LOG_FILE=<path>
以发送与 永久模式。对于
core.x64
,每个服务器进程目前大约需要 1 GiB 的 RAM build 配置。确切数字将取决于忍者的体型 这取决于您的args.gn
配置。每个 Ninja 构建目录最多可由一个服务器进程提供。 但在使用多个 build 时,可能会有多个进程 目录。
忍者工具(例如
ninja -C <dir> -t commands <target>
)无法在 所以仍将使用缓慢启动。此问题将在 来加快查询速度。
已知错误 / 注意事项,将得到解决:
如果在同一目录上混合使用永久性构建和非永久性构建, 导致服务器感到困惑,因为对 Ninja 的 build 和 deps 日志。此问题将会解决。
权宜解决方法:在取消设置之前使用
-t server stop
停止服务器NINJA_PERSISTENT_MODE
。“快速启动”需要几秒钟的时间。目前,每次增量构建 仍然需要针对构建图中的所有文件调用 stat(), 目前需要几秒钟的时间。这一问题以后将由 使用主机的基于 inotify / kqueue 的文件系统监控功能 只要在上传完几个文件后就立即开始 。
目前无法在 Windows 上运行。这是由于 Win32 技术限制 阻止将控制台句柄复制到其他进程。这主要是 上游 Ninja 团队出现的问题,因为 Fuchsia 开发 都是在 Windows 上发生的。