Skip to content

Commit fbabc44

Browse files
committed
Merge branch 'west-docs' of zephyr into docs
2 parents 0874a58 + 1f48927 commit fbabc44

19 files changed

+7197
-0
lines changed

doc/alias.rst

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
.. _west-aliases:
2+
3+
West aliases
4+
############
5+
6+
West allows to add alias commands to the local, global or system configuration files.
7+
These aliases make it easy to add shortcuts for frequently used, or hard to memorize
8+
commands for ease of development.
9+
10+
Similar to how ``git`` aliases work, the alias command is replaced with the alias'
11+
full text and parsed as a new shell argument list (using the Python function
12+
`shlex.split()`_ internally to split the value). This enables adding argument
13+
parameters as they were passed to the original command. Spaces are considered
14+
argument separators; use proper escaping if arguments shouldn't be split.
15+
16+
.. _shlex.split(): https://docs.python.org/3/library/shlex.html#shlex.split
17+
18+
To add a new alias simply call the ``west config`` command:
19+
20+
.. code-block:: shell
21+
22+
west config alias.mylist "list -f '{name} {revision}'"
23+
24+
To list aliases, use :samp:`west help {some_alias}`.
25+
26+
Recursive aliases are allowed as an alias command can contain other aliases, effectively
27+
building more complex but easy-to-remember commands.
28+
29+
It is possible to override an existing command, for example to pass default arguments:
30+
31+
.. code-block:: shell
32+
33+
west config alias.update "update -o=--depth=1 -n"
34+
35+
.. warning::
36+
37+
Overriding/shadowing other or built-in commands is an advanced use case, it can lead to
38+
strange side-effects and should be done with great care.
39+
40+
Examples
41+
--------
42+
43+
Add ``west run`` and ``west menuconfig`` shortcuts to your global configuration to
44+
call ``west build`` with the corresponding CMake targets:
45+
46+
.. code-block:: shell
47+
48+
west config --global alias.run "build --pristine=never --target run"
49+
west config --global alias.menuconfig "build --pristine=never --target menuconfig"
50+
51+
Create an alias for the sample you are actively developing with additional options:
52+
53+
.. code-block:: shell
54+
55+
west config alias.sample "build -b native_sim samples/hello_world -t run -- -DCONFIG_ASSERT=y"
56+
57+
Override ``west update`` to check a local cache:
58+
59+
.. code-block:: shell
60+
61+
west config alias.update "update --path-cache $HOME/.cache/zephyrproject"
62+
63+
Automatically exclude the 32-bit native simulator target when running :ref:`Twister
64+
<twister_script>` via west. This is especially useful when running on hosts systems without a 32-bit
65+
host C library (i.e. Linux/AArch64):
66+
67+
.. code-block:: shell
68+
69+
west config alias.twister "twister --exclude-platform native_sim/native"

doc/basics.rst

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
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

Comments
 (0)