Skip to content

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

功能: 获取当前工程配置路径。

参数:

返回值:

    返回当前工程配置路径。