| # Copyright 2022 The Pigweed Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| import("//build_overrides/pigweed.gni") |
| |
| import("$dir_pw_build/error.gni") |
| import("$dir_pw_build/target_types.gni") |
| import("$dir_pw_docgen/docs.gni") |
| import("tinyusb.gni") |
| |
| # List of targets defined by this module. |
| _tinyusb_targets = [ |
| "device", |
| "device_audio", |
| "device_bth", |
| "device_cdc", |
| "device_dfu", |
| "device_hid", |
| "device_midi", |
| "device_msc", |
| "device_net", |
| "device_usbtmc", |
| "device_vendor", |
| "device_video", |
| "host", |
| "host_cdc", |
| "host_hid", |
| "host_msc", |
| "host_vendor", |
| ] |
| |
| # This file defines multiple GN source_set for using tinyusb and its different |
| # parts. See docs.rst for the configuration details. |
| if (pw_third_party_tinyusb_SOURCE == "") { |
| group("tinyusb") { |
| } |
| foreach(tinyusb_target, _tinyusb_targets) { |
| group("${tinyusb_target}") { |
| } |
| } |
| } else if (pw_third_party_tinyusb_PORT == "") { |
| pw_error("tinyusb") { |
| message_lines = [ |
| "tinyusb is being used by $current_toolchain, but pw_third_party_tinyusb_PORT is not set.", |
| "If this toolchain is intentionally using tinyusb, ensure your toolchain configuration for this target sets pw_third_party_tinyusb_PORT.", |
| ] |
| } |
| foreach(tinyusb_target, _tinyusb_targets) { |
| group("${tinyusb_target}") { |
| deps = [ ":tinyusb" ] |
| } |
| } |
| } else if (pw_third_party_tinyusb_CONFIG == "") { |
| pw_error("tinyusb") { |
| message_lines = [ |
| "tinyusb is being used by $current_toolchain, but pw_third_party_tinyusb_CONFIG is not set.", |
| "If this toolchain is intentionally using tinyusb, ensure your toolchain configuration for this target sets pw_third_party_tinyusb_CONFIG.", |
| ] |
| } |
| foreach(tinyusb_target, _tinyusb_targets) { |
| group("${tinyusb_target}") { |
| deps = [ ":tinyusb" ] |
| } |
| } |
| } else { |
| not_needed([ "_tinyusb_targets" ]) |
| |
| config("public_includes") { |
| include_dirs = [ "$pw_third_party_tinyusb_SOURCE/src" ] |
| visibility = [ ":*" ] |
| } |
| |
| pw_source_set("tinyusb") { |
| public_configs = [ ":public_includes" ] |
| |
| # tinyusb depends on headers provided by the other modules in this file |
| # conditional to the features enabled by the config, so ignore those include |
| # checks. |
| check_includes = false |
| allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] |
| public_deps = [ |
| pw_third_party_tinyusb_CONFIG, |
| pw_third_party_tinyusb_PORT, |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_common.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_compiler.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_error.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_fifo.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_timeout.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_types.h", |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_verify.h", |
| "$pw_third_party_tinyusb_SOURCE/src/tusb.h", |
| "$pw_third_party_tinyusb_SOURCE/src/tusb_option.h", |
| ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/common/tusb_fifo.c", |
| "$pw_third_party_tinyusb_SOURCE/src/tusb.c", |
| ] |
| } |
| |
| ############################################################################## |
| # Device side. |
| pw_source_set("device") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ |
| ":tinyusb", |
| pw_third_party_tinyusb_PORT, |
| ] |
| |
| # Ports may need to include the device headers. |
| allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/device/usbd.c", |
| "$pw_third_party_tinyusb_SOURCE/src/device/usbd_control.c", |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/device/dcd.h", |
| "$pw_third_party_tinyusb_SOURCE/src/device/usbd.h", |
| "$pw_third_party_tinyusb_SOURCE/src/device/usbd_pvt.h", |
| ] |
| } |
| |
| pw_source_set("device_audio") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio_device.h", |
| ] |
| } |
| |
| pw_source_set("device_bth") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/bth/bth_device.c" ] |
| public = [ "$pw_third_party_tinyusb_SOURCE/src/class/bth/bth_device.h" ] |
| } |
| |
| pw_source_set("device_cdc") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_device.h", |
| ] |
| } |
| |
| pw_source_set("device_dfu") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_device.c", |
| "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_rt_device.c", |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_device.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_rt_device.h", |
| ] |
| } |
| |
| pw_source_set("device_hid") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_device.h", |
| ] |
| } |
| |
| pw_source_set("device_midi") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi_device.h", |
| ] |
| } |
| |
| pw_source_set("device_msc") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_device.h", |
| ] |
| } |
| |
| pw_source_set("device_net") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/net/ecm_rndis_device.c", |
| "$pw_third_party_tinyusb_SOURCE/src/class/net/ncm_device.c", |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/net/ncm.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/net/net_device.h", |
| ] |
| } |
| |
| pw_source_set("device_usbtmc") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc_device.h", |
| ] |
| } |
| |
| pw_source_set("device_vendor") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":device" ] |
| sources = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_device.c" ] |
| public = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_device.h" ] |
| } |
| |
| pw_source_set("device_video") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":common" ] |
| sources = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/video/video_device.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/video/video.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/video/video_device.h", |
| ] |
| } |
| |
| ############################################################################## |
| # Host side. |
| pw_source_set("host") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ |
| ":tinyusb", |
| pw_third_party_tinyusb_PORT, |
| ] |
| |
| # Ports may need to include the host headers. |
| allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/host/hub.c", |
| "$pw_third_party_tinyusb_SOURCE/src/host/usbh.c", |
| "$pw_third_party_tinyusb_SOURCE/src/host/usbh_control.c", |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/host/hcd.h", |
| "$pw_third_party_tinyusb_SOURCE/src/host/hcd_attr.h", |
| "$pw_third_party_tinyusb_SOURCE/src/host/hub.h", |
| "$pw_third_party_tinyusb_SOURCE/src/host/usbh.h", |
| "$pw_third_party_tinyusb_SOURCE/src/host/usbh_classdriver.h", |
| ] |
| } |
| |
| pw_source_set("host_cdc") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":host" ] |
| sources = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_host.c", |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis_host.c", |
| ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_host.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis_host.h", |
| ] |
| } |
| |
| pw_source_set("host_hid") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":host" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_host.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_host.h", |
| ] |
| } |
| |
| pw_source_set("host_msc") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":host" ] |
| sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_host.c" ] |
| public = [ |
| "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc.h", |
| "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_host.h", |
| ] |
| } |
| |
| pw_source_set("host_vendor") { |
| public_configs = [ ":public_includes" ] |
| public_deps = [ ":host" ] |
| sources = |
| [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_host.c" ] |
| public = [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_host.h" ] |
| } |
| } |
| |
| pw_doc_group("docs") { |
| sources = [ "docs.rst" ] |
| } |