pw_docgen: Single-source the module metadata

This change reduces boilerplate in module docs, ensures that metadata
is consistent across all of a module's docs pages, and paves the way
for improvements to //docs/modules.rst.

Bug: 292582625
Change-Id: Ib38ac37d553e9d4baa2796e1b0c53e9f619703fe
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/193333
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Kayce Basques <kayce@google.com>
Reviewed-by: Chad Norvell <chadnorvell@google.com>
This commit is contained in:
Kayce Basques 2024-03-14 23:01:57 +00:00 committed by CQ Bot Account
parent 25731b152a
commit a40cea068a
83 changed files with 863 additions and 221 deletions

View File

@ -226,6 +226,37 @@ The following sections provide instructions on how to write each content type.
:ref:`docs-contrib-moduledocs-multipage` they might be an entire page of
content or a section within a page.
.. _docs-contrib-moduledocs-metadata:
Module metadata
===============
1. Add a ``pigweed-module`` directive right after the title in your
``docs.rst``:
.. code-block::
==========
pw_example
==========
.. pigweed-module::
:name: pw_example
2. Add metadata for your module in ``//docs/module_metadata.json``.
See ``//docs/module_metadata_schema.json`` for the schema
definition.
3. Add a ``pigweed-module-subpage`` directive right after the title
in each of your other docs pages (if your module has multiple docs
pages):
.. code-block::
=============
API reference
=============
.. pigweed-module-subpage::
:name: pw_example
.. _docs-contrib-moduledocs-sales:
Sales pitch

213
docs/module_metadata.json Normal file
View File

@ -0,0 +1,213 @@
{
"pw_alignment": {
"tagline": "Natural object alignment, guaranteed",
"status": "stable",
"languages": [
"C++17"
]
},
"pw_allocator": {
"tagline": "Flexible, safe, and measurable memory allocation",
"status": "unstable",
"languages": [
"C++17"
],
"size": "400 to 1800 bytes"
},
"pw_async2": {
"tagline": "Cooperative async tasks for embedded",
"status": "experimental",
"languages": [
"C++17"
]
},
"pw_bluetooth_sapphire": {
"tagline": "Battle-tested Bluetooth with rock-solid reliability",
"status": "unstable",
"size": "1.5 to 2 mB",
"languages": [
"C++17"
]
},
"pw_boot": {
"tagline": "Simplified booting for C++ targets",
"status": "stable",
"languages": [
"C++17"
]
},
"pw_build_android": {
"tagline": "Utilities for using Pigweed in Android platform",
"status": "unstable",
"languages": [
"C++20"
]
},
"pw_console": {
"tagline": "Multi-purpose pluggable interactive console for dev & manufacturing",
"status": "stable",
"size": "N/A (host) but works best with pw_rpc on-device",
"languages": [
"Python"
]
},
"pw_digital_io_linux": {
"tagline": "Digital I/O interface for Linux userspace",
"status": "unstable",
"languages": [
"C++17"
]
},
"pw_emu": {
"tagline": "Flexible emulators frontend",
"status": "experimental",
"languages": [
"Python",
"CLI"
]
},
"pw_env_setup_zephyr": {
"tagline": "Zephyr utilities",
"status": "experimental"
},
"pw_format": {
"tagline": "String formatting",
"status": "experimental",
"languages": [
"Rust"
]
},
"pw_function": {
"tagline": "Embedded-friendly std::function",
"status": "stable",
"languages": [
"C++17"
]
},
"pw_fuzzer": {
"tagline": "Better C++ code through easier fuzzing",
"status": "unstable",
"languages": [
"C++17",
"C++20"
]
},
"pw_grpc": {
"tagline": "pw_rpc over gRPC",
"status": "unstable",
"languages": [
"C++17",
"C++20"
]
},
"pw_hdlc": {
"tagline": "Simple, robust, and efficient serial communication",
"status": "stable",
"size": "1400 to 2600 bytes",
"languages": [
"Python",
"C++17",
"TypeScript"
]
},
"pw_json": {
"tagline": "Simple, efficient C++ JSON serialization",
"status": "stable",
"languages": [
"C++17"
]
},
"pw_kvs": {
"tagline": "Lightweight, persistent key-value store",
"status": "stable",
"size": "~12 kB",
"languages": [
"C++17"
]
},
"pw_multibuf": {
"tagline": "A buffer API optimized for zero-copy messaging",
"status": "unstable",
"languages": [
"C++17"
]
},
"pw_perf_test": {
"tagline": "Micro-benchmarks that are easy to write and run",
"status": "unstable",
"languages": [
"C++17"
]
},
"pw_result": {
"tagline": "Error propagation primitives: value-or-error",
"status": "stable",
"languages": [
"C++17"
]
},
"pw_software_update": {
"tagline": "Secure software delivery",
"status": "experimental",
"languages": [
"Python",
"C++17"
]
},
"pw_span": {
"tagline": "std::span for C++17",
"status": "stable",
"languages": [
"C++17",
"C++20"
]
},
"pw_status": {
"tagline": "Exception-free error propagation for embedded",
"status": "stable",
"languages": [
"C++17",
"C",
"Python",
"Java",
"TypeScript",
"Rust"
]
},
"pw_string": {
"tagline": "Efficient, easy, and safe string manipulation",
"status": "stable",
"size": "500 to 1500 bytes",
"languages": [
"C++17"
]
},
"pw_tokenizer": {
"tagline": "Compress strings to shrink logs by +75%",
"status": "stable",
"size": "50% reduction in log size",
"languages": [
"C++",
"C11",
"Python",
"Rust",
"TypeScript",
"Java"
]
},
"pw_toolchain_bazel": {
"tagline": "A modular toolkit for declaring C/C++ toolchains in Bazel",
"status": "unstable",
"languages": [
"Starlark"
]
},
"pw_unit_test": {
"tagline": "GoogleTest for embedded",
"status": "stable"
},
"pw_watch": {
"tagline": "Embedded development file system watcher",
"status": "stable"
}
}

View File

@ -0,0 +1,54 @@
{
"description": "Schema for //docs/module_metadata.json.",
"type": "object",
"patternProperties": {
"^pw_.*": {
"description": "The metadata for each module must match this schema.",
"type": "object",
"properties": {
"languages": {
"description": "The programming languages that the module supports.",
"type": "array",
"items": {
"type": "string",
"enum": [
"C",
"C11",
"C++",
"C++17",
"C++20",
"CLI",
"Java",
"Python",
"Rust",
"Starlark",
"TypeScript"
]
}
},
"size": {
"description": "A summary of the code size impact of the module.",
"type": "string"
},
"status": {
"description": "The status of the module.",
"type": "string",
"enum": [
"stable",
"unstable",
"experimental"
]
},
"tagline": {
"description": "A concise summary of the module's value proposition.",
"type": "string"
}
},
"required": [
"status"
],
"additionalProperties": false
}
},
"additionalProperties": false
}

View File

@ -5,9 +5,6 @@ pw_alignment
============
.. pigweed-module::
:name: pw_alignment
:tagline: Natural object alignment, guaranteed
:status: stable
:languages: C++17
- **Transparent**: Enforce natural alignment without any changes to how your
objects are used.

View File

@ -5,7 +5,6 @@ API reference
=============
.. pigweed-module-subpage::
:name: pw_allocator
:tagline: pw_allocator: Flexible, safe, and measurable memory allocation
This module provides the following:

View File

@ -5,7 +5,6 @@ Code size analysis
==================
.. pigweed-module-subpage::
:name: pw_allocator
:tagline: pw_allocator: Flexible, safe, and measurable memory allocation
This module provides several implementations of the
:ref:`module-pw_allocator-api-allocator` interface. The tables below shows the

View File

@ -5,7 +5,6 @@ Design & roadmap
================
.. pigweed-module-subpage::
:name: pw_allocator
:tagline: pw_allocator: Flexible, safe, and measurable memory allocation
----------------------------------
Design of pw::allocator::Allocator

View File

@ -5,10 +5,6 @@ pw_allocator
============
.. pigweed-module::
:name: pw_allocator
:tagline: Flexible, safe, and measurable memory allocation
:status: unstable
:languages: C++17
:code-size-impact: 400 to 1800 bytes
- **Flexible**: Simple interface makes it easy to inject specific behaviors.
- **Safe**: Can detect memory corruption, e.g overflows and use-after-free.

View File

@ -5,7 +5,6 @@ Guides
======
.. pigweed-module-subpage::
:name: pw_allocator
:tagline: pw_allocator: Flexible, safe, and measurable memory allocation
.. _module-pw_allocator-get-started:

View File

@ -5,9 +5,6 @@ pw_async2
=============
.. pigweed-module::
:name: pw_async2
:tagline: Cooperative async tasks for embedded
:status: experimental
:languages: C++17
- **Simple Ownership**: Say goodbye to that jumble of callbacks and shared
state! Complex tasks with many concurrent elements can be expressed by

View File

@ -5,10 +5,6 @@ pw_bluetooth_sapphire
=====================
.. pigweed-module::
:name: pw_bluetooth_sapphire
:tagline: Battle-tested Bluetooth with rock-solid reliability
:status: unstable
:languages: C++17
:code-size-impact: 1.5 to 2 megabytes
.. attention::
This module is still under construction. There is no public API yet. Please

View File

@ -5,9 +5,6 @@ pw_boot
=======
.. pigweed-module::
:name: pw_boot
:tagline: Simplified booting for embedded C++ targets
:status: stable
:languages: C++17
``pw_boot`` provides a linker script and some early initialization of static
memory regions and C++ constructors. This is enough to get many targets booted

View File

@ -5,9 +5,6 @@ pw_build_android
================
.. pigweed-module::
:name: pw_build_android
:tagline: Utilities for using Pigweed in Android platform
:status: unstable
:languages: C++20
``pw_build_android`` provides simple utilities and guidelines for building with
Soong.

View File

@ -5,10 +5,6 @@ pw_console
==========
.. pigweed-module::
:name: pw_console
:tagline: Multi-purpose pluggable interactive console for dev & manufacturing
:status: stable
:languages: Python
:code-size-impact: N/A (host) but works best with pw_rpc on device
The Pigweed Console provides a Python repl (read eval print loop) using
`ptpython`_ and a log message viewer in a single-window terminal based

View File

@ -5,7 +5,6 @@ Embedding Guide
===============
.. pigweed-module-subpage::
:name: pw_console
:tagline: pw_console: Multi-purpose pluggable interactive console for dev & manufacturing
-------------
Using embed()

View File

@ -4,7 +4,6 @@ Internal Design
===============
.. pigweed-module-subpage::
:name: pw_console
:tagline: pw_console: Multi-purpose pluggable interactive console for dev & manufacturing
Threads and Event Loops
-----------------------

View File

@ -5,7 +5,6 @@ Plugin Guide
============
.. pigweed-module-subpage::
:name: pw_console
:tagline: pw_console: Multi-purpose pluggable interactive console for dev & manufacturing
Pigweed Console supports extending the user interface with custom widgets. For
example: Toolbars that display device information and provide buttons for

View File

@ -4,7 +4,6 @@ User Guide
==========
.. pigweed-module-subpage::
:name: pw_console
:tagline: pw_console: Multi-purpose pluggable interactive console for dev & manufacturing
.. tip::

View File

@ -5,7 +5,6 @@ Manual Test Procedure
=====================
.. pigweed-module-subpage::
:name: pw_console
:tagline: pw_console: Multi-purpose pluggable interactive console for dev & manufacturing
``pw_console`` is a Terminal based user interface which is difficult to
completely test in an automated fashion. Unit tests that don't depend on the

View File

@ -7,9 +7,6 @@ pw_digital_io_linux
===================
.. pigweed-module::
:name: pw_digital_io_linux
:tagline: Digital IO interface for Linux userspace
:status: unstable
:languages: C++17
``pw_digital_io_linux`` implements the :ref:`module-pw_digital_io` interface
using the `Linux userspace gpio-cdev interface

View File

@ -1,8 +1,8 @@
.. _module-pw_docgen:
---------
=========
pw_docgen
---------
=========
The docgen module provides tools to generate documentation for Pigweed-based
projects, and for Pigweed itself.
@ -20,8 +20,9 @@ depend on other build targets, such as report cards for binary size/profiling.
Any time the code is changed, documentation will be regenerated with the updated
reports.
Documentation Overview
======================
----------------------
Documentation overview
----------------------
Each Pigweed module provides documentation describing its functionality, use
cases, and programming API.
@ -29,9 +30,9 @@ Included in a module's documentation are report cards which show an overview of
the module's size cost and performance benchmarks. These allow prospective users
to evaluate the impact of including the module in their projects.
Build Integration
=================
-----------------
Build integration
-----------------
Pigweed documentation files are written in `reStructuredText`_ format and
rendered to HTML using `Sphinx`_ through Pigweed's GN build system.
@ -53,10 +54,10 @@ system can either be used directly within Pigweed, or integrated into a
downstream project.
GN Templates
------------
============
pw_doc_group
____________
------------
The main template for defining documentation files is ``pw_doc_group``. It is
used to logically group a collection of documentation source files and assets.
Each Pigweed module is expected to provide at least one ``pw_doc_group`` target
@ -87,7 +88,7 @@ groups, causing them to be built with it.
}
pw_doc_gen
__________
----------
The ``pw_doc_gen`` template creates a target which renders complete HTML
documentation for a project. It depends on registered ``pw_doc_group`` targets
and creates an action which collects and renders them.
@ -120,7 +121,7 @@ to tie everything together.
]
}
Generating Documentation
Generating documentation
------------------------
All source files listed under a ``pw_doc_gen`` target and its ``pw_doc_group``
dependencies get copied out into a directory structure mirroring the original
@ -178,50 +179,18 @@ your browser will refresh as you make changes to the source files.
In most cases, you will not need to run the docs server directly. Instead, it
will be run via :ref:`module-pw_watch`.
-----------------
Sphinx Extensions
=================
-----------------
This module houses Pigweed-specific extensions for the Sphinx documentation
generator. Extensions are included and configured in ``docs/conf.py``.
module_metadata
---------------
Per :ref:`SEED-0102 <seed-0102>`, Pigweed module documentation has a standard
format. The ``pigweed-module`` Sphinx directive provides that format and
registers module metadata that can be used elsewhere in the Sphinx build.
We need to add the directive after the document title, and add a class *to*
the document title to achieve the title & subtitle formatting. Here's an
example:
.. code-block:: rst
.. rst-class:: with-subtitle
=========
pw_string
=========
.. pigweed-module::
:name: pw_string
:tagline: Efficient, easy, and safe string manipulation
:status: stable
:languages: C++17, Rust
:code-size-impact: 500 to 1500 bytes
Module sales pitch goes here!
Directive options
_________________
- ``name``: The module name (required)
- ``tagline``: A very short tagline that summarizes the module (required)
- ``status``: One of ``experimental``, ``unstable``, and ``stable`` (required)
- ``is-deprecated``: A flag indicating that the module is deprecated
- ``languages``: A comma-separated list of languages the module supports. If
the language has API docs (Rust), they will be linked from the metadata block.
- ``code-size-impact``: A summarize of the average code size impact
===============
See :ref:`docs-contrib-moduledocs-metadata`.
Canonical URL configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^
---------------------------
``module_metadata`` fixes the canonical URLs for ``*/docs.html`` pages. By
default Sphinx assumes that a page's canonical URL is its full URL. E.g. the
default canonical URL for ``//pw_string/docs.rst`` is

View File

@ -23,6 +23,8 @@ Everything is implemented through the Sphinx Extension API.
"""
from dataclasses import dataclass
import json
import os
import sys
from typing import cast, Dict, List, Optional, TypeVar, Union
@ -37,6 +39,13 @@ try:
bs_enabled = True
except ModuleNotFoundError:
bs_enabled = False
try:
import jsonschema # type: ignore
jsonschema_enabled = True
except ModuleNotFoundError:
jsonschema_enabled = False
# pylint: enable=import-error
import docutils
@ -58,6 +67,22 @@ from sphinx_design.cards import CardDirective
EnvAttrT = TypeVar('EnvAttrT')
# The module metadata is exposed as a global because it's used as read-only
# data. Opening and reading the metadata file in one of the event handlers
# would cause hundreds of filesystem reads on each build because those event
# handlers fire once for each docs page.
metadata_file = 'docs/module_metadata.json'
schema_file = 'docs/module_metadata_schema.json'
with open(f'{os.environ["PW_ROOT"]}/{schema_file}', 'r') as f:
schema = json.load(f)
with open(f'{os.environ["PW_ROOT"]}/{metadata_file}', 'r') as f:
metadata = json.load(f)
# Make sure the metadata matches its schema. Raise an uncaught exception
# if not.
if jsonschema_enabled:
jsonschema.validate(metadata, schema)
@dataclass
class ParsedBody:
topnav: str
@ -97,8 +122,74 @@ class EnvMetadata:
return self._get_env_attr('pw_module_nav', default)
def status_choice(arg):
return directives.choice(arg, ('experimental', 'unstable', 'stable'))
def get_languages(module_name: str) -> Optional[List[str]]:
"""Returns the list of languages that a module supports.
Args:
module_name: The module to look up.
Returns:
A list of programming languages that the module supports, or ``None``
if this has not been defined in ``//docs/module_metadata.json``.
"""
if module_name not in metadata:
return None
if 'languages' not in metadata[module_name]:
return None
return metadata[module_name]['languages']
def get_status(module_name: str) -> str:
"""Returns the status of a module.
Preconditions:
The status must be defined in ``//docs/module_metadata.json``.
Args:
module_name: The module to look up.
Returns:
The status of the module as a string.
"""
if module_name not in metadata:
sys.exit(f'{module_name} not found in {metadata_file}')
if 'status' not in metadata[module_name]:
sys.exit(f'{module_name}.status not found in {metadata_file}')
return metadata[module_name]['status']
def get_tagline(module_name: str) -> Optional[str]:
"""Returns the tagline for a module.
Args:
module_name: The module to look up.
Returns:
The module's tagline or ``None`` if no tagline has been defined
in ``//docs/module_metadata.json``.
"""
if module_name not in metadata:
return None
if 'tagline' not in metadata[module_name]:
return None
return metadata[module_name]['tagline']
def get_code_size(module_name: str) -> Optional[str]:
"""Returns the code size impact summary for a module.
Args:
module_name: The module to look up.
Returns:
The code size impact summary as a string or ``None`` if no summary
has been defined in ``//docs/module_metadata.json``.
"""
if module_name not in metadata:
return None
if 'size' not in metadata[module_name]:
return None
return metadata[module_name]['size']
def status_badge(module_status: str) -> str:
@ -131,7 +222,7 @@ def concat_tags(*tag_lists: List[str]) -> List[str]:
def create_topnav(
subtitle: str,
subtitle: Optional[str],
extra_classes: Optional[List[str]] = None,
) -> nodes.Node:
"""Create the nodes for the top title and navigation bar."""
@ -142,12 +233,13 @@ def create_topnav(
topnav_container = nodes.container(classes=topnav_classes)
subtitle_node = nodes.paragraph(
classes=['pw-topnav-subtitle'],
text=subtitle,
)
if subtitle:
subtitle_node = nodes.paragraph(
classes=['pw-topnav-subtitle'],
text=subtitle,
)
topnav_container += subtitle_node
topnav_container += subtitle_node
return topnav_container
@ -157,16 +249,7 @@ class PigweedModuleDirective(SphinxDirective):
required_arguments = 0
final_argument_whitespace = True
has_content = True
option_spec = {
'name': directives.unchanged_required,
'tagline': directives.unchanged_required,
'status': status_choice,
'is-deprecated': directives.flag,
'languages': directives.unchanged,
'code-size-impact': directives.unchanged,
'facade': directives.unchanged,
'nav': directives.unchanged_required,
}
option_spec = {'name': directives.unchanged_required}
def _try_get_option(self, option: str):
"""Try to get an option by name and raise on failure."""
@ -182,34 +265,23 @@ class PigweedModuleDirective(SphinxDirective):
def run(self) -> List[nodes.Node]:
module_name = self._try_get_option('name')
tagline = self._try_get_option('tagline')
tagline = get_tagline(module_name)
status = get_status(module_name)
status_tags: List[str] = [
status_badge(self._try_get_option('status')),
status_badge(status),
]
if 'is-deprecated' in self.options:
status_tags.append(':bdg-danger:`Deprecated`')
languages = get_languages(module_name)
language_tags = []
if 'languages' in self.options:
languages = self.options['languages'].split(',')
if len(languages) > 0:
for language in languages:
language = language.strip()
if language == 'Rust':
language_tags.append(
f':bdg-link-info:`{language}'
+ f'</rustdoc/{module_name}>`'
)
else:
language_tags.append(f':bdg-info:`{language}`')
if languages:
for language in languages:
language_tags.append(f':bdg-info:`{language}`')
code_size_impact = []
if code_size_text := self._maybe_get_option('code-size-impact'):
code_size_text = get_code_size(module_name)
if code_size_text:
code_size_impact.append(f'**Code Size Impact:** {code_size_text}')
# Move the directive content into a section that we can render wherever
@ -247,12 +319,15 @@ class PigweedModuleSubpageDirective(PigweedModuleDirective):
has_content = True
option_spec = {
'name': directives.unchanged_required,
'tagline': directives.unchanged_required,
'nav': directives.unchanged_required,
}
def run(self) -> List[nodes.Node]:
tagline = self._try_get_option('tagline')
module_name = self._try_get_option('name')
tagline = get_tagline(module_name)
# Prepend the module name on sub-pages so that it's very clear what
# the tagline is referring to.
tagline = f'{module_name}: {tagline}'
topbar = create_topnav(
tagline,

View File

@ -5,7 +5,6 @@ API reference
=============
.. pigweed-module-subpage::
:name: pw_emu
:tagline: pw_emu: Flexible emulators frontend
------------------------
pw_emu.frontend.Emulator

View File

@ -5,7 +5,6 @@ CLI reference
=============
.. pigweed-module-subpage::
:name: pw_emu
:tagline: pw_emu: Flexible emulators frontend
.. argparse::
:module: pw_emu.__main__

View File

@ -5,7 +5,6 @@ Configuration
=============
.. pigweed-module-subpage::
:name: pw_emu
:tagline: pw_emu: Flexible emulators frontend
``pw_emu`` configuration is done in the ``pw.pw_emu`` namespace of
:ref:`pigweed.json <seed-0101>`.

View File

@ -5,7 +5,6 @@ Design
======
.. pigweed-module-subpage::
:name: pw_emu
:tagline: pw_emu: Flexible emulators frontend
-----------
Parallelism

View File

@ -7,9 +7,6 @@ pw_emu
======
.. pigweed-module::
:name: pw_emu
:tagline: Flexible emulators frontend
:status: experimental
:languages: Python, CLI
* **Declarative**. Define emulation targets in JSON. A target encapsulates the
emulated machine, tools, and host channels configuration.

View File

@ -5,7 +5,6 @@ Get started & guides
====================
.. pigweed-module-subpage::
:name: pw_emu
:tagline: pw_emu: Flexible emulators frontend
.. _module-pw_emu-get-started:

View File

@ -841,6 +841,7 @@ pyyaml==6.0.1 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
--hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
--hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \

View File

@ -835,6 +835,7 @@ pyyaml==6.0.1 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
--hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
--hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \

View File

@ -839,6 +839,7 @@ pyyaml==6.0.1 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
--hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
--hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \

View File

@ -21,6 +21,7 @@ breathe==4.35.0
kconfiglib==14.1.0
pytz==2023.3
sphinx-sitemap==2.5.1
jsonschema==4.21.1
# Renode requirements
psutil==5.9.4
robotframework==6.0.2

View File

@ -34,6 +34,13 @@ asttokens==2.4.0 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# stack-data
attrs==23.2.0 \
--hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \
--hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
babel==2.12.1 \
--hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \
--hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455
@ -514,6 +521,13 @@ importlib-metadata==6.8.0 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# sphinx
importlib-resources==6.1.3 \
--hash=sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d \
--hash=sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
ipython==8.12.2 \
--hash=sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea \
--hash=sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc
@ -541,6 +555,16 @@ json5==0.9.11 \
--hash=sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd \
--hash=sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
jsonschema==4.21.1 \
--hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \
--hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
jsonschema-specifications==2023.12.1 \
--hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \
--hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
kconfiglib==14.1.0 \
--hash=sha256:bed2cc2216f538eca4255a83a4588d8823563cdd50114f86cf1a2674e602c93c \
--hash=sha256:edcd35a20e7e138a9a9e96149027f805f785e818d2eae400b6fa8b0c8845114a
@ -707,8 +731,15 @@ pip-tools==7.3.0 \
--hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \
--hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
pkgutil-resolve-name==1.3.10 \
--hash=sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 \
--hash=sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
platformdirs==3.0.0 \
--hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
@ -887,6 +918,13 @@ pyyaml==6.0.1 \
--hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
--hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
referencing==0.33.0 \
--hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \
--hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
requests==2.31.0 \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
@ -899,6 +937,110 @@ robotframework==6.0.2 \
--hash=sha256:634cd6f9fdc21142eadd9aacdddbfe7d3e2a757532b71d866dbb404cd0e66dac \
--hash=sha256:6a9c06deb220099990f190c6e4e772675f625e4d5d84640fca6f0ad46ff538d0
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
rpds-py==0.18.0 \
--hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \
--hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \
--hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \
--hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \
--hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \
--hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \
--hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \
--hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \
--hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \
--hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \
--hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \
--hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \
--hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \
--hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \
--hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \
--hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \
--hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \
--hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \
--hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \
--hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \
--hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \
--hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \
--hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \
--hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \
--hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \
--hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \
--hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \
--hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \
--hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \
--hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \
--hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \
--hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \
--hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \
--hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \
--hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \
--hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \
--hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \
--hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \
--hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \
--hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \
--hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \
--hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \
--hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \
--hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \
--hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \
--hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \
--hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \
--hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \
--hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \
--hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \
--hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \
--hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \
--hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \
--hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \
--hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \
--hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \
--hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \
--hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \
--hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \
--hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \
--hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \
--hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \
--hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \
--hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \
--hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \
--hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \
--hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \
--hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \
--hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \
--hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \
--hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \
--hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \
--hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \
--hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \
--hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \
--hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \
--hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \
--hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \
--hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \
--hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \
--hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \
--hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \
--hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \
--hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \
--hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \
--hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \
--hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \
--hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \
--hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \
--hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \
--hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \
--hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \
--hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \
--hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \
--hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \
--hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \
--hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \
--hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \
--hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
rsa==4.8 \
--hash=sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17 \
--hash=sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb
@ -1214,6 +1356,7 @@ zipp==3.16.2 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# importlib-metadata
# importlib-resources
# The following packages are considered to be unsafe in a requirements file:
pip==23.2.1 \
--hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \

View File

@ -28,6 +28,13 @@ asttokens==2.4.0 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# stack-data
attrs==23.2.0 \
--hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \
--hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
babel==2.12.1 \
--hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \
--hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455
@ -508,6 +515,13 @@ importlib-metadata==6.8.0 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# sphinx
importlib-resources==6.1.3 \
--hash=sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d \
--hash=sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
ipython==8.12.2 \
--hash=sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea \
--hash=sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc
@ -535,6 +549,16 @@ json5==0.9.11 \
--hash=sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd \
--hash=sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
jsonschema==4.21.1 \
--hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \
--hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
jsonschema-specifications==2023.12.1 \
--hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \
--hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
kconfiglib==14.1.0 \
--hash=sha256:bed2cc2216f538eca4255a83a4588d8823563cdd50114f86cf1a2674e602c93c \
--hash=sha256:edcd35a20e7e138a9a9e96149027f805f785e818d2eae400b6fa8b0c8845114a
@ -701,6 +725,12 @@ pip-tools==7.3.0 \
--hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \
--hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
pkgutil-resolve-name==1.3.10 \
--hash=sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 \
--hash=sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
platformdirs==3.0.0 \
--hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \
--hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567
@ -859,6 +889,7 @@ pyyaml==6.0.1 \
--hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \
--hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \
--hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \
--hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \
--hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \
@ -881,6 +912,13 @@ pyyaml==6.0.1 \
--hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
--hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
referencing==0.33.0 \
--hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \
--hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
requests==2.31.0 \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
@ -893,6 +931,110 @@ robotframework==6.0.2 \
--hash=sha256:634cd6f9fdc21142eadd9aacdddbfe7d3e2a757532b71d866dbb404cd0e66dac \
--hash=sha256:6a9c06deb220099990f190c6e4e772675f625e4d5d84640fca6f0ad46ff538d0
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
rpds-py==0.18.0 \
--hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \
--hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \
--hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \
--hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \
--hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \
--hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \
--hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \
--hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \
--hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \
--hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \
--hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \
--hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \
--hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \
--hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \
--hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \
--hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \
--hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \
--hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \
--hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \
--hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \
--hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \
--hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \
--hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \
--hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \
--hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \
--hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \
--hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \
--hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \
--hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \
--hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \
--hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \
--hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \
--hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \
--hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \
--hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \
--hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \
--hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \
--hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \
--hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \
--hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \
--hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \
--hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \
--hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \
--hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \
--hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \
--hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \
--hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \
--hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \
--hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \
--hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \
--hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \
--hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \
--hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \
--hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \
--hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \
--hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \
--hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \
--hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \
--hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \
--hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \
--hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \
--hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \
--hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \
--hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \
--hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \
--hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \
--hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \
--hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \
--hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \
--hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \
--hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \
--hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \
--hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \
--hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \
--hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \
--hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \
--hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \
--hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \
--hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \
--hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \
--hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \
--hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \
--hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \
--hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \
--hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \
--hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \
--hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \
--hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \
--hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \
--hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \
--hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \
--hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \
--hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \
--hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \
--hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \
--hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \
--hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \
--hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \
--hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
rsa==4.8 \
--hash=sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17 \
--hash=sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb
@ -1208,6 +1350,7 @@ zipp==3.16.2 \
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# importlib-metadata
# importlib-resources
# The following packages are considered to be unsafe in a requirements file:
pip==23.2.1 \
--hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \

View File

@ -28,6 +28,13 @@ asttokens==2.4.0 \
# via
# -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
# stack-data
attrs==23.2.0 \
--hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \
--hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
babel==2.12.1 \
--hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \
--hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455
@ -518,6 +525,13 @@ importlib-metadata==6.8.0 \
# via
# -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
# sphinx
importlib-resources==6.1.3 \
--hash=sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d \
--hash=sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
ipython==8.12.2 \
--hash=sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea \
--hash=sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc
@ -545,6 +559,16 @@ json5==0.9.11 \
--hash=sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd \
--hash=sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b
# via -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
jsonschema==4.21.1 \
--hash=sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f \
--hash=sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5
# via -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
jsonschema-specifications==2023.12.1 \
--hash=sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc \
--hash=sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
kconfiglib==14.1.0 \
--hash=sha256:bed2cc2216f538eca4255a83a4588d8823563cdd50114f86cf1a2674e602c93c \
--hash=sha256:edcd35a20e7e138a9a9e96149027f805f785e818d2eae400b6fa8b0c8845114a
@ -705,8 +729,15 @@ pip-tools==7.3.0 \
--hash=sha256:8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e \
--hash=sha256:8e9c99127fe024c025b46a0b2d15c7bd47f18f33226cf7330d35493663fc1d1d
# via -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
pkgutil-resolve-name==1.3.10 \
--hash=sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174 \
--hash=sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
platformdirs==3.0.0 \
--hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \
--hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \
--hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567
# via
# -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
@ -885,6 +916,13 @@ pyyaml==6.0.1 \
--hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
--hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
# via -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
referencing==0.33.0 \
--hash=sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5 \
--hash=sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# jsonschema-specifications
requests==2.31.0 \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
@ -897,6 +935,110 @@ robotframework==6.0.2 \
--hash=sha256:634cd6f9fdc21142eadd9aacdddbfe7d3e2a757532b71d866dbb404cd0e66dac \
--hash=sha256:6a9c06deb220099990f190c6e4e772675f625e4d5d84640fca6f0ad46ff538d0
# via -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
rpds-py==0.18.0 \
--hash=sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f \
--hash=sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c \
--hash=sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76 \
--hash=sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e \
--hash=sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157 \
--hash=sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f \
--hash=sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5 \
--hash=sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05 \
--hash=sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24 \
--hash=sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1 \
--hash=sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8 \
--hash=sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b \
--hash=sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb \
--hash=sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07 \
--hash=sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1 \
--hash=sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6 \
--hash=sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e \
--hash=sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e \
--hash=sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1 \
--hash=sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab \
--hash=sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4 \
--hash=sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17 \
--hash=sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594 \
--hash=sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d \
--hash=sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d \
--hash=sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3 \
--hash=sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c \
--hash=sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66 \
--hash=sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f \
--hash=sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80 \
--hash=sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33 \
--hash=sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f \
--hash=sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c \
--hash=sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022 \
--hash=sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e \
--hash=sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f \
--hash=sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da \
--hash=sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1 \
--hash=sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688 \
--hash=sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795 \
--hash=sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c \
--hash=sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98 \
--hash=sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1 \
--hash=sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20 \
--hash=sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307 \
--hash=sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4 \
--hash=sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18 \
--hash=sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294 \
--hash=sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66 \
--hash=sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467 \
--hash=sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948 \
--hash=sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e \
--hash=sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1 \
--hash=sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0 \
--hash=sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7 \
--hash=sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd \
--hash=sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641 \
--hash=sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d \
--hash=sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9 \
--hash=sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1 \
--hash=sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da \
--hash=sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3 \
--hash=sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa \
--hash=sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7 \
--hash=sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40 \
--hash=sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496 \
--hash=sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124 \
--hash=sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836 \
--hash=sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434 \
--hash=sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984 \
--hash=sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f \
--hash=sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6 \
--hash=sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e \
--hash=sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461 \
--hash=sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c \
--hash=sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432 \
--hash=sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73 \
--hash=sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58 \
--hash=sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88 \
--hash=sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337 \
--hash=sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7 \
--hash=sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863 \
--hash=sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475 \
--hash=sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3 \
--hash=sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51 \
--hash=sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf \
--hash=sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024 \
--hash=sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40 \
--hash=sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9 \
--hash=sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec \
--hash=sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb \
--hash=sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7 \
--hash=sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861 \
--hash=sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880 \
--hash=sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f \
--hash=sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd \
--hash=sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca \
--hash=sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58 \
--hash=sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e
# via
# -r /python/gen/pw_env_setup/pigweed_build_venv/compiled_requirements.txt
# jsonschema
# referencing
rsa==4.8 \
--hash=sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17 \
--hash=sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb
@ -1212,6 +1354,7 @@ zipp==3.16.2 \
# via
# -r \python\gen\pw_env_setup\pigweed_build_venv\compiled_requirements.txt
# importlib-metadata
# importlib-resources
# The following packages are considered to be unsafe in a requirements file:
pip==23.2.1 \
--hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \

View File

@ -7,8 +7,6 @@ pw_env_setup_zephyr
===================
.. pigweed-module::
:name: pw_env_setup_zephyr
:tagline: Zephyr utilities
:status: experimental
* **Integrate your Pigweed environment with Zephyr**

View File

@ -5,9 +5,6 @@ pw_format
=========
.. pigweed-module::
:name: pw_format
:tagline: String formatting
:status: experimental
:languages: Rust
``pw_format`` supports parsing ``printf`` and Rust ``core::fmt`` style format
strings and using them to format output in languages other than C/C++.

View File

@ -5,9 +5,6 @@ pw_function
===========
.. pigweed-module::
:name: pw_function
:tagline: Embedded-friendly std::function
:status: stable
:languages: C++17
* **Familiar**. ``pw_function`` provides a standard, general-purpose API for
wrapping callable objects that's similar to `std::function`_.

View File

@ -5,7 +5,6 @@ pw_fuzzer: Concepts
===================
.. pigweed-module-subpage::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
Fuzzing is an approach to testing software with generated data. Guided fuzzing
uses feedback from the code being tested, such as code coverage, to direct the

View File

@ -5,9 +5,6 @@ pw_fuzzer
=========
.. pigweed-module::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
:status: unstable
:languages: C++17, C++20
Use state of the art tools to automatically find bugs in your C++ code with 5
lines of code or less!

View File

@ -5,7 +5,6 @@ pw_fuzzer: Adding Fuzzers Using FuzzTest
========================================
.. pigweed-module-subpage::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
.. note::

View File

@ -9,7 +9,6 @@ pw_fuzzer: Guides
=================
.. pigweed-module-subpage::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
``pw_fuzzer`` contains detailed guides on the following topics:

View File

@ -5,7 +5,6 @@ pw_fuzzer: Adding Fuzzers Using LibFuzzer
=========================================
.. pigweed-module-subpage::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
.. note::

View File

@ -5,7 +5,6 @@ pw_fuzzer: Using OSS-Fuzz
=============================================
.. pigweed-module-subpage::
:name: pw_fuzzer
:tagline: Better C++ code through easier fuzzing
.. TODO: b/281139237 - Update with better instructions for downstream projects.

View File

@ -5,9 +5,6 @@ pw_grpc
=======
.. pigweed-module::
:name: pw_grpc
:tagline: pw_rpc over gRPC
:status: unstable
:languages: C++17, C++20
``pw_grpc`` is an implementation of the gRPC over HTTP2 protocol that utilizes
``pw_rpc`` for code generation and service hosting. It provides classes that map

View File

@ -5,7 +5,6 @@ API reference
=============
.. pigweed-module-subpage::
:name: pw_hdlc
:tagline: pw_hdlc: Simple, robust, and efficient serial communication
The ``pw_hdlc`` API has 3 conceptual parts:

View File

@ -5,7 +5,6 @@ Design & roadmap
================
.. pigweed-module-subpage::
:name: pw_hdlc
:tagline: pw_hdlc: Simple, robust, and efficient serial communication
.. pw_hdlc-overview-start

View File

@ -7,10 +7,6 @@ pw_hdlc
=======
.. pigweed-module::
:name: pw_hdlc
:tagline: Simple, robust, and efficient serial communication
:status: stable
:languages: C++17, Python, TypeScript
:code-size-impact: 1400 to 2600 bytes
- **Simple**: Transmit RPCs and other data between devices over serial
- **Robust**: Detect corruption and data loss

View File

@ -5,7 +5,6 @@ Get started & guides
====================
.. pigweed-module-subpage::
:name: pw_hdlc
:tagline: pw_hdlc: Simple, robust, and efficient serial communication
.. include:: design.rst
:start-after: .. pw_hdlc-overview-start

View File

@ -5,7 +5,6 @@ RPC over HDLC example
=====================
.. pigweed-module-subpage::
:name: pw_hdlc
:tagline: pw_hdlc: Simple, robust, and efficient serial communication
The :ref:`module-pw_hdlc` module includes an example of bringing up a
:ref:`module-pw_rpc` server that can be used to invoke RPCs. The example code

View File

@ -7,7 +7,6 @@ Code size analysis
==================
.. pigweed-module-subpage::
:name: pw_hdlc
:tagline: pw_hdlc: Simple, robust, and efficient serial communication
``pw_hdlc`` currently optimizes for robustness and flexibility instead of
binary size or performance.

View File

@ -5,9 +5,6 @@ pw_json
=======
.. pigweed-module::
:name: pw_json
:tagline: Simple, efficient C++ JSON serialization
:status: stable
:languages: C++
Use :cpp:class:`pw::JsonBuilder` to serialize JSON to a buffer. It's simple,
safe, and efficient.

View File

@ -5,10 +5,6 @@ pw_kvs
======
.. pigweed-module::
:name: pw_kvs
:tagline: Lightweight, persistent key-value store
:status: stable
:languages: C++17
:code-size-impact: ~12 kB
.. tab-set::

View File

@ -5,9 +5,6 @@ pw_multibuf
===========
.. pigweed-module::
:name: pw_multibuf
:tagline: A buffer API optimized for zero-copy messaging
:status: unstable
:languages: C++17
Sending or receiving messages via RPC, transfer, or sockets often requires a
series of intermediate buffers, each requiring their own copy of the data.

View File

@ -6,9 +6,6 @@ pw_perf_test
.. pigweed-module::
:name: pw_perf_test
:tagline: Micro-benchmarks that are easy to write and run
:status: unstable
:languages: C++17
- **Simple**: Automatically manages boilerplate like iterations and durations.
- **Easy**: Uses an intuitive API that resembles GoogleTest.

View File

@ -5,9 +5,6 @@ pw_result
=========
.. pigweed-module::
:name: pw_result
:tagline: Error propagation primitives: value-or-error
:status: stable
:languages: C++17
- **Easy**: Minimal boilerplate via with ``PW_TRY_ASSIGN`` macro and chaining
- **Reliable**: Propagate errors consistently for less bugs

View File

@ -5,7 +5,6 @@ pw_software_update: CLI reference
---------------------------------
.. pigweed-module-subpage::
:name: pw_software_update
:tagline: Secure software delivery
Overview
---------

View File

@ -5,7 +5,6 @@ pw_software_update: Design
--------------------------
.. pigweed-module-subpage::
:name: pw_software_update
:tagline: Secure software delivery
This page explains the security framing, bundle format and update workflows of
``pw_software_update``.

View File

@ -7,9 +7,6 @@ pw_software_update
==================
.. pigweed-module::
:name: pw_software_update
:tagline: Secure software delivery
:status: experimental
:languages: Python, C++17
The ``pw_software_update`` module offers the following building blocks for
setting up your own end-to-end software delivery system.

View File

@ -5,7 +5,6 @@ pw_software_update: Get started
-------------------------------
.. pigweed-module-subpage::
:name: pw_software_update
:tagline: Secure software delivery
Hello Bundles!
--------------

View File

@ -5,7 +5,6 @@ pw_software_update: Guide
-------------------------
.. pigweed-module-subpage::
:name: pw_software_update
:tagline: Secure software delivery
How you update software on an embedded system is specific to the project.
However, there are common patterns. This section provides suggestions for

View File

@ -5,9 +5,6 @@ pw_span
=======
.. pigweed-module::
:name: pw_span
:tagline: std::span for C++17
:status: stable
:languages: C++17,C++20
* **Standardized**: :cpp:class:`pw::span` matches C++20's `std::span
<https://en.cppreference.com/w/cpp/container/span>`_ as closely as possible.

View File

@ -5,9 +5,6 @@ pw_status
=========
.. pigweed-module::
:name: pw_status
:tagline: Exception-free error propagation for embedded
:status: stable
:languages: C++17, C, Python, Java, TypeScript, Rust
- **Easy**: Simple to understand, includes convenient macro ``PW_TRY``
- **Efficient**: No memory allocation, no exceptions

View File

@ -5,7 +5,6 @@ Get started & guides
====================
.. pigweed-module-subpage::
:name: pw_status
:tagline: pw_status: Exception-free error propagation for embedded
.. _module-pw_status-get-started:

View File

@ -5,7 +5,6 @@ Reference
=========
.. pigweed-module-subpage::
:name: pw_status
:tagline: pw_status: Exception-free error propagation for embedded
.. _module-pw_status-codes:

View File

@ -5,7 +5,6 @@ API Reference
=============
.. pigweed-module-subpage::
:name: pw_string
:tagline: pw_string: Efficient, easy, and safe string manipulation
--------
Overview

View File

@ -5,7 +5,6 @@ Code Size Analysis
==================
.. pigweed-module-subpage::
:name: pw_string
:tagline: pw_string: Efficient, easy, and safe string manipulation
Save code space by replacing ``snprintf``
=========================================

View File

@ -5,7 +5,6 @@ Design & Roadmap
================
.. pigweed-module-subpage::
:name: pw_string
:tagline: pw_string: Efficient, easy, and safe string manipulation
``pw_string`` provides string classes and utility functions designed to
prioritize safety and static allocation. The APIs are broadly similar to those

View File

@ -5,10 +5,6 @@ pw_string
=========
.. pigweed-module::
:name: pw_string
:tagline: Efficient, easy, and safe string manipulation
:status: stable
:languages: C++17
:code-size-impact: 500 to 1500 bytes
- **Efficient**: No memory allocation, no pointer indirection.
- **Easy**: Use the string API you already know.

View File

@ -5,7 +5,6 @@ Get Started & Guides
====================
.. pigweed-module-subpage::
:name: pw_string
:tagline: pw_string: Efficient, easy, and safe string manipulation
.. _module-pw_string-get-started:

View File

@ -7,7 +7,6 @@ pw_tokenizer API reference
==========================
.. pigweed-module-subpage::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
.. _module-pw_tokenizer-api-configuration:

View File

@ -7,7 +7,6 @@ Detokenization
==============
.. pigweed-module-subpage::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
Detokenization is the process of expanding a token to the string it represents
and decoding its arguments. ``pw_tokenizer`` provides Python, C++ and

View File

@ -5,10 +5,6 @@ pw_tokenizer
============
.. pigweed-module::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
:status: stable
:languages: C++, C11, Python, Rust, TypeScript, Java
:code-size-impact: 50% reduction in log size
Logging is critical, but developers are often forced to choose between
additional logging or saving crucial flash space. The ``pw_tokenizer`` module

View File

@ -5,7 +5,6 @@ Get started with pw_tokenizer
=============================
.. pigweed-module-subpage::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
.. _module-pw_tokenizer-get-started-overview:

View File

@ -5,7 +5,6 @@ Token databases
===============
.. pigweed-module-subpage::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
Token databases store a mapping of tokens to the strings they represent. An ELF
file can be used as a token database, but it only contains the strings for its

View File

@ -7,7 +7,6 @@ Tokenization
============
.. pigweed-module-subpage::
:name: pw_tokenizer
:tagline: Compress strings to shrink logs by +75%
Tokenization converts a string literal to a token. If it's a printf-style
string, its arguments are encoded along with it. The results of tokenization can

View File

@ -5,7 +5,6 @@ API reference
=============
.. pigweed-module-subpage::
:name: pw_toolchain_bazel
:tagline: A modular toolkit for declaring C/C++ toolchains in Bazel
.. py:class:: pw_cc_toolchain

View File

@ -3,12 +3,8 @@
==================
pw_toolchain_bazel
==================
.. pigweed-module::
:name: pw_toolchain_bazel
:tagline: A modular toolkit for declaring C/C++ toolchains in Bazel
:status: unstable
:languages: Starlark
- **Modular**: Construct your own toolchain using shared building blocks, and
share common flags between multiple platforms. You can even share toolchain

View File

@ -5,7 +5,6 @@ Get started with pw_toolchain_bazel
===================================
.. pigweed-module-subpage::
:name: pw_toolchain_bazel
:tagline: A modular toolkit for declaring C/C++ toolchains in Bazel
-----------
Quick start

View File

@ -5,9 +5,6 @@ pw_unit_test
============
.. pigweed-module::
:name: pw_unit_test
:tagline: GoogleTest for embedded
:status: stable
:languages: C++17
.. tab-set::

View File

@ -5,7 +5,6 @@ pw_watch CLI reference
=======================
.. pigweed-module-subpage::
:name: pw_watch
:tagline: Embedded development file system watcher
.. argparse::
:module: pw_watch.watch

View File

@ -7,8 +7,6 @@ pw_watch
========
.. pigweed-module::
:name: pw_watch
:tagline: Embedded development file system watcher
:status: stable
* **Automatically trigger build actions when source files change**

View File

@ -5,7 +5,6 @@ pw_watch how-to guide
=====================
.. pigweed-module-subpage::
:name: pw_watch
:tagline: Embedded development file system watcher
This guide shows you how to do common ``pw_watch`` tasks.