# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

assert(!is_ios)

if (is_android) {
  import("//build/config/android/rules.gni")  # For generate_jni().
}

source_ids = "//third_party/usb_ids/usb.ids"
generated_ids = "$target_gen_dir/usb_ids_gen.cc"

static_library("usb") {
  sources = [
    "usb_configuration_android.cc",
    "usb_configuration_android.h",
    "usb_descriptors.cc",
    "usb_descriptors.h",
    "usb_device.cc",
    "usb_device.h",
    "usb_device_android.cc",
    "usb_device_android.h",
    "usb_device_handle.cc",
    "usb_device_handle.h",
    "usb_device_handle_android.cc",
    "usb_device_handle_android.h",
    "usb_device_handle_win.cc",
    "usb_device_handle_win.h",
    "usb_device_linux.cc",
    "usb_device_linux.h",
    "usb_device_win.cc",
    "usb_device_win.h",
    "usb_endpoint_android.cc",
    "usb_endpoint_android.h",
    "usb_interface_android.cc",
    "usb_interface_android.h",
    "usb_service.cc",
    "usb_service.h",
    "usb_service_android.cc",
    "usb_service_android.h",
    "usb_service_win.cc",
    "usb_service_win.h",
    "webusb_descriptors.cc",
    "webusb_descriptors.h",
  ]

  deps = [
    "//base/third_party/dynamic_annotations",
    "//components/device_event_log",
    "//device/base",
    "//device/usb/public/mojom",
  ]

  public_deps = [
    "//base",
    "//url",
  ]

  if (use_udev) {
    sources += [
      "usb_service_linux.cc",
      "usb_service_linux.h",
    ]
    deps += [ "//device/udev_linux" ]
  }

  if (is_android) {
    deps += [ ":jni_headers" ]
  } else {
    deps += [ ":usb_device_ids" ]
    sources += [
      "usb_ids.cc",
      "usb_ids.h",
      generated_ids,
    ]
  }

  if (is_win || is_mac) {
    sources += [
      "scoped_libusb_device_handle.cc",
      "scoped_libusb_device_handle.h",
      "scoped_libusb_device_ref.cc",
      "scoped_libusb_device_ref.h",
      "usb_context.cc",
      "usb_context.h",
      "usb_device_handle_impl.cc",
      "usb_device_handle_impl.h",
      "usb_device_impl.cc",
      "usb_device_impl.h",
      "usb_error.cc",
      "usb_error.h",
      "usb_service_impl.cc",
      "usb_service_impl.h",
    ]

    deps += [ "//third_party/libusb" ]
  }

  if (is_win) {
    sources += [
      "scoped_winusb_handle.cc",
      "scoped_winusb_handle.h",
    ]

    libs = [
      "setupapi.lib",
      "winusb.lib",
    ]
  }

  if (is_android || is_chromeos || is_linux) {
    sources += [
      "usb_device_handle_usbfs.cc",
      "usb_device_handle_usbfs.h",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos/dbus",
      "//dbus",
    ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_usb_device_handle.cc",
    "fake_usb_device_handle.h",
    "mock_usb_device.cc",
    "mock_usb_device.h",
    "mock_usb_device_handle.cc",
    "mock_usb_device_handle.h",
    "mock_usb_service.cc",
    "mock_usb_service.h",
  ]

  deps = [
    ":usb",
    "//base",
    "//testing/gtest",
  ]

  public_deps = [
    "//testing/gmock",
  ]
}

action("usb_device_ids") {
  script = "//device/usb/tools/usb_ids.py"
  inputs = [
    source_ids,
  ]
  outputs = [
    generated_ids,
  ]
  args = [
    "-i",
    rebase_path(source_ids, root_build_dir),
    "-o",
    rebase_path(generated_ids, root_build_dir),
  ]

  # Only the device_usb target can depend on us.
  visibility = [ ":usb" ]
}

fuzzer_test("webusb_descriptors_fuzzer") {
  sources = [
    "webusb_descriptors_fuzzer.cc",
  ]
  deps = [
    ":test_support",
    ":usb",
    "//base",
    "//base:i18n",
  ]
  seed_corpus = "fuzz_corpus"
  libfuzzer_options = [ "max_len=2048" ]
}

fuzzer_test("usb_descriptors_fuzzer") {
  sources = [
    "usb_descriptors_fuzzer.cc",
  ]
  deps = [
    ":usb",
    "//device/usb/mojo",
    "//device/usb/public/mojom",
    "//mojo/public/cpp/bindings",
  ]
  seed_corpus = "fuzz_corpus"
  libfuzzer_options = [ "max_len=2048" ]
}

fuzzer_test("usb_string_read_fuzzer") {
  sources = [
    "usb_string_read_fuzzer.cc",
  ]
  deps = [
    ":test_support",
    ":usb",
    "//base",
  ]
  seed_corpus = "fuzz_corpus"
  libfuzzer_options = [ "max_len=2048" ]
}

if (is_android) {
  java_sources_needing_jni = [
    "android/java/src/org/chromium/device/usb/ChromeUsbConfiguration.java",
    "android/java/src/org/chromium/device/usb/ChromeUsbConnection.java",
    "android/java/src/org/chromium/device/usb/ChromeUsbDevice.java",
    "android/java/src/org/chromium/device/usb/ChromeUsbEndpoint.java",
    "android/java/src/org/chromium/device/usb/ChromeUsbInterface.java",
    "android/java/src/org/chromium/device/usb/ChromeUsbService.java",
  ]

  generate_jni("jni_headers") {
    sources = java_sources_needing_jni
    jni_package = "device"
  }

  android_library("java") {
    java_files = java_sources_needing_jni
    deps = [
      "//base:base_java",
    ]
  }
}
