沙盒结构
XCommon CMake 基于沙盒结构。沙盒是一个完全包含的源代码模块集合,可用于构建一个或多个应用程序。
定义
XCommon CMake 在沙盒结构中支持三种顶级目录类型。
应用程序 包含一组特定于应用程序的源文件,用于构建一个或多个可执行文件(.xe 文件)。这可能是一个简单示例或一个经过验证的参考设计。这些可执行文件是通过编译应用程序的源文件及其使用的模块的源文件生成的。
一个应用程序目录以 sw_ 为前缀,每个应用程序特定的代码集在一个以 app_ 为前缀的目录中。
例如,一个应用程序可能是一个 USB 音频设备。
模块
包含模块源代码,可能依赖于其他模块。模块代码被编译成对象,直接链接到应用程序可执行文件中。XMOS 模块目录通常以 lib_ 为前缀。
例如,一个模块可能实现了 I2C 这样的 IO 功能。
静态库
包含源代码和(可选)预构建的静态库存档,可链接到应用程序可执行文件中。包含静态库的 XMOS 模块通常以 lib_ 为前缀。
例如,一个静态库模块可能实现 了像 Tensorflow 这样的大型堆栈或受保护的第三方 IP。
仓库布局
定义的所有项目都放置在沙盒的根目录中,每个项目通常代表一个独立的 git 仓库,没有应用程序和模块的嵌套。这允许合并应用程序和使用共享依赖,同时避免了依赖循环等问题。
每个应用程序应包含一个 CMakeLists.txt 文件,每个模块应包含一个 lib_build_info.cmake 文件。这些文件配置 XCommon CMake 的使用。
sandbox/
├── lib_mod0
│ ├── lib_mod0
│ ├── api
│ ├── src
│ └── lib_build_info.cmake
├── lib_mod1
│ ├── lib_mod1
│ ├── api
│ ├── src
│ └── lib_build_info.cmake
├── lib_mod2
│ ├── lib_mod2
│ ├── api
│ ├── src
│ └── lib_build_info.cmake
├── sw_app0
│ ├── app_app0_xcore200
│ │ ├── src
│ │ └── CMakeLists.txt
│ ├── app_app0_xcoreai
│ ├── src
│ └── CMakeLists.txt
└── sw_app1
├── app_app1
├── src
└── CMakeLists.txt
在这个示例沙盒中,sw_app0 和 sw_app1 可能是不相关的应用程序,但它们共享一些公共模块依赖。这种布局允许工程师同时开发和测试多个应用程序,并使用一组共享的模块,包括一些本地修改,而无需在多个沙盒中重复这些更改。