blob: 707101b92f3e5a7c2655a1f193eaf145976b6c50 [file] [log] [blame]
.. _docs-first-time-setup-guide:
========================
Get started with Pigweed
========================
.. _docs-first-time-setup-guide-express-setup:
-------------
Express setup
-------------
Run the following commands, and you should be ready to start developing with
Pigweed:
.. tab-set::
.. tab-item:: Linux
:sync: linux
.. inclusive-language: disable
.. code-block:: sh
sudo apt install git build-essential
curl -LJo /etc/udev/rules.d/60-openocd.rules https://raw.githubusercontent.com/openocd-org/openocd/master/contrib/60-openocd.rules
.. inclusive-language: enable
.. admonition:: Note
:class: tip
If you're using a Linux distribution that isn't based on Debian/Ubuntu,
see the manual setup directions below for prerequisite installation
instructions.
.. tab-item:: macOS
:sync: macos
.. inclusive-language: disable
.. code-block:: sh
xcode-select --install
pyv=`python3 -c "import sys; v=sys.version_info; print('{0}.{1}'.format(v[0], v[1]))"`; /Applications/Python\ $pyv/Install\ Certificates.command
sudo spctl --master-disable
.. inclusive-language: enable
.. tab-item:: Windows
:sync: windows
.. code-block:: bat
curl https://pigweed.googlesource.com/pigweed/examples/+/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
setup_pigweed_prerequisites.bat
This script requires admin privileges.
.. admonition:: Note
:class: warning
Due to issues with long file path handling on Windows, Pigweed strongly
recommends you clone projects to a short path like ``C:\projects``.
------------------------------
Manual setup with explanations
------------------------------
This section expands the contents of the express setup into more detailed
explanations of Pigweed's prerequisites. If you have already gone through the
:ref:`docs-first-time-setup-guide-express-setup`, you don't need to go through
these steps.
Install prerequisites
=====================
.. tab-set::
.. tab-item:: Linux
:sync: linux
Most Linux installations should work out-of-the-box and not require any manual
installation of prerequisites beyond basics like ``git`` and
``build-essential`` (or the equivalent for your distro). If you already do
software development, you likely already have these installed.
To ensure you have the necessary prerequisites, you can run the following
command on Debian/Ubuntu-based distributions:
.. code-block:: sh
sudo apt install git build-essential
The equivalent command on Fedora-based distributions is:
.. code-block:: sh
sudo dnf groupinstall "Development Tools"
The equivalent command on Arch-based distributions is:
.. code-block:: sh
sudo pacman -S git base-devel
.. tab-item:: macOS
:sync: macos
**Xcode SDK**
Pigweed requires Xcode to build on macOS. While you don't need the full Xcode
SDK, you should at least have ``xcode-select``.
You can install ``xcode-select`` with the following command:
.. code-block:: sh
xcode-select --install
**SSL certificates**
Pigweed's bootstrap process requires a working version of Python that can make
HTTPS requests to kickstart the initial dependency fetches. By default, the
macOS system Python does not have SSL certificates installed. You can install
them with the following commands:
.. code-block:: sh
pyv=`python3 -c "import sys; v=sys.version_info; print('{0}.{1}'.format(v[0], v[1]))"`; /Applications/Python\ $pyv/Install\ Certificates.command
.. tab-item:: Windows
:sync: windows
* Install `Git <https://git-scm.com/download/win>`_. Git must be installed to
run from the command line and third-party software or be added to ``PATH``.
* Install `Python <https://www.python.org/downloads/windows/>`_.
* If you plan to flash devices with firmware, you'll need to
`install OpenOCD <https://github.com/openocd-org/openocd/releases/latest>`_
and ensure it's on your system PATH.
Configure system settings
=========================
.. tab-set::
.. tab-item:: Linux
:sync: linux
.. inclusive-language: disable
To flash devices using `OpenOCD <https://openocd.org/>`_, you will need to
extend your system udev rules by adding a new configuration file in
``/etc/udev/rules.d/`` that lists the hardware debuggers you'll be using. The
OpenOCD repository has a good
`example udev rules file <https://github.com/openocd-org/openocd/blob/master/contrib/60-openocd.rules>`_
that includes many popular hardware debuggers.
.. inclusive-language: enable
.. tab-item:: macOS
:sync: macos
Pigweed relies on many tools not downloaded from the App Store. While you may
prefer to manually allow individual applications, this may be frustrating or
impractical due to the large number of tools required to build Pigweed.
It is usually most practical to globally allow tools not originating from the
App Store using the following command:
.. inclusive-language: disable
.. code-block:: sh
sudo spctl --master-disable
.. inclusive-language: enable
.. tab-item:: Windows
:sync: windows
* Ensure that `Developer Mode
<https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development>`_
is enabled. This can also be done by running the following command as an
administrator:
.. code-block:: bat
REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\AppModelUnlock /t REG_DWORD /v AllowDevelopmentWithoutDevLicense /d 1 /f\""
* Enable long file paths. This can be done using ``regedit`` or by running the
following command as an administrator:
.. code-block:: bat
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f
* Enable Git symlinks:
.. code-block:: bat
git config --global core.symlinks true
-------------
Support notes
-------------
.. tab-set::
.. tab-item:: Linux
:sync: linux
Linux is Pigweed's recommended platform for embedded software development. When
developing on Linux, you can enjoy all of Pigweed's benefits like tokenized
logging, automated on-device unit testing, RPC, and rich build system and IDE
integrations.
.. tab-item:: macOS
:sync: macos
macOS is a well-supported platform for embedded software development with
Pigweed. When developing on macOS, you can enjoy the vast majority of benefits
of Pigweed like automated on-device unit testing, RPC, and rich build system
and IDE integrations.
Due to the nature of OS implementation differences, the following features
are not supported on macOS:
* :ref:`pw_build_info GNU build IDs <module-pw_build_info-gnu-build-ids>`: Not
supported when building for macOS, but supported when building for embedded
devices.
* :ref:`pw_tokenizer string tokenization <module-pw_tokenizer-tokenization>`:
Not supported when building for macOS, but supported when building for
embedded devices.
Individual modules have the most recent status on OS compatibility, so when in
doubt check the documentation for the module of interest.
.. tab-item:: Windows
:sync: windows
While Windows is a supported platform for embedded software development with
Pigweed, the experience might not be quite as seamless when compared to macOS
and Linux. When developing on Windows, you can enjoy most of Pigweed's features
like automated on-device unit testing, RPC, and rich build system and IDE
integrations, but you may experience occasional snags along the way.
**Long file path issues**
Even though Pigweed's setup process enables long file path handling at a system
level, this doesn't mean that the problem is eliminated. Some applications are
hard-coded in ways that cause long file paths to continue to work incorrectly.
For example, `MinGW-w64 <https://www.mingw-w64.org/>`_-based GCC toolchains have
a `long-standing issue <https://issues.pigweed.dev/300995404>`_ with handling
long file paths on Windows. Unfortunately, this includes the Windows binaries
for `Arm's GNU toolchains <https://developer.arm.com/downloads/-/gnu-rm>`_.
For this reason, Pigweed strongly recommends cloning projects into a short path
like ``C:\projects``. It's also a good idea to be aware of the length of file
paths throughout your project.
**Other limitations**
Due to the nature of OS implementation differences, the following features
are not currently supported on Windows:
* Pigweed does not provide integrations for
`C++ sanitizers <https://github.com/google/sanitizers/wiki>`_ and
`fuzz testing <https://github.com/google/fuzztest?tab=readme-ov-file#fuzztest>`_
on Windows.
* :ref:`pw_build_info GNU build IDs <module-pw_build_info-gnu-build-ids>`: Not
supported when building for Windows, but supported when building for embedded
devices.
* :ref:`pw_tokenizer string tokenization <module-pw_tokenizer-tokenization>`:
Not supported when building for Windows, but supported when building for
embedded devices.
Individual modules have the most recent status on OS compatibility, so when in
doubt check the documentation for the module of interest.