[roll third_party/pigweed] pw_span: Introduce pw::span

- pw::span is identical to Pigweed's polyfilled std::span, but in a
  different namespace. Implicit converions between std::span and
  pw::span are supported inherently.

  pw::span and std::span are maintained as separate classes, with shared
  code in a .inc file. This is done instead of aliasing since C++17 does
  not support class template argument decuction with aliases. Also, it
  is simpler to have separate implementations to avoid circular
  dependencies while migrating code to pw::span.
- Add DEFINES to the pw_add_test() CMake function to support defining
  preprocessor macros for the pw_span test.
- Move '.inc' and '.inl' extensions from CPP_HEADER_EXTS to
  CPP_SOURCE_EXTS, since these should be treated like sources not
  headers (no include guards).

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

https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: 92be6f4430fec67..1b338eb8c57d689
Roller-URL: https://ci.chromium.org/b/8811169025120020929
Cq-Cl-Tag: roller-builder:pigweed-experimental-roller
Cq-Cl-Tag: roller-bid:8811169025120020929
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: Ib060fb605080702a019d7b388a3948daa8740f25
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/98485
Bot-Commit: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
Commit-Queue: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
1 file changed
tree: 1fbd776dd536007228cb9d2c726bcd28cd4f0114
  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_pico/
  8. pw_board_led_stm32cube/
  9. pw_board_led_stm32f429i_disc1/
  10. pw_graphics/
  11. pw_spin_delay/
  12. pw_spin_delay_arduino/
  13. pw_spin_delay_host/
  14. pw_spin_delay_pico/
  15. pw_spin_delay_stm32cube/
  16. pw_spin_delay_stm32f429i_disc1/
  17. targets/
  18. third_party/
  19. tools/
  20. .gitattributes
  21. .gitignore
  22. .gitmodules
  23. .gn
  24. activate.bat
  25. banner.txt
  26. bootstrap.bat
  27. bootstrap.sh
  28. BUILD.gn
  29. BUILDCONFIG.gn
  30. env_setup.json
  31. navbar.md
  32. OWNERS
  33. PW_PLUGINS
  34. README.md
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.

pw_graphics

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

STM32F429-DISC1

Compile:

gn gen out --export-compile-commands --args="
  dir_pw_third_party_stm32cube_f4=\"$PROJECT_DIR/.environment/packages/stm32cube_f4\"
"
ninja -C out

Flash:

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

Compile:

gn gen out --export-compile-commands --args="
  dir_pw_third_party_imgui=\"$PROJECT_DIR/.environment/packages/imgui\"
"
ninja -C out

Run:

out/host_debug/obj/applications/terminal_display/bin/terminal_demo

Raspberry Pi Pico Connected to an ILI9341

Clone the pico-sdk repo:

cd $HOME
git clone https://github.com/raspberrypi/pico-sdk

Compile:

gn gen out --export-compile-commands --args="
  PICO_SRC_DIR=\"$HOME/pico-sdk\"
"
ninja -C out

Create a uf2 file for flashing the Pico with:

./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.