xf build 构建脚本
作者
kirto
本文主要说明,xf build的功能和相关源码。
xf build 构思来源
在开发 XFusion 的时候,我意识到在 c 语言编译中由于各种构建脚本不同一,导致我们做一个中间件的时候不得不去适配多个构建脚本。 在这种情况下,我们考虑能不能做一个脚本,该脚本用于生成一个含有各种编译信息的 json 文件。再由生成器生成不同的构建脚本,或者工程。
上述的思路就是 xf build 的制作初衷。
再基础的优化和功能添加后,xf build 具有以下的功能:
- 生成含有各种编译信息的 json 文件
- 可以拓展的各种生成器插件
- 支持导出原生工程
- 支持 menuconfig 可视化裁剪配置工程
- 支持基于 pyserial 的命令行串口监视器
- 支持基于 kconfiglib 的 menuconfig 配置工具
- 包管理工具
仓库地址
github: https://github.com/x-eks-fusion/xf_build
gitee: https://gitee.com/x-eks-fusion/xf_build
xf 命令参考
参考
详见:xf 命令参考
构建相关 API
这部分是在编译的时候,xf_project.py xf_collect.py 所调用的 API 。
project_init
功能:初始化一个 XFusion 工程。
参数:
user_dirs
(list
): 用户添加的额外文件夹。
返回值:
- 无
program
功能:开始构建工程。
参数:
cflags
(list
): 全局的 cflags 参数。
返回值:
- 无
collect
功能:收集编译信息。
参数:
srcs
(list
): 收集源文件。inc_dirs
(list
): 收集头文件路径。requires
(list
): 模块依赖关系。cflags
(list
): 模块 cflags 参数。
返回值:
- 无
get_define
功能:从 menuconfig 中获取宏定义的值。
参数:
define
(str
): 需要获取的宏定义。
返回值:
- 返回宏的值,如果是bool类型返回y或者n
插件对接 API
这部分是在对接的时候,插件需要对接的 API 。
build
功能:根据收集的编译信息,生成 SDK 构建脚本,并启动编译。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
clean
功能:清除编译的中间产物。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
flash
功能:调用命令烧录。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
menuconfig
功能:调用底层 menuconfig。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
export
功能:根据收集的编译信息,导出原始 sdk 工程。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
update
功能:根据收集的编译信息,更新已有的 sdk 工程。
参数:
args
(list
): 顶层调用命令传递下来的参数。
返回值:
- 无
插件调用 API
exec_cmd
功能:在终端中执行命令行。
参数:
command
(str|list
): 需要执行的命令。
返回值:
- 无
apply_template
功能:应用模板文件。
参数:
temp
(str
): 模板文件的路径。save
(str
): 保存应用模板后的文件路径。replace
(dict
): 保存应用模板后的文件路径。
返回值:
- 无
apply_components_template
功能: 处理并生成基于模板的文件,按照配置数据自动生成对应的目录和文件。
参数:
temp
(str
): 模板文件的名称,用于加载模板内容。save
(str
): 生成文件的后缀或文件名。如果以 `.` 开头,表示后缀;否则为完整文件名。
返回值:
- 无
get_define
功能: 获取 menuconfig 的宏。
参数:
define
(str
): menuconfig 中的定义。
返回值:
- 无
cd_to_root
功能: 切换到 xfusion 的根目录下。
参数:
- 无
返回值:
- 无
cd_to_target
功能: 切换到当前 target 目录下。
参数:
- 无
返回值:
- 无
cd_to_project
功能: 切换到当前工程目录下。
参数:
- 无
返回值:
- 无
get_sdk_dir
功能: 获取 SDK 所在的路径。(只有配置了 target.json 才可以获取)
参数:
- 无
返回值:
- 返回 SDK 的路径
get_XF_ROOT
功能: 获取 XFusion 路径
参数:
- 无
返回值:
- 返回 XFusion 的路径
get_XF_PROJECT_PATH
功能: 获取当前 target 目录。
参数:
- 无
返回值:
- 返回当前 target 目录
get_XF_PROJECT_PATH
功能: 获取当前工程路径。
参数:
- 无
返回值:
- 返回当前工程路径
get_PROJECT_BUILD_PATH
功能: 获取当前工程的 build 路径。
参数:
- 无
返回值:
- 返回当前工程的 build 路径
get_ROOT_PLUGIN
功能: 获取当前 target 插件路径。
参数:
- 无
返回值:
- 返回当前 target 插件路径。
get_PROJECT_CONFIG_PATH
功能: 获取当前工程配置路径。
参数:
- 无
返回值:
- 返回当前工程配置路径。