aboutsummaryrefslogtreecommitdiff
path: root/docs/overview.rst
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-23 00:09:38 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-23 00:09:38 +0000
commitaff67b6bbc28eba4d1f4a4a12e116e63ab4813ea (patch)
treeb7892405559e1714c330ffb8ac9de9104296f4e3 /docs/overview.rst
parent13960e09d00c4e8612da0a9084e0e051603f072b (diff)
parentf054515492af5132f685cb23fe11891ee77104c9 (diff)
downloadpigweed-aff67b6bbc28eba4d1f4a4a12e116e63ab4813ea.tar.gz
Change-Id: I018123259cd231d0e74933e492391999e36650e8
Diffstat (limited to 'docs/overview.rst')
-rw-r--r--docs/overview.rst138
1 files changed, 138 insertions, 0 deletions
diff --git a/docs/overview.rst b/docs/overview.rst
new file mode 100644
index 000000000..d79306ea9
--- /dev/null
+++ b/docs/overview.rst
@@ -0,0 +1,138 @@
+.. _docs-overview:
+
+========
+Overview
+========
+
+Why Build Pigweed?
+==================
+.. note::
+
+ See our :ref:`docs-mission` for more details.
+
+Our goal is to make embedded software development efficient, robust, and
+heck, even delightful, for projects ranging from weekend Arduino experiements
+to commercial products selling in the millions.
+
+Embedded software development is notoriously arcane. Developers often have to
+track down vendor toolchains specific to the hardware they're targeting, write
+their code against hardware-specfic SDKs/HALs, and limit themselves to a small
+subset of C. Project teams are on their own to figure out how to set up a build
+system, automated testing, serial communication, and many other embedded
+project fundamentals. This is error prone and takes effort away from developing
+the actual product!
+
+There are solutions on the market that promise to solve all of these problems
+with a monolithic framework—just write your code against the framework and use
+hardware the framework supports, and you get an efficient embedded development
+environment. But this approach doesn't work well for existing projects that
+weren't built on the framework from the beginning or for projects that have
+specific needs the framework wasn't designed for. We know from experience that
+this approach alone doesn't meet our goal.
+
+So we have set out to build a platform that supports successful embedded
+developers at every scale by allowing them to adopt as much or as little of
+what Pigweed provides as they need, in the way that works best for their
+project.
+
+How Pigweed Works
+=================
+Pigweed provides four foundational pillars to support your embedded development:
+
+* :ref:`A comprehensive set of libraries for embedded development<docs-concepts-embedded-development-libraries>`
+* :ref:`A hermetic and replicable development environment<docs-concepts-development-environment>`
+* :ref:`A system for building, testing, and linting your project<docs-concepts-build-system>`
+* :ref:`A full framework for new projects that want a turn-key solution<docs-concepts-full-framework>`
+
+.. _docs-concepts-embedded-development-libraries:
+
+Embedded Development Libraries
+------------------------------
+Pigweed enables you to use modern C++ and software development best practices in
+your embedded project without compromising performance or increasing memory use
+compared to conventional embedded C.
+
+We provide libraries (:ref:`modules <docs-glossary-module>`) for
+:ref:`strings<module-pw_string>`, :ref:`time<module-pw_chrono>`,
+:ref:`assertions<module-pw_assert>`, :ref:`logging<module-pw_log>`,
+:ref:`serial communication<module-pw_spi>`, :ref:`remote procedure calls (RPC)
+<module-pw_rpc>`, and :ref:`much more<docs-module-guides>`.
+
+These modules are designed to work both on your host machine and on a wide
+variety of target devices. We achieve this by writing them in an inherently
+portable way, or through the facade/backend pattern. As a result, you can write
+most or all of your code to run transparently on your host machine and targets.
+
+.. _docs-concepts-development-environment:
+
+Development Environment
+-----------------------
+Managing toolchains, build systems, and other software needed for a project is
+complex. Pigweed provides all of this out of the box for Linux, Mac, and
+Windows systems in a sealed environment that leaves the rest of your system
+untouched. Getting new developers started is as simple as cloning your project
+repository and activating the Pigweed environment.
+
+.. _docs-concepts-build-system:
+
+Build System
+------------
+Pigweed modules are built to integrate seamlessly into projects using GN. We
+are rapidly expanding our good support for CMake and nascent support for Bazel
+so you can use your build system of choice. For new projects, Pigweed provides a
+build system you can integrate your own code into that works out of the box.
+
+.. _docs-concepts-full-framework:
+
+Full Framework (coming in 2022)
+-------------------------------
+For those who want a fully-integrated solution that provides everything Pigweed
+has to offer with an opinionated project structure, we are working diligently
+on a :ref:`Pigweed framework<module-pw_system>`. Stay tuned for more news to
+come! In the meantime, we invite you to discuss this and collaborate with us
+on `Discord <https://discord.gg/M9NSeTA>`_.
+
+.. _docs-concepts-right-for-my-project:
+
+Is Pigweed Right for My Project?
+================================
+Pigweed is still in its early stages, and while we have ambitious plans for it,
+Pigweed might not be the right fit for your project today. Here are some things
+to keep in mind:
+
+* Many individual modules are stable and are running on shipped devices today.
+ If any of those modules meet your needs, you should feel safe bringing them
+ into your project.
+
+* Some modules are in very early and active stages of development. They likely
+ have unstable APIs and may not work on all supported targets. If this is the
+ case, it will be indicated in the module's documentation. If you're interested
+ in contributing to the development of one of these modules, we encourage you
+ to experiment with them. Otherwise they aren't ready for use in most projects.
+
+* Setting up new projects to use Pigweed is currently not very easy, but we are
+ working to address that. In the meantime, join the Pigweed community on
+ `Discord <https://discord.gg/M9NSeTA>`_ to get help.
+
+Supported language versions
+===========================
+
+C++
+---
+All Pigweed code requires C++17 and is fully compatible with C++20. Pigweed
+defines GN toolchains for building with C++17 and C++20; see :ref:`target-host`
+target documentation for more information. For Bazel, the C++ standard version
+can be configured using the `--cxxopt flag
+<https://bazel.build/docs/user-manual#cxxopt>`_.
+
+.. _docs-concepts-python-version:
+
+Python
+------
+Pigweed officially supports Python 3.8, 3.9, 3.10, and 3.11.
+
+.. toctree::
+ :maxdepth: 1
+ :hidden:
+
+ mission