209 lines
7.5 KiB
ReStructuredText
209 lines
7.5 KiB
ReStructuredText
.. _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`.
|