# Copyright 2014 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.

# libusb is only used by //device/usb on Windows and macOS.
assert(is_win || is_mac)

import("//build/config/features.gni")

config("libusb_config") {
  include_dirs = [ "src/libusb" ]
}

config("libusb_warnings") {
  visibility = [ ":*" ]
  if (is_clang) {
    # guid_eq in windows_usb.c is unused.
    cflags = [ "-Wno-unused-function" ]
    if (is_linux && !use_udev) {
      cflags += [ "-Wno-pointer-sign" ]
    }
  }
}

static_library("libusb") {
  visibility = [
    "//device:device_unittests",
    "//device/usb",
  ]
  sources = [
    "src/config.h",
    "src/libusb/core.c",
    "src/libusb/descriptor.c",
    "src/libusb/hotplug.c",
    "src/libusb/hotplug.h",
    "src/libusb/interrupt.c",
    "src/libusb/interrupt.h",
    "src/libusb/io.c",
    "src/libusb/libusb.h",
    "src/libusb/libusbi.h",
    "src/libusb/os/darwin_usb.c",
    "src/libusb/os/darwin_usb.h",
    "src/libusb/os/poll_posix.c",
    "src/libusb/os/poll_posix.h",
    "src/libusb/os/poll_windows.c",
    "src/libusb/os/poll_windows.h",
    "src/libusb/os/threads_posix.c",
    "src/libusb/os/threads_posix.h",
    "src/libusb/os/threads_windows.c",
    "src/libusb/os/threads_windows.h",
    "src/libusb/os/windows_common.h",
    "src/libusb/os/windows_usb.c",
    "src/libusb/os/windows_usb.h",
    "src/libusb/strerror.c",
    "src/libusb/sync.c",
    "src/libusb/version.h",
    "src/libusb/version_nano.h",
    "src/msvc/config.h",
    "src/msvc/inttypes.h",
    "src/msvc/stdint.h",
  ]
  deps = []
  include_dirs = [ "src/libusb/os" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",

    # Must be after no_chromium_code for warning flags to be ordered correctly.
    ":libusb_warnings",
  ]

  public_configs = [ ":libusb_config" ]

  if (is_posix) {
    defines = [
      "DEFAULT_VISIBILITY=",
      "HAVE_GETTIMEOFDAY=1",
      "HAVE_POLL_H=1",
      "HAVE_SYS_TIME_H=1",
      "LIBUSB_DESCRIBE=\"1.0.16\"",
      "POLL_NFDS_TYPE=nfds_t",
      "THREADS_POSIX=1",
    ]
  }

  if (is_mac) {
    defines += [
      "OS_DARWIN=1",

      # Needed on OSX 10.12 to silence a deprecation warning.
      "OBJC_SILENCE_GC_DEPRECATIONS=1",
    ]
  } else {
    sources -= [
      "src/libusb/os/darwin_usb.c",
      "src/libusb/os/darwin_usb.h",
    ]
  }

  if (is_linux) {
    sources += [
      "src/libusb/os/linux_usbfs.c",
      "src/libusb/os/linux_usbfs.h",
    ]
    defines += [
      "OS_LINUX=1",
      "_GNU_SOURCE=1",
    ]
  }

  if (is_chromeos) {
    defines += [ "USBI_TIMERFD_AVAILABLE" ]
  }

  if (use_udev) {
    sources += [ "src/libusb/os/linux_udev.cc" ]
    defines += [
      "HAVE_LIBUDEV=1",
      "USE_UDEV=1",
    ]
    deps += [ "//build/linux/libudev" ]
  }

  if (is_linux && !use_udev) {
    sources += [ "src/libusb/os/linux_netlink.c" ]
    defines += [ "HAVE_LINUX_NETLINK_H" ]
  }

  if (is_win) {
    include_dirs += [ "src/msvc" ]
    sources -= [
      "src/libusb/os/poll_posix.c",
      "src/libusb/os/threads_posix.c",
    ]
    libs = [ "setupapi.lib" ]
  } else {
    include_dirs += [ "src" ]
    sources -= [
      "src/libusb/os/poll_windows.c",
      "src/libusb/os/poll_windows.h",
      "src/libusb/os/threads_windows.c",
      "src/libusb/os/threads_windows.h",
      "src/libusb/os/windows_common.h",
      "src/libusb/os/windows_usb.c",
      "src/libusb/os/windows_usb.h",
      "src/msvc/config.h",
      "src/msvc/inttypes.h",
      "src/msvc/stdint.h",
    ]
  }
}
