.. _docs-root:

======================
Pigweed Sample Project
======================

.. toctree::
  :maxdepth: 1
  :hidden:

  Home <self>
  Examples <examples/docs>
  Customization <customization>
  Pigweed Docs <https://pigweed.dev>
  Mailing List <https://groups.google.com/forum/#!forum/pigweed>
  Chat Room <https://discord.gg/M9NSeTA>
  Source Code <https://cs.pigweed.dev/pigweed>
  Code Reviews <https://pigweed-review.googlesource.com>
  Issue Tracker <https://issues.pigweed.dev/issues?q=status:open>

This repository outlines the recommended way of using Pigweed in a new or
existing project. Feel free to fork this repository, or read it as a reference.

For more information see the `Pigweed Getting started
guide <https://pigweed.dev/docs/getting_started.html>`__.

Check back for more complex examples and features coming soon!

---------------
Getting started
---------------
Make sure you've set up `Pigweed's
prerequisites <https://pigweed.dev/docs/getting_started.html#prerequisites>`__.

**If you're on Windows**, you can automate the initial setup by downloading the
first-time setup script **from cmd.exe**:

.. code-block:: batch

   curl https://pigweed.googlesource.com/pigweed/sample_project/+/main/tools/setup_windows_prerequisites.bat?format=TEXT > setup_pigweed_prerequisites.b64 && certutil -decode -f setup_pigweed_prerequisites.b64 setup_pigweed_prerequisites.bat && del setup_pigweed_prerequisites.b64

Then you can run the script with the following command **in cmd.exe**:

.. code-block:: batch

   setup_pigweed_prerequisites.bat

.. note::

   You may see a few UAC prompts as the script installs Git, Python, and
   enables developer mode.

Once that is done, you can clone this project with the following command:

.. code-block:: bash

   git clone https://pigweed.googlesource.com/pigweed/sample_project

Environment setup
=================
Pigweed uses a local development environment for most of its tools. This
means tools are not installed to your machine, and are instead stored in a
directory inside your project (Note: git ignores this directory). The tools
are temporarily added to the PATH of the current shell session.

To make sure the latest tooling has been fetched and set up, run the bootstrap
command for your operating system:

.. tab-set::

   .. tab-item:: Linux
      :sync: linux

      .. code-block:: bash

         source ./bootstrap.sh

   .. tab-item:: macOS
      :sync: macos

      .. code-block:: bash

         source ./bootstrap.sh

   .. tab-item:: Windows
      :sync: windows

      .. code-block:: batch

         bootstrap.bat

After tooling updates, you might need to run bootstrap again to ensure the
latest tools.

After the initial bootstrap, you can use use the ``activate`` scripts to
configure the current shell for development without doing a full update.

.. tab-set::

   .. tab-item:: Linux
      :sync: linux

      .. code-block:: bash

         source ./activate.sh

   .. tab-item:: macOS
      :sync: macos

      .. code-block:: bash

         source ./activate.sh

   .. tab-item:: Windows
      :sync: windows

      .. code-block:: batch

         activate.bat

.. _docs-building:

Building
========
All of these commands must be run from inside an activated developer
environment. See `Environment setup <#environment-setup>`__

One-shot build
--------------
To build the project, documentation, and tests, run the following command in
an activated environment:

.. code-block:: bash

   pw build

Automatically build on file save
--------------------------------
Alternatively, if you'd like an automatic rebuild to trigger whenever you save
changes to files, use ``pw watch``:

.. code-block:: bash

   pw watch

----------------
Typical workflow
----------------
When you pull latest repository changes, run bootstrap:

.. tab-set::

   .. tab-item:: Linux
      :sync: linux

      .. code-block:: bash

         source ./bootstrap.sh

   .. tab-item:: macOS
      :sync: macos

      .. code-block:: bash

         source ./bootstrap.sh

   .. tab-item:: Windows
      :sync: windows

      .. code-block:: batch

         bootstrap.bat

If you're just launching a new shell session, you can activate instead:

.. tab-set::

   .. tab-item:: Linux
      :sync: linux

      .. code-block:: bash

         source ./activate.sh

   .. tab-item:: macOS
      :sync: macos

      .. code-block:: bash

         source ./activate.sh

   .. tab-item:: Windows
      :sync: windows

      .. code-block:: batch

         activate.bat

and rebuild with:

.. code-block:: bash

   pw build

----------------------
More info and Examples
----------------------
Check out some introductory examples :ref:`here <examples-root>`!
