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