| .. _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`. |