mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-09-21 22:28:10 +00:00
d596a539ee
The following environment variables are now used to pass options into pw_env_setup: * PW_CIPD_PACKAGEFILES * PW_VIRTUALENV_REQUIREMENTS * PW_VIRTUALENV_SETUPPYROOTS * PW_CARGO_PACKAGEFILES Each of these variables can contain multiple entries separated by ':' (or ';' on Windows) like PATH. However, they will also be interpreted as globs, so PW_VIRTUALENV_REQUIREMENTS="/foo/bar/*/requirements.txt" is perfectly valid. They should be full paths. Projects depending on Pigweed should prepend to these variables and then invoke Pigweed's bootstrap.sh (or bootstrap.bat). Users wanting additional setup should set these variables in their shell init files. Change-Id: Ibf0f1d5279028856a590ffc50850df2174c38e28 Bug: 138
63 lines
2.7 KiB
ReStructuredText
63 lines
2.7 KiB
ReStructuredText
.. _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
|
||
|
||
Projects using Pigweed can leverage ``pw_env_setup`` to install their own
|
||
dependencies. The following environment variables are now used to pass options
|
||
into pw_env_setup.
|
||
|
||
* ``PW_CIPD_PACKAGE_FILES``
|
||
* ``PW_VIRTUALENV_REQUIREMENTS``
|
||
* ``PW_VIRTUALENV_SETUP_PY_ROOTS``
|
||
* ``PW_CARGO_PACKAGE_FILES``
|
||
|
||
Each of these variables can contain multiple entries separated by ``:``
|
||
(or ``;`` on Windows) like the ``PATH`` environment variable. However, they
|
||
will also be interpreted as globs, so
|
||
``PW_VIRTUALENV_REQUIREMENTS="/foo/bar/*/requirements.txt"`` is perfectly
|
||
valid. They should be full paths.
|
||
|
||
Projects depending on Pigweed should set these variables and then invoke
|
||
Pigweed's ``bootstrap.sh`` (or ``bootstrap.bat``), which will add to each of
|
||
these variables before invoking ``pw_env_setup``. Users wanting additional
|
||
setup can set these variables in their shell init files. Pigweed will add to
|
||
these variables and will not remove any existing values. At the end of
|
||
Pigweed's bootstrap process, it will reset these variables to their initial
|
||
values.
|