|
|
.. _docs-faq:
|
|
|
|
|
|
--------------------------
|
|
|
Frequently Asked Questions
|
|
|
--------------------------
|
|
|
|
|
|
Is Pigweed a framework?
|
|
|
-----------------------
|
|
|
There are three core components of Pigweed's offering:
|
|
|
|
|
|
1. The environment setup system (bootstrap and activate)
|
|
|
2. The GN-based build and test system
|
|
|
3. The individual modules (mostly C++ code)
|
|
|
|
|
|
We consider #1 and #2 combined as the "Pigweed Monolith" - since it has an
|
|
|
integrated environment setup and build system. However, this part of the system
|
|
|
is entirely optional; it is not only possible, but encouraged to take
|
|
|
individual modules (like for example ``pw_tokenizer`` or ``pw_ring_buffer``)
|
|
|
and integrate them into your existing environment setup approach and build
|
|
|
system.
|
|
|
|
|
|
So, to answer the question:
|
|
|
|
|
|
1. **Is Pigweed's environment setup system a framework?** No. This component
|
|
|
solves (a) downloading compilers and (b) setting up a Python virtual
|
|
|
environment; what you do with the environment is up to you.
|
|
|
2. **Is Pigweed's GN-based build & test setup system a framework?** In short,
|
|
|
yes. This is the most framework-like part of Pigweed, since you build your
|
|
|
code using Pigweed's GN-based primitives. However, it is optional.
|
|
|
3. **Are Pigweed's C++ modules a framework?** No. They are libraries you can
|
|
|
independently take into your project and use like any other C++ library.
|
|
|
|
|
|
Isn't C++ bloated and slow?
|
|
|
---------------------------
|
|
|
In general, no, but it is important to follow some guidelines as discussed in
|
|
|
the :ref:`Embedded C++ Guide <docs-embedded-cpp>`.
|
|
|
|
|
|
At Google, we have made some quantitative analysis of various common embedded
|
|
|
patterns in C++ to evaluate the cost of various constructs. We will open source
|
|
|
this work at some point.
|
|
|
|
|
|
How do I setup Pigweed for my project?
|
|
|
--------------------------------------
|
|
|
|
|
|
.. attention::
|
|
|
|
|
|
This FAQ entry should be an entire article, but isn't one yet; sorry!
|
|
|
|
|
|
To use Pigweed, you must decide the answer to one question: Do you wish to use
|
|
|
the Pigweed integrated environment and build, or just use individual modules?
|
|
|
|
|
|
A la carte: Individual modules only
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
This is best option if you have an existing project, with pre-existing build in
|
|
|
place.
|
|
|
|
|
|
To use the libraries, submodule or copy the relevant Pigweed modules into your
|
|
|
project, and use them like any other C++ library. You can reference the
|
|
|
existing GN files or CMake files when doing this. In the case of CMake, you can
|
|
|
directly import Pigweed's build from your project with CMake's external project
|
|
|
system, or just use a CMake include statement.
|
|
|
|
|
|
Monolith: Using the integrated system
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
This may be a good option if you are starting a new project. However,
|
|
|
there is a gap in our documentation and examples at the moment; sorry about
|
|
|
that! You may need to ask us for help; try the mailing list or chat room.
|
|
|
|
|
|
Note: Pigweed isn't quite ready for masses of projects to use the whole system
|
|
|
just yet. We will be offering examples and material for this eventually.
|
|
|
|
|
|
The summary is:
|
|
|
|
|
|
- Create a new repository
|
|
|
- Add Pigweed as a submodule; we suggest under ``third_party/pigweed`` or
|
|
|
``vendor/pigweed``. It is also possible to use Android's repo tool, but we
|
|
|
suggest submodules.
|
|
|
- Create your own ``BUILD.gn`` and ``BUILDCONFIG.gn``; we suggest starting by
|
|
|
copying the ones from Pigweed. You'll need to create your own toplevel
|
|
|
targets like those in Pigweed's root ``BUILD.gn``.
|
|
|
- Create a bootstrap script in your project root that optionally does some
|
|
|
project specific setup, then invokes the Pigweed upstream bootstrap (or in
|
|
|
the other order).
|
|
|
- If you have custom hardware, you will want to create a *target*. See the
|
|
|
`targets/` directory for examples like the STM32F429i-Discovery.
|
|
|
|
|
|
.. attention::
|
|
|
|
|
|
This section is incomplete; if you need help please reach out in chat or on
|
|
|
the mailing list. We know this part of Pigweed is incomplete and will help
|
|
|
those who are interested in giving Pigweed a try.
|
|
|
|
|
|
What development hosts are supported?
|
|
|
-------------------------------------
|
|
|
We support the following platforms:
|
|
|
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
| **Development host** | **Comments** |
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
| Linux on x86-64 | Most recent Linux distributions |
|
|
|
| | will work. |
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
| macOS on x86-64 | Mojave or newer should work. |
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
| Windows 10 on x86-64 | Native Windows only; WSL1 or 2 not |
|
|
|
| | supported. |
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
| Docker on x86-64 | Containers based on Ubuntu 18.04 |
|
|
|
| | and newer. |
|
|
|
+-------------------------------+---------------------------------------+
|
|
|
|
|
|
.. attention::
|
|
|
|
|
|
In all of the above supported platforms, the support is contingent on using
|
|
|
Pigweed's bootstrap (env setup) system. While it is possible to use Pigweed
|
|
|
without bootstrap, it is unsupported and undocumented at this time.
|
|
|
|
|
|
Partially supported host platform: Chrome OS
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
Chromebooks are able to run some of the Pigweed components; notably all the
|
|
|
"host" target builds and runs. However, due to USB access issues, it is not
|
|
|
possible to flash and run on real hardware (like for example the STM32F429i
|
|
|
Discovery).
|
|
|
|
|
|
To run on ChromeOS:
|
|
|
|
|
|
1. `Enable the Linux shell <https://support.google.com/chromebook/answer/9145439>`_
|
|
|
2. ``sudo apt-install build-essential``
|
|
|
3. Go through Pigweed setup.
|
|
|
|
|
|
What about other host platforms?
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
There are two key issues that make running the host tooling on other platforms
|
|
|
challenging:
|
|
|
|
|
|
1. Availability of up-to-date compilers
|
|
|
2. Availability of up-to-date Python
|
|
|
|
|
|
For both of these, Pigweed relies on Google-maintained binaries packaged in
|
|
|
CIPD, which includes daily builds of LLVM, and recent versions of the ARM GCC
|
|
|
toolchains. Platforms other than Mac/Windows/Linux running on x86-64 will need
|
|
|
to provide equivalent binaries, which is some effort.
|
|
|
|
|
|
Host platforms that we are likely to support in the future
|
|
|
..........................................................
|
|
|
|
|
|
- **Linux on ARM** - At time of writing (mid 2020), we do not support ARM-based
|
|
|
host platforms. However, we would like to support this eventually.
|
|
|
- **Windows on WSL2 x86-64** - There are some minor issues preventing WSL2 on
|
|
|
Windows from being a smooth experience, but we are working on them.
|
|
|
|
|
|
Platforms that we are unlikely to support
|
|
|
.........................................
|
|
|
|
|
|
- **Anything on x86-32** - While it's possible 32-bit x86 could be made to
|
|
|
work, we don't have enough users to make this worthwhile. If this is
|
|
|
something you are interested in and would be willing to support, let us know.
|
|
|
|
|
|
Why name the project Pigweed?
|
|
|
-----------------------------
|
|
|
Pigweed, also known as amaranth, is a nutritious grain and leafy salad green
|
|
|
that is also a rapidly growing weed. When developing the project that
|
|
|
eventually became Pigweed, we wanted to find a name that was fun, playful, and
|
|
|
reflective of how we saw Pigweed growing. Teams would start out using one
|
|
|
module that catches their eye, and after that goes well, they’d quickly start
|
|
|
using more.
|
|
|
|
|
|
So far, so good 😁
|