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

Building applications
---------------------

You can build a Zephyr application using CMake and Ninja (or make) directly
without west installed if you specify any modules manually.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :tool: cmake
   :goals: build
   :gen-args: -DZEPHYR_MODULES=module1;module2;...
   :compact:

When building with 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 as shown above.

See :ref:`modules` for more 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:`flash-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 workspace`:

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