commit | 383be0590402c63cfd3727e9f4f02efa379ce8d7 | [log] [tgz] |
---|---|---|
author | Anthony DiGirolamo <tonymd@google.com> | Thu Nov 26 12:06:41 2020 -0800 |
committer | CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Jan 22 16:28:36 2021 +0000 |
tree | fa39ccb53579b793b0115ff7f47e7b6b18c92e48 | |
parent | 438caa0ddb9b53c3529b7ae22ba21c016e88598e [diff] |
pw_package: Arduino core installers and teensy presubmit Summary of Changes ================== 1. Rename arduino build args to support cores in any location and have consistent naming. 2. Update docs to reflect above. 3. `pw package install teensy` working with nice status message on how to use ge pw_arduino_build_* args. 4. Added gn_teensy_build presubmit test step, not run by default. `pw presubmit --step gn_teensy_build` 5. Added missing system_rpc_server impl for //targets/arduino. This is just a copy of the stm32f429i one. Build arg Change Examples ========================= OLD: dir_pw_third_party_arduino = "//third_party/arduino" arduino_core_name = "teensy" arduino_package_name = "teensy/avr" arduino_board = "teensy41" arduino_menu_options = ["menu.usb.serial", "menu.opt.o2std"] NEW: pw_arduino_build_CORE_PATH = "/mnt/pigweed/pigweed/.environment/packages" pw_arduino_build_CORE_NAME = "teensy" pw_arduino_build_PACKAGE_NAME = "teensy/avr" pw_arduino_build_BOARD = "teensy41" pw_arduino_build_MENU_OPTIONS = ["menu.usb.serial", "menu.opt.o2std"] All BUILD.gn checks for enabled arduino builds changed too: OLD: if (dir_pw_third_party_arduino != "") {} NEW: if (pw_arduino_build_CORE_PATH != "") {} All gn target deps on arduino core sources changed. OLD: "$dir_pw_third_party_arduino:arduino_core_sources", NEW: "$dir_pw_third_party/arduino:arduino_core_sources", Teensy package post install & status message ============================================ $ pw package status teensy 20210114 11:58:18 INF teensy is installed. 20210114 11:58:18 INF teensy currently installed in: /mnt/pigweed/pigweed/.environment/packages/teensy 20210114 11:58:18 INF Enable by running "gn args out" and adding these lines: pw_arduino_build_CORE_PATH = "/mnt/pigweed/pigweed/.environment/packages" pw_arduino_build_CORE_NAME = "teensy" pw_arduino_build_PACKAGE_NAME = "teensy/avr" pw_arduino_build_BOARD = "BOARD_NAME" 20210114 11:58:18 INF Where BOARD_NAME is any supported board. 20210114 11:58:18 INF List available boards by running: arduino_builder --arduino-package-path /mnt/pigweed/pigweed/.environment/packages/teensy --arduino-package-name teensy/avr list-boards Requires: pigweed:29490 Change-Id: Ifd0bd214777392a29af3ab24711edf2f2c1086f3 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/26240 Commit-Queue: Anthony DiGirolamo <tonymd@google.com> Reviewed-by: Keir Mierle <keir@google.com> Reviewed-by: Rob Mohr <mohrr@google.com>
Pigweed is an open source collection of embedded-targeted libraries--or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.
Pigweed is in the early stages of development, and should be considered experimental. We’re continuing to evolve the platform and add new modules. We value developer feedback along the way.
Get the code: git clone https://pigweed.googlesource.com/pigweed/pigweed
If you'd like to get set up with Pigweed, please visit the getting started guide.
There are many modules in Pigweed, and this section only showcases a small selection that happen to produce visual output. For more information about the different Pigweed module offerings, refer to “Module Guides” section in the full documentation.
Note: For now the full documentation is not available online; you must build it. Building the docs is easy; see the getting started guide for how.
pw_watch
- Build, flash, run, & test on saveIn the web development space, file system watchers are prevalent. These watchers trigger a web server reload on source change, making development much faster. In the embedded space, file system watchers are less prevalent; however, they are no less useful! The Pigweed watcher module makes it easy to instantly compile, flash, and run tests upon save. Combined with the GN-based build which expresses the full dependency tree, only the exact tests affected by a file change are run on saves.
The demo below shows pw_watch
building for a STMicroelectronics STM32F429I-DISC1 development board, flashing the board with the affected test, and verifying the test runs as expected. Once this is set up, you can attach multiple devices to run tests in a distributed manner to reduce the time it takes to run tests.
pw_presubmit
- Vacuum code lint on every commitPresubmit checks are essential tools, but they take work to set up, and projects don’t always get around to it. The pw_presubmit
module provides tools for setting up high quality presubmit checks for any project. We use this framework to run Pigweed’s presubmit on our workstations and in our automated building tools.
The pw_presubmit
module includes pw format
command, a tool that provides a unified interface for automatically formatting code in a variety of languages. With pw format
, you can format C, C++, Python, GN, and Go code according to configurations defined by your project. pw format
leverages existing tools like clang-format
, and it’s simple to add support for new languages.
pw_env_setup
- Cross platform embedded compiler setupA classic problem in the embedded space is reducing the time from git clone to having a binary executing on a device. The issue is that an entire suite of tools is needed for non-trivial production embedded projects. For example:
In the server space, container solutions like Docker or Podman solve this; however, in our experience container solutions are a mixed bag for embedded systems development where one frequently needs access to native system resources like USB devices, or must operate on Windows.
pw_env_setup
is our compromise solution for this problem that works on Mac, Windows, and Linux. It leverages the Chrome packaging system CIPD to bootstrap a Python installation, which in turn inflates a virtual environment. The tooling is installed into your workspace, and makes no changes to your system. This tooling is designed to be reused by any project.