West
West和Zephyr之间并没有直接的联系。West是一个代码仓库管理工具,Zephyr默认是用west来管理自己的代码系统的。
不过west的确有着自己的一些特点:
Workspace
每个West workspace都是包含了一份zephyr源代码以及开发者自己的应用代码的目录。每个workspace里可能包含一个应用,也可能包含多个应用。这些应用也可能来自多个不同的代码仓库。
West是一个有能力把多个代码仓库集成到一个项目里的管理工具。这是west和git相比最明显的一个特点。
而这一切都是由一个main manifest文件来定义的,west会根据manifest文件来组织这个workspace下的目录结构。
实际上,这个workspace的仓库里,就可以只有这一个main manifest文件,也称为manifest repo;开发者只需要维护这个main manifest文件, 其他的工作都由west来完成。
manifest repo和west.yaml
必须位于manifest repo中的只有一个manifest文件,即west.yaml文件。这个文件定义了workspace中所有app的版本、位置以及zephyr代码的版本和位置。
当然,各个app或者zephyr代码也可以有自己的west.yaml文件,但main manifest只有一个。
例子
west-workspace/
├── app1/ # .git/ project
│ ├── CMakeLists.txt
│ ├── prj.conf
│ └── src/
│ └── main.c
├── app2/ # .git/ project
│ ├── CMakeLists.txt
│ ├── prj.conf
│ └── src/
│ └── main.c
├── manifest-repo/ # .git/ never modified by west
│ └── west.yml # main manifest with optional import(s) and override(s)
├── modules/
│ └── lib/
│ └── tinycbor/ # .git/ project from either the main manifest or
│ # from some import
│
└── zephyr/ # .git/ project
└── west.yml # This can be partially imported with lower precedence or ignored.
# Only the 'manifest-rev' version can be imported.