BUILD.gn 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. # Copyright (c) 2013 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//build/config/chromeos/ui_mode.gni")
  5. import("//build/config/features.gni")
  6. import("//testing/libfuzzer/fuzzer_test.gni")
  7. assert(!is_ios)
  8. if (is_android) {
  9. import("//build/config/android/rules.gni") # For generate_jni().
  10. }
  11. if (is_win) {
  12. config("usb_linker_flags") {
  13. ldflags = [
  14. "/DELAYLOAD:advapi32.dll",
  15. "/DELAYLOAD:cfgmgr32.dll",
  16. "/DELAYLOAD:ole32.dll",
  17. "/DELAYLOAD:setupapi.dll",
  18. "/DELAYLOAD:winusb.dll",
  19. ]
  20. }
  21. }
  22. static_library("usb") {
  23. # Only targets under //services/device folder can depend on it.
  24. visibility = [
  25. ":*",
  26. "//services/device:*",
  27. "//services/device/usb/mojo:*",
  28. ]
  29. sources = [
  30. "usb_descriptors.cc",
  31. "usb_descriptors.h",
  32. "usb_device.cc",
  33. "usb_device.h",
  34. "usb_device_handle.cc",
  35. "usb_device_handle.h",
  36. "usb_service.cc",
  37. "usb_service.h",
  38. "webusb_descriptors.cc",
  39. "webusb_descriptors.h",
  40. ]
  41. deps = [
  42. "//base/third_party/dynamic_annotations",
  43. "//build:chromeos_buildflags",
  44. "//components/device_event_log",
  45. "//device/base",
  46. "//services/device:utility",
  47. "//services/device/public/cpp/usb",
  48. "//services/device/public/mojom:usb",
  49. ]
  50. public_deps = [
  51. "//base",
  52. "//url",
  53. ]
  54. if (is_android) {
  55. sources += [
  56. "usb_configuration_android.cc",
  57. "usb_configuration_android.h",
  58. "usb_device_android.cc",
  59. "usb_device_android.h",
  60. "usb_device_handle_android.cc",
  61. "usb_device_handle_android.h",
  62. "usb_endpoint_android.cc",
  63. "usb_endpoint_android.h",
  64. "usb_interface_android.cc",
  65. "usb_interface_android.h",
  66. "usb_service_android.cc",
  67. "usb_service_android.h",
  68. ]
  69. deps += [ ":jni_headers" ]
  70. }
  71. if (is_win) {
  72. sources += [
  73. "scoped_winusb_handle.cc",
  74. "scoped_winusb_handle.h",
  75. "usb_device_handle_win.cc",
  76. "usb_device_handle_win.h",
  77. "usb_device_win.cc",
  78. "usb_device_win.h",
  79. "usb_service_win.cc",
  80. "usb_service_win.h",
  81. ]
  82. libs = [
  83. "advapi32.lib",
  84. "ole32.lib",
  85. "setupapi.lib",
  86. "winusb.lib",
  87. ]
  88. all_dependent_configs = [ ":usb_linker_flags" ]
  89. deps += [ "//third_party/re2" ]
  90. }
  91. if (is_mac) {
  92. sources += [
  93. "usb_device_handle_mac.cc",
  94. "usb_device_handle_mac.h",
  95. "usb_device_mac.cc",
  96. "usb_device_mac.h",
  97. "usb_service_mac.cc",
  98. "usb_service_mac.h",
  99. ]
  100. # These sources and deps are required for libusb.
  101. # TODO(https://crbug.com/1096743) Remove these sources.
  102. sources += [
  103. "scoped_libusb_device_handle.cc",
  104. "scoped_libusb_device_handle.h",
  105. "scoped_libusb_device_ref.cc",
  106. "scoped_libusb_device_ref.h",
  107. "usb_context.cc",
  108. "usb_context.h",
  109. "usb_device_handle_impl.cc",
  110. "usb_device_handle_impl.h",
  111. "usb_device_impl.cc",
  112. "usb_device_impl.h",
  113. "usb_error.cc",
  114. "usb_error.h",
  115. "usb_service_impl.cc",
  116. "usb_service_impl.h",
  117. ]
  118. deps += [ "//third_party/libusb" ]
  119. }
  120. if (is_linux || is_chromeos) {
  121. sources += [
  122. "usb_device_linux.cc",
  123. "usb_device_linux.h",
  124. ]
  125. }
  126. if (use_udev) {
  127. if (is_linux || is_chromeos) {
  128. sources += [
  129. "usb_service_linux.cc",
  130. "usb_service_linux.h",
  131. ]
  132. }
  133. deps += [ "//device/udev_linux" ]
  134. }
  135. if (is_android || is_chromeos || is_linux) {
  136. sources += [
  137. "usb_device_handle_usbfs.cc",
  138. "usb_device_handle_usbfs.h",
  139. ]
  140. }
  141. if (is_chromeos) {
  142. deps += [
  143. "//chromeos/dbus/permission_broker",
  144. "//dbus",
  145. ]
  146. }
  147. }
  148. static_library("test_support") {
  149. testonly = true
  150. sources = [
  151. "fake_usb_device_handle.cc",
  152. "fake_usb_device_handle.h",
  153. "mock_usb_device.cc",
  154. "mock_usb_device.h",
  155. "mock_usb_device_handle.cc",
  156. "mock_usb_device_handle.h",
  157. "mock_usb_service.cc",
  158. "mock_usb_service.h",
  159. ]
  160. deps = [
  161. ":usb",
  162. "//base",
  163. "//testing/gtest",
  164. ]
  165. public_deps = [ "//testing/gmock" ]
  166. }
  167. fuzzer_test("webusb_descriptors_fuzzer") {
  168. sources = [ "webusb_descriptors_fuzzer.cc" ]
  169. deps = [
  170. ":test_support",
  171. ":usb",
  172. "//base",
  173. "//base:i18n",
  174. ]
  175. seed_corpus = "fuzz_corpus"
  176. libfuzzer_options = [ "max_len=2048" ]
  177. }
  178. fuzzer_test("usb_descriptors_fuzzer") {
  179. sources = [ "usb_descriptors_fuzzer.cc" ]
  180. deps = [
  181. ":usb",
  182. "//mojo/public/cpp/bindings",
  183. "//services/device/public/mojom:usb",
  184. "//services/device/usb/mojo",
  185. ]
  186. seed_corpus = "fuzz_corpus"
  187. libfuzzer_options = [ "max_len=2048" ]
  188. }
  189. fuzzer_test("usb_string_read_fuzzer") {
  190. sources = [ "usb_string_read_fuzzer.cc" ]
  191. deps = [
  192. ":test_support",
  193. ":usb",
  194. "//base",
  195. ]
  196. seed_corpus = "fuzz_corpus"
  197. libfuzzer_options = [ "max_len=2048" ]
  198. }
  199. if (is_android) {
  200. java_sources_needing_jni = [
  201. "android/java/src/org/chromium/device/usb/ChromeUsbConfiguration.java",
  202. "android/java/src/org/chromium/device/usb/ChromeUsbConnection.java",
  203. "android/java/src/org/chromium/device/usb/ChromeUsbDevice.java",
  204. "android/java/src/org/chromium/device/usb/ChromeUsbEndpoint.java",
  205. "android/java/src/org/chromium/device/usb/ChromeUsbInterface.java",
  206. "android/java/src/org/chromium/device/usb/ChromeUsbService.java",
  207. ]
  208. generate_jni("jni_headers") {
  209. sources = java_sources_needing_jni
  210. }
  211. android_library("java") {
  212. sources = java_sources_needing_jni
  213. deps = [
  214. "//base:base_java",
  215. "//base:jni_java",
  216. "//build/android:build_java",
  217. "//third_party/androidx:androidx_annotation_annotation_java",
  218. ]
  219. annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
  220. }
  221. }