xref: /aosp_15_r20/external/pigweed/third_party/tinyusb/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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