静态代码分析(SCA)
Zephyr 通过 CMake 支持静态代码分析工具。
构建设置 ZEPHYR_SCA_VARIANT 用于指定静态分析工具,也支持将 ZEPHYR_SCA_VARIANT 设置为 环境变量。
使用 -DZEPHYR_SCA_VARIANT=<tool> 启用工具,例如 -DZEPHYR_SCA_VARIANT=sparse 启用 sparse。
静态分析工具基础设施
工具支持实现在 sca.cmake 中,sca.cmake 必须位于 SCA_ROOT/cmake/sca/tool/sca.cmake。Zephyr 自身始终加入 SCA_ROOT,构建系统也允许向 SCA_ROOT 添加其他目录。
创建以下结构,即可支持源码树外的静态分析工具:
<sca_root>/ # Custom SCA root
└── cmake/
└── sca/
└── <tool>/ # Name of SCA tool, this is the value given to ZEPHYR_SCA_VARIANT
└── sca.cmake # CMake code that configures the tool to be used with Zephyr
要在 /path/to/my_tools/cmake/sca 下添加 foo,请创建以下结构:
/path/to/my_tools
└── cmake/
└── sca/
└── foo/
└── sca.cmake
随后指定 -DZEPHYR_SCA_VARIANT=foo,即可使用 foo 进行静态分析。
记得将 /path/to/my_tools 加入 SCA_ROOT。
SCA_TOOL 可以通过 -DSCA_ROOT=<sca_root> 设为普通 CMake 设置,也可以由 Zephyr 模块在 module.yml 中添加,参见 Zephyr 模块——构建设置。
编译器与链接器启动器
需要观察或包装编译和链接命令的静态分析工具,应在 sca.cmake 中设置 CMAKE_<LANG>_COMPILER_LAUNCHER 和 CMAKE_<LANG>_LINKER_LAUNCHER。必须将其设为普通变量,而非缓存条目。
如此设置的启动器会替换先前配置的任何启动器,包括 ccache。如果工具是透明包装器,即原样执行收到的命令,则可通过追加方式保留原启动器:
set(CMAKE_C_COMPILER_LAUNCHER ${my_wrapper} ${CMAKE_C_COMPILER_LAUNCHER})
原生静态分析工具支持
以下列出 Zephyr 构建系统原生支持的静态分析工具。