Fuchsia libraries#

Fuchsia is a modern open source operating system developed by Google.

Pigweed does not use the Fuchsia operating system itself, but uses some low-level libraries developed for it.

Features#

Parts of two Fuchsia libraries are used in Pigweed:

  • FIT – Portable library of low-level C++ features.

  • stdcompat – Implements newer C++ features for older standards.

Code synchronization#

Unlike other third party libraries used by Pigweed, some Fuchsia source code is included in tree. A few factors drove this decision:

  • Core Pigweed features like pw::Function depend on these Fuchsia libraries. Including the source in-tree avoids having Pigweed require an an external repository.

  • The Fuchsia repository is too large to require downstream projects to clone.

If Fuchsia moves stdcompat and fit to separate repositories, the decision to include Fuchsia code in tree may be reconsidered.

Files are synced from Fuchsia repository to the third_party/fuchsia/repo directory in Pigweed. The files maintain their original paths under that directory. The Copybara script applies patches to adapt the sources for use in Pigweed. For example, __builtin_abort is replaced with PW_ASSERT.

Process#

Code is synchronized between the Fuchsia repository and the Pigweed repository using the third_party/fuchsia/copy.bara.sky Copybara script.

To synchronize with the Fuchsia repository, run the copybara tool with the script:

copybara third_party/fuchsia/copy.bara.sky

That creates a Gerrit change with updates from the Fuchsia repo, if any.

If the copybara command fails, the Copybara script or patch file may need to be updated. Try the following:

  • Ensure that the source files in copy.bara.sky are up-to-date. Fix the list if any files were renamed in Fuchsia.

  • Update the patch file Copybara applies by running python third_party/fuchsia/generate_fuchsia_patch.py.