.. _no-west:

Using Zephyr without west
#########################

This page provides information on using Zephyr without west. This is
not recommended for beginners due to the extra effort involved. In
particular, you will have to do work "by hand" to replace these
features:

- cloning the additional source code repositories used by Zephyr in
  addition to the main zephyr repository, and keeping them up to date
- specifying the locations of these repositories to the Zephyr build
  system
- flashing and debugging without understanding detailed usage of the
  relevant host tools

.. note::

   If you have previously installed west and want to stop using it,
   uninstall it first:

   .. code-block:: console

      pip3 uninstall west

   Otherwise, Zephyr's build system will find it and may try to use
   it.

Getting the Source
------------------

In addition to downloading the zephyr source code repository itself,
you will need to manually clone the additional projects listed in the
:term:`west manifest` file inside that repository.

.. code-block:: console

   mkdir zephyrproject
   cd zephyrproject
   git clone https://github.com/zephyrproject-rtos/zephyr
   # clone additional repositories listed in zephyr/west.yml,
   # and check out the specified revisions as well.

As you pull changes in the zephyr repository, you will also need to
maintain those additional repositories, adding new ones as necessary
and keeping existing ones up to date at the latest revisions.

Specifying Modules
------------------

If you have west installed, the Zephyr build system will use it to set
:ref:`ZEPHYR_MODULES <important-build-vars>`. If you don't have west
installed and your application does not need any of these
repositories, the build will still work.

If you don't have west installed and your application *does* need one
of these repositories, you must set :makevar:`ZEPHYR_MODULES`
yourself. See :ref:`ext-projs` for details.

Flashing and Debugging
----------------------

Running build system targets like ``ninja flash``, ``ninja debug``,
etc. is just a call to the corresponding :ref:`west command
<west-build-flash-debug>`. For example, ``ninja flash`` calls ``west
flash``\ [#wbninja]_. If you don't have west installed on your system, running
those targets will fail. You can of course still flash and debug using
any :ref:`debug-host-tools` which work for your board (and which those
west commands wrap).

If you want to use these build system targets but do not want to
install west on your system using ``pip``, it is possible to do so
by manually creating a :term:`west installation`:

.. code-block:: console

   # cd into zephyrproject if not already there
   git clone https://github.com/zephyrproject-rtos/west.git .west/west

Then create a file :file:`.west/config` with the following contents:

.. code-block:: none

   [manifest]
   path = zephyr

   [zephyr]
   base = zephyr

After that, and in order for ``ninja`` to be able to invoke ``west``
to flash and debug, you must specify the west directory. This can be
done by setting the environment variable ``WEST_DIR`` to point to
:file:`zephyrproject/.west/west` before running CMake to set up a
build directory.

.. rubric:: Footnotes

.. [#wbninja]

   Note that ``west build`` invokes ``ninja``, among other
   tools. There's no recursive invocation of either ``west`` or
   ``ninja`` involved by default, however, as ``west build`` does not
   invoke ``ninja flash``, ``debug``, etc. The one exception is if you
   specifically run one of these build system targets with a command
   line like ``west build -t flash``. In that case, west is run twice:
   once for ``west build``, and in a subprocess, again for ``west
   flash``. Even in this case, ``ninja`` is only run once, as ``ninja
   flash``. This is because these build system targets depend on an
   up to date build of the Zephyr application, so it's compiled before
   ``west flash`` is run.
