|
| 1 | +.. _west-basics: |
| 2 | + |
| 3 | +Basics |
| 4 | +###### |
| 5 | + |
| 6 | +This page introduces west's basic concepts and provides references to further |
| 7 | +reading. |
| 8 | + |
| 9 | +West's built-in commands allow you to work with :term:`projects <west project>` |
| 10 | +(Git repositories) under a common :term:`workspace <west workspace>` directory. |
| 11 | + |
| 12 | +West works in the following manner: the ``west init`` command creates the |
| 13 | +:term:`west workspace`, and clones the :term:`manifest repo <west manifest |
| 14 | +repository>`, while the ``west update`` command initially clones, and later updates, the |
| 15 | +:term:`projects <west project>` listed in the manifest in the workspace. |
| 16 | + |
| 17 | +Example workspace |
| 18 | +***************** |
| 19 | + |
| 20 | +If you've followed the :ref:`getting_started`, your local |
| 21 | +:term:`west workspace`, which in this case is the folder named |
| 22 | +:file:`zephyrproject` as well as all its subfolders, looks like this: |
| 23 | + |
| 24 | +.. code-block:: none |
| 25 | +
|
| 26 | + zephyrproject/ # west topdir |
| 27 | + ├── .west/ # marks the location of the topdir |
| 28 | + │ └── config # per-workspace local configuration file |
| 29 | + │ |
| 30 | + │ # The manifest repository, never modified by west after creation: |
| 31 | + ├── zephyr/ # .git/ repo |
| 32 | + │ ├── west.yml # manifest file |
| 33 | + │ └── [... other files ...] |
| 34 | + │ |
| 35 | + │ # Projects managed by west: |
| 36 | + ├── modules/ |
| 37 | + │ └── lib/ |
| 38 | + │ └── zcbor/ # .git/ project |
| 39 | + ├── tools/ |
| 40 | + │ └── net-tools/ # .git/ project |
| 41 | + └── [ ... other projects ...] |
| 42 | +
|
| 43 | +.. _west-workspace: |
| 44 | + |
| 45 | +Workspace concepts |
| 46 | +****************** |
| 47 | + |
| 48 | +Here are the basic concepts you should understand about this structure. |
| 49 | +Additional details are in :ref:`west-workspaces`. |
| 50 | + |
| 51 | +topdir |
| 52 | + Above, :file:`zephyrproject` is the name of the workspace's top level |
| 53 | + directory, or *topdir*. (The name :file:`zephyrproject` is just an example |
| 54 | + -- it could be anything, like ``z``, ``my-zephyr-workspace``, etc.) |
| 55 | + |
| 56 | + You'll typically create the topdir and a few other files and directories |
| 57 | + using :ref:`west init <west-init-basics>`. |
| 58 | + |
| 59 | +.west directory |
| 60 | + The topdir contains the :file:`.west` directory. When west needs to find |
| 61 | + the topdir, it searches for :file:`.west`, and uses its parent directory. |
| 62 | + The search starts from the current working directory (and starts again from |
| 63 | + the location in the :envvar:`ZEPHYR_BASE` environment variable as a |
| 64 | + fallback if that fails). |
| 65 | + |
| 66 | +configuration file |
| 67 | + The file :file:`.west/config` is the workspace's :ref:`local configuration |
| 68 | + file <west-config>`. |
| 69 | + |
| 70 | +manifest repository |
| 71 | + Every west workspace contains exactly one *manifest repository*, which is a |
| 72 | + Git repository containing a *manifest file*. The location of the manifest |
| 73 | + repository is given by the :ref:`manifest.path configuration option |
| 74 | + <west-config-index>` in the local configuration file. |
| 75 | + |
| 76 | + For upstream Zephyr, :file:`zephyr` is the manifest repository, but you can |
| 77 | + configure west to use any Git repository in the workspace as the manifest |
| 78 | + repository. The only requirement is that it contains a valid manifest file. |
| 79 | + See :ref:`west-topologies` for information on other options, and |
| 80 | + :ref:`west-manifests` for details on the manifest file format. |
| 81 | + |
| 82 | +manifest file |
| 83 | + The manifest file is a YAML file that defines *projects*, which are the |
| 84 | + additional Git repositories in the workspace managed by west. The manifest |
| 85 | + file is named :file:`west.yml` by default; this can be overridden using the |
| 86 | + ``manifest.file`` local configuration option. |
| 87 | + |
| 88 | + You use the :ref:`west update <west-update-basics>` command to update the |
| 89 | + workspace's projects based on the contents of the manifest file. |
| 90 | + |
| 91 | +projects |
| 92 | + Projects are Git repositories managed by west. Projects are defined in the |
| 93 | + manifest file and can be located anywhere inside the workspace. In the above |
| 94 | + example workspace, ``zcbor`` and ``net-tools`` are projects. |
| 95 | + |
| 96 | + By default, the Zephyr :ref:`build system <build_overview>` uses west to get |
| 97 | + the locations of all the projects in the workspace, so any code they contain |
| 98 | + can be used as :ref:`modules`. Note however that modules and projects |
| 99 | + :ref:`are conceptually different <modules-vs-projects>`. |
| 100 | + |
| 101 | +extensions |
| 102 | + Any repository known to west (either the manifest repository or any project |
| 103 | + repository) can define :ref:`west-extensions`. Extensions are extra west |
| 104 | + commands you can run when using that workspace. |
| 105 | + |
| 106 | + The zephyr repository uses this feature to provide Zephyr-specific commands |
| 107 | + like :ref:`west build <west-building>`. Defining these as extensions keeps |
| 108 | + west's core agnostic to the specifics of any workspace's Zephyr version, |
| 109 | + etc. |
| 110 | + |
| 111 | +ignored files |
| 112 | + A workspace can contain additional Git repositories or other files and |
| 113 | + directories not managed by west. West basically ignores anything in the |
| 114 | + workspace except :file:`.west`, the manifest repository, and the projects |
| 115 | + specified in the manifest file. |
| 116 | + |
| 117 | +west init and west update |
| 118 | +************************* |
| 119 | + |
| 120 | +The two most important workspace-related commands are ``west init`` and ``west |
| 121 | +update``. |
| 122 | + |
| 123 | +.. _west-init-basics: |
| 124 | + |
| 125 | +``west init`` basics |
| 126 | +-------------------- |
| 127 | + |
| 128 | +This command creates a west workspace. |
| 129 | + |
| 130 | +.. important:: |
| 131 | + |
| 132 | + West doesn't change your manifest repository contents after ``west init`` is |
| 133 | + run. Use ordinary Git commands to pull new versions, etc. |
| 134 | + |
| 135 | +You will typically run it once, like this: |
| 136 | + |
| 137 | +.. code-block:: shell |
| 138 | +
|
| 139 | + west init -m https://github.com/zephyrproject-rtos/zephyr --mr v2.5.0 zephyrproject |
| 140 | +
|
| 141 | +This will: |
| 142 | + |
| 143 | +#. Create the topdir, :file:`zephyrproject`, along with |
| 144 | + :file:`.west` and :file:`.west/config` inside it |
| 145 | +#. Clone the manifest repository from |
| 146 | + https://github.com/zephyrproject-rtos/zephyr, placing it into |
| 147 | + :file:`zephyrproject/zephyr` |
| 148 | +#. Check out the ``v2.5.0`` git tag in your local zephyr clone |
| 149 | +#. Set ``manifest.path`` to ``zephyr`` in :file:`.west/config` |
| 150 | +#. Set ``manifest.file`` to ``west.yml`` |
| 151 | + |
| 152 | +Your workspace is now almost ready to use; you just need to run ``west update`` |
| 153 | +to clone the rest of the projects into the workspace to finish. |
| 154 | + |
| 155 | +For more details, see :ref:`west-init`. |
| 156 | + |
| 157 | +.. _west-update-basics: |
| 158 | + |
| 159 | +``west update`` basics |
| 160 | +---------------------- |
| 161 | + |
| 162 | +This command makes sure your workspace contains Git repositories matching the |
| 163 | +projects in the manifest file. |
| 164 | + |
| 165 | +.. important:: |
| 166 | + |
| 167 | + Whenever you check out a different revision in your manifest repository, you |
| 168 | + should run ``west update`` to make sure your workspace contains the |
| 169 | + project repositories the new revision expects. |
| 170 | + |
| 171 | +The ``west update`` command reads the manifest file's contents by: |
| 172 | + |
| 173 | +#. Finding the topdir. In the ``west init`` example above, that |
| 174 | + means finding :file:`zephyrproject`. |
| 175 | +#. Loading :file:`.west/config` in the topdir to read the ``manifest.path`` |
| 176 | + (e.g. ``zephyr``) and ``manifest.file`` (e.g. ``west.yml``) options. |
| 177 | +#. Loading the manifest file given by these options (e.g. |
| 178 | + :file:`zephyrproject/zephyr/west.yml`). |
| 179 | + |
| 180 | +It then uses the manifest file to decide where missing projects should be |
| 181 | +placed within the workspace, what URLs to clone them from, and what Git |
| 182 | +revisions should be checked out locally. Project repositories which already |
| 183 | +exist are updated in place by fetching and checking out their respective Git |
| 184 | +revisions in the manifest file. |
| 185 | + |
| 186 | +For more details, see :ref:`west-update`. |
| 187 | + |
| 188 | +Other built-in commands |
| 189 | +*********************** |
| 190 | + |
| 191 | +See :ref:`west-built-in-cmds`. |
| 192 | + |
| 193 | +.. _west-zephyr-extensions: |
| 194 | + |
| 195 | +Zephyr Extensions |
| 196 | +***************** |
| 197 | + |
| 198 | +See the following pages for information on Zephyr's extension commands: |
| 199 | + |
| 200 | +- :ref:`west-build-flash-debug` |
| 201 | +- :ref:`west-sign` |
| 202 | +- :ref:`west-zephyr-ext-cmds` |
| 203 | +- :ref:`west-shell-completion` |
| 204 | + |
| 205 | +Troubleshooting |
| 206 | +*************** |
| 207 | + |
| 208 | +See :ref:`west-troubleshooting`. |
0 commit comments