TinyUSB#
The $pw_external_tinyusb/ module contains the build files needed to
integrate TinyUSB into a Pigweed build.
Build Support#
This module provides support to compile TinyUSB with GN and Bazel, however it doesn’t include the source code of the tinyusb project.
GN#
In order to use this you are expected to configure the following variables from
$pw_external_tinyusb:tinyusb.gni:
Set the GN
pw_third_party_tinyusb_SOURCEto the path of the TinyUSB source code directory. This is the directory that contains thesrc/sub-directory.Set
pw_third_party_tinyusb_CONFIGto apw_source_setwhich provides the TinyUSBtusb_config.hconfig header. While it is possible to provide public definitions in thispw_source_setthe configuration header file is still required by TinyUSB.Set
pw_third_party_tinyusb_PORTto apw_source_setwhich provides the TinyUSB port sources for the specific MCU. Several MCUs are supported by the upstream TinyUSB project, check thesrc/portable/path for your MCU.
After this is done multiple pw_source_set entries for the different parts of
TinyUSB library are created at $pw_external_tinyusb.
Bazel#
The TinyUSB build is configured through constraint_settings. The platform you are building for must specify values for the following settings:
@tinyusb//:port, to set which TinyUSB port to use. You can select a value from those defined inthird_party/tinyusb/tinyusb.BUILD.bazel(for example,@tinyusb//:port_synopsys_stm32).@tinyusb//:tinyusb_configlabel flag to point to the library target providing the TinyUSB config header.@tinyusb//:tinyusb_descriptorslabel flag to point to the library target providing the TinyUSB descriptors.
See Facades and backends tutorial for a discussion of how to work with our label flags.
Adding TinyUSB dependency#
TinyUSB library is split into a device side and host side, with a few common sources between the two. It is possible to depend on both at compile time, but initialize only one side. Device and host both provide classes on top such as Communications Device Class (CDC) or Mass Storage Class (MSC) which can be selectively included in the build by depending on the respective GN/Bazel targets.