1# Copyright 2022 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15import("//build_overrides/pigweed.gni") 16 17import("$dir_pw_build/error.gni") 18import("$dir_pw_build/target_types.gni") 19import("$dir_pw_docgen/docs.gni") 20import("tinyusb.gni") 21 22# List of targets defined by this module. 23_tinyusb_targets = [ 24 "device", 25 "device_audio", 26 "device_bth", 27 "device_cdc", 28 "device_dfu", 29 "device_hid", 30 "device_midi", 31 "device_msc", 32 "device_net", 33 "device_usbtmc", 34 "device_vendor", 35 "device_video", 36 "host", 37 "host_cdc", 38 "host_hid", 39 "host_msc", 40 "host_vendor", 41] 42 43# This file defines multiple GN source_set for using tinyusb and its different 44# parts. See docs.rst for the configuration details. 45if (pw_third_party_tinyusb_SOURCE == "") { 46 group("tinyusb") { 47 } 48 foreach(tinyusb_target, _tinyusb_targets) { 49 group("${tinyusb_target}") { 50 } 51 } 52} else if (pw_third_party_tinyusb_PORT == "") { 53 pw_error("tinyusb") { 54 message_lines = [ 55 "tinyusb is being used by $current_toolchain, but pw_third_party_tinyusb_PORT is not set.", 56 "If this toolchain is intentionally using tinyusb, ensure your toolchain configuration for this target sets pw_third_party_tinyusb_PORT.", 57 ] 58 } 59 foreach(tinyusb_target, _tinyusb_targets) { 60 group("${tinyusb_target}") { 61 deps = [ ":tinyusb" ] 62 } 63 } 64} else if (pw_third_party_tinyusb_CONFIG == "") { 65 pw_error("tinyusb") { 66 message_lines = [ 67 "tinyusb is being used by $current_toolchain, but pw_third_party_tinyusb_CONFIG is not set.", 68 "If this toolchain is intentionally using tinyusb, ensure your toolchain configuration for this target sets pw_third_party_tinyusb_CONFIG.", 69 ] 70 } 71 foreach(tinyusb_target, _tinyusb_targets) { 72 group("${tinyusb_target}") { 73 deps = [ ":tinyusb" ] 74 } 75 } 76} else { 77 not_needed([ "_tinyusb_targets" ]) 78 79 config("public_includes") { 80 include_dirs = [ "$pw_third_party_tinyusb_SOURCE/src" ] 81 visibility = [ ":*" ] 82 } 83 84 pw_source_set("tinyusb") { 85 public_configs = [ ":public_includes" ] 86 87 # tinyusb depends on headers provided by the other modules in this file 88 # conditional to the features enabled by the config, so ignore those include 89 # checks. 90 check_includes = false 91 allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] 92 public_deps = [ 93 pw_third_party_tinyusb_CONFIG, 94 pw_third_party_tinyusb_PORT, 95 ] 96 public = [ 97 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_common.h", 98 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_compiler.h", 99 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_error.h", 100 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_fifo.h", 101 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_timeout.h", 102 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_types.h", 103 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_verify.h", 104 "$pw_third_party_tinyusb_SOURCE/src/tusb.h", 105 "$pw_third_party_tinyusb_SOURCE/src/tusb_option.h", 106 ] 107 sources = [ 108 "$pw_third_party_tinyusb_SOURCE/src/common/tusb_fifo.c", 109 "$pw_third_party_tinyusb_SOURCE/src/tusb.c", 110 ] 111 } 112 113 ############################################################################## 114 # Device side. 115 pw_source_set("device") { 116 public_configs = [ ":public_includes" ] 117 public_deps = [ 118 ":tinyusb", 119 pw_third_party_tinyusb_PORT, 120 ] 121 122 # Ports may need to include the device headers. 123 allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] 124 sources = [ 125 "$pw_third_party_tinyusb_SOURCE/src/device/usbd.c", 126 "$pw_third_party_tinyusb_SOURCE/src/device/usbd_control.c", 127 ] 128 public = [ 129 "$pw_third_party_tinyusb_SOURCE/src/device/dcd.h", 130 "$pw_third_party_tinyusb_SOURCE/src/device/usbd.h", 131 "$pw_third_party_tinyusb_SOURCE/src/device/usbd_pvt.h", 132 ] 133 } 134 135 pw_source_set("device_audio") { 136 public_configs = [ ":public_includes" ] 137 public_deps = [ ":device" ] 138 sources = 139 [ "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio_device.c" ] 140 public = [ 141 "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio.h", 142 "$pw_third_party_tinyusb_SOURCE/src/class/audio/audio_device.h", 143 ] 144 } 145 146 pw_source_set("device_bth") { 147 public_configs = [ ":public_includes" ] 148 public_deps = [ ":device" ] 149 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/bth/bth_device.c" ] 150 public = [ "$pw_third_party_tinyusb_SOURCE/src/class/bth/bth_device.h" ] 151 } 152 153 pw_source_set("device_cdc") { 154 public_configs = [ ":public_includes" ] 155 public_deps = [ ":device" ] 156 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_device.c" ] 157 public = [ 158 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc.h", 159 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_device.h", 160 ] 161 } 162 163 pw_source_set("device_dfu") { 164 public_configs = [ ":public_includes" ] 165 public_deps = [ ":device" ] 166 sources = [ 167 "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_device.c", 168 "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_rt_device.c", 169 ] 170 public = [ 171 "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu.h", 172 "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_device.h", 173 "$pw_third_party_tinyusb_SOURCE/src/class/dfu/dfu_rt_device.h", 174 ] 175 } 176 177 pw_source_set("device_hid") { 178 public_configs = [ ":public_includes" ] 179 public_deps = [ ":device" ] 180 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_device.c" ] 181 public = [ 182 "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid.h", 183 "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_device.h", 184 ] 185 } 186 187 pw_source_set("device_midi") { 188 public_configs = [ ":public_includes" ] 189 public_deps = [ ":device" ] 190 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi_device.c" ] 191 public = [ 192 "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi.h", 193 "$pw_third_party_tinyusb_SOURCE/src/class/midi/midi_device.h", 194 ] 195 } 196 197 pw_source_set("device_msc") { 198 public_configs = [ ":public_includes" ] 199 public_deps = [ ":device" ] 200 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_device.c" ] 201 public = [ 202 "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc.h", 203 "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_device.h", 204 ] 205 } 206 207 pw_source_set("device_net") { 208 public_configs = [ ":public_includes" ] 209 public_deps = [ ":device" ] 210 sources = [ 211 "$pw_third_party_tinyusb_SOURCE/src/class/net/ecm_rndis_device.c", 212 "$pw_third_party_tinyusb_SOURCE/src/class/net/ncm_device.c", 213 ] 214 public = [ 215 "$pw_third_party_tinyusb_SOURCE/src/class/net/ncm.h", 216 "$pw_third_party_tinyusb_SOURCE/src/class/net/net_device.h", 217 ] 218 } 219 220 pw_source_set("device_usbtmc") { 221 public_configs = [ ":public_includes" ] 222 public_deps = [ ":device" ] 223 sources = 224 [ "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc_device.c" ] 225 public = [ 226 "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc.h", 227 "$pw_third_party_tinyusb_SOURCE/src/class/usbtmc/usbtmc_device.h", 228 ] 229 } 230 231 pw_source_set("device_vendor") { 232 public_configs = [ ":public_includes" ] 233 public_deps = [ ":device" ] 234 sources = 235 [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_device.c" ] 236 public = 237 [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_device.h" ] 238 } 239 240 pw_source_set("device_video") { 241 public_configs = [ ":public_includes" ] 242 public_deps = [ ":common" ] 243 sources = 244 [ "$pw_third_party_tinyusb_SOURCE/src/class/video/video_device.c" ] 245 public = [ 246 "$pw_third_party_tinyusb_SOURCE/src/class/video/video.h", 247 "$pw_third_party_tinyusb_SOURCE/src/class/video/video_device.h", 248 ] 249 } 250 251 ############################################################################## 252 # Host side. 253 pw_source_set("host") { 254 public_configs = [ ":public_includes" ] 255 public_deps = [ 256 ":tinyusb", 257 pw_third_party_tinyusb_PORT, 258 ] 259 260 # Ports may need to include the host headers. 261 allow_circular_includes_from = [ pw_third_party_tinyusb_PORT ] 262 sources = [ 263 "$pw_third_party_tinyusb_SOURCE/src/host/hub.c", 264 "$pw_third_party_tinyusb_SOURCE/src/host/usbh.c", 265 "$pw_third_party_tinyusb_SOURCE/src/host/usbh_control.c", 266 ] 267 public = [ 268 "$pw_third_party_tinyusb_SOURCE/src/host/hcd.h", 269 "$pw_third_party_tinyusb_SOURCE/src/host/hcd_attr.h", 270 "$pw_third_party_tinyusb_SOURCE/src/host/hub.h", 271 "$pw_third_party_tinyusb_SOURCE/src/host/usbh.h", 272 "$pw_third_party_tinyusb_SOURCE/src/host/usbh_classdriver.h", 273 ] 274 } 275 276 pw_source_set("host_cdc") { 277 public_configs = [ ":public_includes" ] 278 public_deps = [ ":host" ] 279 sources = [ 280 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_host.c", 281 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis_host.c", 282 ] 283 public = [ 284 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc.h", 285 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_host.h", 286 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis.h", 287 "$pw_third_party_tinyusb_SOURCE/src/class/cdc/cdc_rndis_host.h", 288 ] 289 } 290 291 pw_source_set("host_hid") { 292 public_configs = [ ":public_includes" ] 293 public_deps = [ ":host" ] 294 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_host.c" ] 295 public = [ 296 "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid.h", 297 "$pw_third_party_tinyusb_SOURCE/src/class/hid/hid_host.h", 298 ] 299 } 300 301 pw_source_set("host_msc") { 302 public_configs = [ ":public_includes" ] 303 public_deps = [ ":host" ] 304 sources = [ "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_host.c" ] 305 public = [ 306 "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc.h", 307 "$pw_third_party_tinyusb_SOURCE/src/class/msc/msc_host.h", 308 ] 309 } 310 311 pw_source_set("host_vendor") { 312 public_configs = [ ":public_includes" ] 313 public_deps = [ ":host" ] 314 sources = 315 [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_host.c" ] 316 public = [ "$pw_third_party_tinyusb_SOURCE/src/class/vendor/vendor_host.h" ] 317 } 318} 319 320pw_doc_group("docs") { 321 sources = [ "docs.rst" ] 322} 323