跳转至

添加第三方开源组件

在 open_source/ 下注册第三方库,完成构建集成与合规登记。

步骤

前置条件

  • 已获取上游源码压缩包,并确保版本号明确、来源可追溯。

准备库文件

1.创建目录并放置文件

open_source/<lib>/ 下创建以下文件:

文件 必需 用途
<lib>-<ver>.tar.gz 官方上游源码压缩包
CMakeLists.txt 外部项目构建脚本
<lib>-<ver>.patch 可选 嵌入式适配 patch
README.OpenSource 上游源、版本、许可证(格式参考其他第三方组件)
mkdir -p open_source/<lib>
cp <lib>-<ver>.tar.gz open_source/<lib>/

2.编写外部项目构建脚本

参考 open_source/lvgl的编译脚本编写构建脚本,通常包含三个固定部分:

  • 解压部分 — 执行解压源码压缩包,若目标目录存在则跳过。
  • Patch — 给第三方开源软件打补丁,同时实现打补丁幂等性。
  • 第三方组件声明块 — 声明第三方目标,传播头文件路径。

注册第三方组件到构建系统

1.在 open_source/Kconfig 追加配置项

open_source/Kconfigmenu "Open Source Libraries" 块内追加 config OS_<NAME> 块:

config OS_<NAME>
    bool "<库的简短描述>"
    default n
    help
      <一两句说明该库的作用。>

kconfig2cmake.py 会识别OS_<NAME>符号并将其转换为 ENABLE_OS_<NAME> CMake 变量。

2.在根 CMakeLists.txt 追加子目录

参考其它CMake变量ENABLE_OS_<NAME>添加编译子目录的条件判断和信息收集。

合规登记

1.创建 README.OpenSource

open_source/<lib>/README.OpenSource 中编写 JSON 格式的元信息:

[
    {
        "Name": "<软件名>",
        "License": "<开源许可证标识符(如 `MIT`、`Apache-2.0`、`GPL-2.0-only`)>",
        "License File": "LICENSE.OpenSource",
        "Version Number": "<版本号>",
        "Owner": "<维护者邮箱>",
        "Upstream URL": "<该版本对应的上游下载地址>",
        "Description": "<功能描述与引入原因>"
    }
]

2.更新 opensource_softwares.json

编辑 vendor/opensource_softwares.json,在 pkg_name_versions 数组中追加一行:

{
    "pkg_name_versions": [
        ...
        "<lib>==<ver>==open_source/<lib>"
    ]
}

三段以 == 分隔:

  • 软件名(小写,与 README.OpenSource 中 Name 一致)、
  • 版本号
  • 仓库内相对路径。

3.更新 COPYRIGHT.OpenSource

在根目录 COPYRIGHT.OpenSource 末尾追加新软件的版权声明段:

----------------------------------------------------------------------

Software: <软件名> v<版本号>

Copyright notice:
Copyright (c) <年份> <版权持有者>
License: <许可证标识符>

<许可证全文>

许可证文本必须完整引用,不可省略或改写。

4.更新开源软件许可证说明文档

../third-party-open-source-software-and-licenses.md 的许可证说明表格中追加该软件条目。

验证

  1. 运行编译命令,检查日志中出现对应库的构建输出
  2. 确认 _build/third_party/lib/ 下生成了目标库文件
  3. 确认 _build/bin/ 下生成了链接该库的可执行文件

附录

相关文档

文档 说明
构建系统设计 构建系统使用手册

集成点检查清单

新库必须在以下位置全部注册,逐项核对:

  • open_source/<lib>/CMakeLists.txt — 外部项目构建脚本
  • open_source/Kconfigmenu "Open Source Libraries" 块内追加 config OS_<NAME>
  • CMakeLists.txt(仓库根目录) — 追加目标收集和添加构建子目录。
  • open_source/<lib>/README.OpenSource — 许可证、版本、上游地址相关条目
  • vendor/opensource_softwares.json — 新增条目
  • COPYRIGHT.OpenSource(仓库根目录) — 版权声明与许可证文本条目
  • docs/**/third-party-open-source-software-and-licenses.md — 许可证说明表格中追加条目