[roll third_party/pigweed] pw_containers: Make Pair in FlatMap support CTAD

Adding an explicit deduction guide for Pair does a few things:
* Some cases are not covered by implicit deduction guides, for the same
  reason as for std::pair. For more information, see
* CTAD can be sketchy in some cases, and so some projects might opt to
  enable something like -Wctad-maybe-unsupported. Adding an explicit
  deduction guide is a signal to the compiler that the type is "opting
  in" to CTAD.

Unfortunately, the aggregate initialization with no types does not work
in all circumstances (for example, it can be tricky to get all the
deductions to line up when using std::apply and a lambda), and the CTAD
option exists as a less verbose option than one where the template
parameters _also_ need to be stated explicitly. Note that the Google
style guide doesn't love CTAD in general:

(Note: CTAD = class template argument deduction)

Original-Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/120731

third_party/pigweed Rolled-Commits: f0ea55a197a61f4..878f2906ee814b4
Roller-URL: https://ci.chromium.org/b/8796752217438332369
GitWatcher: ignore
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I87e06a546c087498f898fce2d055198d2a66bcaf
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/120871
Commit-Queue: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
Bot-Commit: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
1 file changed
tree: a9a4472d5168ba523de7c74c2859790e9742cfc4
  1. applications/
  2. build_overrides/
  3. infra/
  4. pw_board_led/
  5. pw_board_led_arduino/
  6. pw_board_led_host/
  7. pw_board_led_mimxrt595_evk/
  8. pw_board_led_pico/
  9. pw_board_led_stm32cube/
  10. pw_board_led_stm32f429i_disc1/
  11. pw_digital_io_pico/
  12. pw_digital_io_stm32cube/
  13. pw_display_driver/
  14. pw_display_driver_ili9341/
  15. pw_graphics/
  16. pw_spi_pico/
  17. pw_spi_stm32f429i_disc1_stm32cube/
  18. pw_spin_delay/
  19. pw_spin_delay_arduino/
  20. pw_spin_delay_host/
  21. pw_spin_delay_mcuxpresso/
  22. pw_spin_delay_pico/
  23. pw_spin_delay_stm32cube/
  24. pw_spin_delay_stm32f429i_disc1/
  25. targets/
  26. third_party/
  27. tools/
  28. .gitattributes
  29. .gitignore
  30. .gitmodules
  31. .gn
  32. activate.bat
  33. banner.txt
  34. bootstrap.bat
  35. bootstrap.sh
  36. BUILD.gn
  38. env_setup.json
  39. navbar.md
  40. OWNERS
  42. README.md

Pigweed Experimental

This repository contains experimental pigweed modules.

Repository setup

Clone this repo with --recursive to get all required submodules.

git clone --recursive https://pigweed.googlesource.com/pigweed/experimental

This will pull the Pigweed source repository into third_party/pigweed. If you already cloned but forgot to --recursive run git submodule update --init to pull all submodules.


The //pw_graphics folder contains some libraries for drawing to an RGB565 framebuffer and displaying it on various platforms.

The demo applications that make use of these libraries are:

Build instructions

First time setup:

git clone --recursive https://pigweed.googlesource.com/pigweed/experimental
cd experimental
. ./bootstrap.sh
pw package install imgui
pw package install glfw
pw package install stm32cube_f4
pw package install pico_sdk



gn gen out --export-compile-commands --args="
ninja -C out


openocd -f third_party/pigweed/targets/stm32f429i_disc1/py/stm32f429i_disc1_utils/openocd_stm32f4xx.cfg -c "program out/stm32f429i_disc1_stm32cube_debug/obj/applications/terminal_display/bin/terminal_demo.elf verify reset exit"

Linux, Windows or Mac


gn gen out --export-compile-commands --args="
ninja -C out



Raspberry Pi Pico Connected to an external SPI display

Working displays:


gn gen out --export-compile-commands --args="
ninja -C out


  • Using a uf2 file:

    ./out/host_debug/obj/targets/rp2040/bin/elf2uf2 ./out/rp2040/obj/applications/terminal_display/bin/terminal_demo.elf ./out/rp2040/obj/applications/terminal_display/bin/terminal_demo.uf2

    Copy ./out/rp2040/obj/applications/terminal_display/bin/terminal_demo.uf2 to your Pi Pico.

  • Using a Pico Probe and openocd:

    This requires installing the Raspberry Pi foundation's OpenOCD fork for the Pico probe. More details including how to connect the two Pico boards is available at Raspberry Pi Pico and RP2040 - C/C++ Part 2: Debugging with VS Code

    Install RaspberryPi's OpenOCD Fork:

    git clone https://github.com/raspberrypi/openocd.git \
      --branch picoprobe \
      --depth=1 \
      --no-single-branch \
    cd openocd-picoprobe
    ./configure --enable-picoprobe --prefix=$HOME/apps/openocd --disable-werror
    make -j2
    make install

    Setup udev rules (Linux only):

    cat <<EOF > 49-picoprobe.rules
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE:="0666"
    KERNEL=="ttyACM*", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0004", MODE:="0666"
    sudo cp 49-picoprobe.rules /usr/lib/udev/rules.d/49-picoprobe.rules
    sudo udevadm control --reload-rules

    Flash the Pico:

    ~/apps/openocd/bin/openocd -f ~/apps/openocd/share/openocd/scripts/interface/picoprobe.cfg -f ~/apps/openocd/share/openocd/scripts/target/rp2040.cfg -c 'program out/rp2040/obj/applications/terminal_display/bin/terminal_demo.elf verify reset exit'

MIMXRT595-EVK Connected to an external MIPI display

Setup NXP SDK:

  1. Build a NXP SDK
  2. Download SDK
  3. Extract SDK's zip file to //environment/SDK_2_12_1_EVK-MIMXRT595


gn gen out --export-compile-commands --args="

ninja -C out

Flash the MIMXRT595-EVK:

Follow the instructions to flash the MIMXRT595-EVK with the SEGGER J-Link firmware and using arm-none-eabi-gdb at https://pigweed.dev/targets/mimxrt595_evk/target_docs.html#running-and-debugging.