| .. _chapter-pw-env_setup: |
| |
| ------------ |
| pw_env_setup |
| ------------ |
| A classic problem in the embedded space is reducing the time from git clone |
| to having a binary executing on a device. The issue is that an entire suite |
| of tools is needed for non-trivial production embedded projects. For example: |
| |
| - A C++ compiler for your target device, and also for your host |
| - A build system or three; for example, GN, Ninja, CMake, Bazel |
| - A code formatting program like clang-format |
| - A debugger like OpenOCD to flash and debug your embedded device |
| - A known Python version with known modules installed for scripting |
| - A Go compiler for the Go-based command line tools |
| |
| ...and so on |
| |
| In the server space, container solutions like Docker or Podman solve this; |
| however, in our experience container solutions are a mixed bag for embedded |
| systems development where one frequently needs access to native system |
| resources like USB devices, or must operate on Windows. |
| |
| pw_env_setup is our compromise solution for this problem that works on Mac, |
| Windows, and Linux. It leverages the Chrome packaging system `CIPD`_ to |
| bootstrap a Python installation, which in turn inflates a virtual |
| environment. The tooling is installed into your workspace, and makes no |
| changes to your system. This tooling is designed to be reused by any |
| project. |
| |
| .. _CIPD: https://github.com/luci/luci-go/tree/master/cipd |
| |
| .. warning:: |
| At this time pw_env_setup works for us, but isn’t well tested. We don’t |
| suggest relying on it just yet. However, we are interested in experience |
| reports; if you give it a try, please `send us a note`_ about your |
| experience. |
| |
| .. _send us a note: pigweed@googlegroups.com |