You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
7.5 KiB
208 lines
7.5 KiB
.. _west-basics: |
|
|
|
Basics |
|
###### |
|
|
|
This page introduces west's basic concepts and provides references to further |
|
reading. |
|
|
|
West's built-in commands allow you to work with :term:`projects <west project>` |
|
(Git repositories) under a common :term:`workspace <west workspace>` directory. |
|
|
|
West works in the following manner: the ``west init`` command creates the |
|
:term:`west workspace`, and clones the :term:`manifest repo <west manifest |
|
repository>`, while the ``west update`` command initially clones, and later updates, the |
|
:term:`projects <west project>` listed in the manifest in the workspace. |
|
|
|
Example workspace |
|
***************** |
|
|
|
If you've followed the :ref:`getting_started`, your local |
|
:term:`west workspace`, which in this case is the folder named |
|
:file:`zephyrproject` as well as all its subfolders, looks like this: |
|
|
|
.. code-block:: none |
|
|
|
zephyrproject/ # west topdir |
|
├── .west/ # marks the location of the topdir |
|
│ └── config # per-workspace local configuration file |
|
│ |
|
│ # The manifest repository, never modified by west after creation: |
|
├── zephyr/ # .git/ repo |
|
│ ├── west.yml # manifest file |
|
│ └── [... other files ...] |
|
│ |
|
│ # Projects managed by west: |
|
├── modules/ |
|
│ └── lib/ |
|
│ └── zcbor/ # .git/ project |
|
├── tools/ |
|
│ └── net-tools/ # .git/ project |
|
└── [ ... other projects ...] |
|
|
|
.. _west-workspace: |
|
|
|
Workspace concepts |
|
****************** |
|
|
|
Here are the basic concepts you should understand about this structure. |
|
Additional details are in :ref:`west-workspaces`. |
|
|
|
topdir |
|
Above, :file:`zephyrproject` is the name of the workspace's top level |
|
directory, or *topdir*. (The name :file:`zephyrproject` is just an example |
|
-- it could be anything, like ``z``, ``my-zephyr-workspace``, etc.) |
|
|
|
You'll typically create the topdir and a few other files and directories |
|
using :ref:`west init <west-init-basics>`. |
|
|
|
.west directory |
|
The topdir contains the :file:`.west` directory. When west needs to find |
|
the topdir, it searches for :file:`.west`, and uses its parent directory. |
|
The search starts from the current working directory (and starts again from |
|
the location in the :envvar:`ZEPHYR_BASE` environment variable as a |
|
fallback if that fails). |
|
|
|
configuration file |
|
The file :file:`.west/config` is the workspace's :ref:`local configuration |
|
file <west-config>`. |
|
|
|
manifest repository |
|
Every west workspace contains exactly one *manifest repository*, which is a |
|
Git repository containing a *manifest file*. The location of the manifest |
|
repository is given by the :ref:`manifest.path configuration option |
|
<west-config-index>` in the local configuration file. |
|
|
|
For upstream Zephyr, :file:`zephyr` is the manifest repository, but you can |
|
configure west to use any Git repository in the workspace as the manifest |
|
repository. The only requirement is that it contains a valid manifest file. |
|
See :ref:`west-topologies` for information on other options, and |
|
:ref:`west-manifests` for details on the manifest file format. |
|
|
|
manifest file |
|
The manifest file is a YAML file that defines *projects*, which are the |
|
additional Git repositories in the workspace managed by west. The manifest |
|
file is named :file:`west.yml` by default; this can be overridden using the |
|
``manifest.file`` local configuration option. |
|
|
|
You use the :ref:`west update <west-update-basics>` command to update the |
|
workspace's projects based on the contents of the manifest file. |
|
|
|
projects |
|
Projects are Git repositories managed by west. Projects are defined in the |
|
manifest file and can be located anywhere inside the workspace. In the above |
|
example workspace, ``zcbor`` and ``net-tools`` are projects. |
|
|
|
By default, the Zephyr :ref:`build system <build_overview>` uses west to get |
|
the locations of all the projects in the workspace, so any code they contain |
|
can be used as :ref:`modules`. Note however that modules and projects |
|
:ref:`are conceptually different <modules-vs-projects>`. |
|
|
|
extensions |
|
Any repository known to west (either the manifest repository or any project |
|
repository) can define :ref:`west-extensions`. Extensions are extra west |
|
commands you can run when using that workspace. |
|
|
|
The zephyr repository uses this feature to provide Zephyr-specific commands |
|
like :ref:`west build <west-building>`. Defining these as extensions keeps |
|
west's core agnostic to the specifics of any workspace's Zephyr version, |
|
etc. |
|
|
|
ignored files |
|
A workspace can contain additional Git repositories or other files and |
|
directories not managed by west. West basically ignores anything in the |
|
workspace except :file:`.west`, the manifest repository, and the projects |
|
specified in the manifest file. |
|
|
|
west init and west update |
|
************************* |
|
|
|
The two most important workspace-related commands are ``west init`` and ``west |
|
update``. |
|
|
|
.. _west-init-basics: |
|
|
|
``west init`` basics |
|
-------------------- |
|
|
|
This command creates a west workspace. |
|
|
|
.. important:: |
|
|
|
West doesn't change your manifest repository contents after ``west init`` is |
|
run. Use ordinary Git commands to pull new versions, etc. |
|
|
|
You will typically run it once, like this: |
|
|
|
.. code-block:: shell |
|
|
|
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v2.5.0 zephyrproject |
|
|
|
This will: |
|
|
|
#. Create the topdir, :file:`zephyrproject`, along with |
|
:file:`.west` and :file:`.west/config` inside it |
|
#. Clone the manifest repository from |
|
https://github.com/zephyrproject-rtos/zephyr, placing it into |
|
:file:`zephyrproject/zephyr` |
|
#. Check out the ``v2.5.0`` git tag in your local zephyr clone |
|
#. Set ``manifest.path`` to ``zephyr`` in :file:`.west/config` |
|
#. Set ``manifest.file`` to ``west.yml`` |
|
|
|
Your workspace is now almost ready to use; you just need to run ``west update`` |
|
to clone the rest of the projects into the workspace to finish. |
|
|
|
For more details, see :ref:`west-init`. |
|
|
|
.. _west-update-basics: |
|
|
|
``west update`` basics |
|
---------------------- |
|
|
|
This command makes sure your workspace contains Git repositories matching the |
|
projects in the manifest file. |
|
|
|
.. important:: |
|
|
|
Whenever you check out a different revision in your manifest repository, you |
|
should run ``west update`` to make sure your workspace contains the |
|
project repositories the new revision expects. |
|
|
|
The ``west update`` command reads the manifest file's contents by: |
|
|
|
#. Finding the topdir. In the ``west init`` example above, that |
|
means finding :file:`zephyrproject`. |
|
#. Loading :file:`.west/config` in the topdir to read the ``manifest.path`` |
|
(e.g. ``zephyr``) and ``manifest.file`` (e.g. ``west.yml``) options. |
|
#. Loading the manifest file given by these options (e.g. |
|
:file:`zephyrproject/zephyr/west.yml`). |
|
|
|
It then uses the manifest file to decide where missing projects should be |
|
placed within the workspace, what URLs to clone them from, and what Git |
|
revisions should be checked out locally. Project repositories which already |
|
exist are updated in place by fetching and checking out their respective Git |
|
revisions in the manifest file. |
|
|
|
For more details, see :ref:`west-update`. |
|
|
|
Other built-in commands |
|
*********************** |
|
|
|
See :ref:`west-built-in-cmds`. |
|
|
|
.. _west-zephyr-extensions: |
|
|
|
Zephyr Extensions |
|
***************** |
|
|
|
See the following pages for information on Zephyr's extension commands: |
|
|
|
- :ref:`west-build-flash-debug` |
|
- :ref:`west-sign` |
|
- :ref:`west-zephyr-ext-cmds` |
|
- :ref:`west-shell-completion` |
|
|
|
Troubleshooting |
|
*************** |
|
|
|
See :ref:`west-troubleshooting`.
|
|
|