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

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

static_library("libusb") {
  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/linux_udev.c",
    "src/libusb/os/linux_usbfs.c",
    "src/libusb/os/linux_usbfs.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/sync.c",
    "src/libusb/version.h",
    "src/libusb/version_nano.h",
    "src/msvc/config.h",
    "src/msvc/inttypes.h",
    "src/msvc/stdint.h",
  ]
  include_dirs = [
    "src/libusb/os",
  ]

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

  direct_dependent_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" ]
  } else {
    sources -= [
      "src/libusb/os/darwin_usb.c",
      "src/libusb/os/darwin_usb.h",
    ]
  }

  if (is_linux || is_android) {
    defines += [
      "HAVE_LIBUDEV=1",
      "OS_LINUX=1",
      "USE_UDEV=1",
      "_GNU_SOURCE=1",
    ]
    configs += [ "//build/config/linux:udev" ]
  } else {
    sources -= [
      "src/libusb/os/linux_udev.c",
      "src/libusb/os/linux_usbfs.c",
      "src/libusb/os/linux_usbfs.h",
    ]
  }

  if (is_win) {
    include_dirs += [ "src/msvc" ]
    sources -= [
      "src/libusb/os/poll_posix.c",
      "src/libusb/os/threads_posix.c",
    ]
  } 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",
    ]
  }
}
