# Copyright 2016 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")

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

component("gamepad") {
  output_name = "device_gamepad"

  sources = [
    "android/gamepad_jni_registrar.cc",
    "android/gamepad_jni_registrar.h",
    "game_controller_data_fetcher_mac.h",
    "game_controller_data_fetcher_mac.mm",
    "gamepad_consumer.cc",
    "gamepad_consumer.h",
    "gamepad_data_fetcher.cc",
    "gamepad_data_fetcher.h",
    "gamepad_data_fetcher_manager.cc",
    "gamepad_data_fetcher_manager.h",
    "gamepad_monitor.cc",
    "gamepad_monitor.h",
    "gamepad_pad_state_provider.cc",
    "gamepad_pad_state_provider.h",
    "gamepad_platform_data_fetcher.h",
    "gamepad_platform_data_fetcher_android.cc",
    "gamepad_platform_data_fetcher_android.h",
    "gamepad_platform_data_fetcher_linux.cc",
    "gamepad_platform_data_fetcher_linux.h",
    "gamepad_platform_data_fetcher_mac.h",
    "gamepad_platform_data_fetcher_mac.mm",
    "gamepad_platform_data_fetcher_win.cc",
    "gamepad_platform_data_fetcher_win.h",
    "gamepad_provider.cc",
    "gamepad_provider.h",
    "gamepad_service.cc",
    "gamepad_service.h",
    "gamepad_shared_buffer.cc",
    "gamepad_shared_buffer.h",
    "gamepad_standard_mappings.cc",
    "gamepad_standard_mappings.h",
    "gamepad_standard_mappings_linux.cc",
    "gamepad_standard_mappings_mac.mm",
    "gamepad_standard_mappings_win.cc",
    "gamepad_user_gesture.cc",
    "gamepad_user_gesture.h",
    "raw_input_data_fetcher_win.cc",
    "raw_input_data_fetcher_win.h",
    "xbox_data_fetcher_mac.h",
    "xbox_data_fetcher_mac.mm",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//device/base/synchronization",
    "//device/gamepad/public/interfaces",
    "//mojo/public/cpp/system",
    "//third_party/WebKit/public:blink_headers",
  ]

  defines = [ "DEVICE_GAMEPAD_IMPLEMENTATION" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # conversion from 'size_t' (64 bit) to 'type'(32 bit).
  }

  if (is_linux && use_udev) {
    deps += [ "//device/udev_linux" ]
  } else if (!is_win && !is_mac && !is_android) {
    sources -= [ "gamepad_platform_data_fetcher_linux.cc" ]
  }

  if (is_android) {
    deps += [ ":jni_headers" ]
  }

  if (is_mac) {
    libs = [
      "CoreFoundation.framework",
      "Foundation.framework",
      "GameController.framework",
      "IOKit.framework",
    ]

    cflags = [ "-Wpartial-availability" ]
  }
}

static_library("test_helpers") {
  testonly = true

  sources = [
    "gamepad_test_helpers.cc",
    "gamepad_test_helpers.h",
  ]

  public_deps = [
    ":gamepad",
    "//base",
    "//third_party/WebKit/public:blink_headers",
  ]
}

if (is_android) {
  generate_jni("jni_headers") {
    sources = [
      "android/java/src/org/chromium/device/gamepad/GamepadList.java",
    ]
    jni_package = "gamepad"
  }

  android_library("java") {
    java_files = [
      "android/java/src/org/chromium/device/gamepad/GamepadDevice.java",
      "android/java/src/org/chromium/device/gamepad/GamepadList.java",
      "android/java/src/org/chromium/device/gamepad/GamepadMappings.java",
    ]
    deps = [
      "//base:base_java",
      "//third_party/android_tools:android_support_annotations_java",
    ]
    srcjar_deps = [ ":java_enums_srcjar" ]
  }

  java_cpp_enum("java_enums_srcjar") {
    sources = [
      "gamepad_standard_mappings.h",
    ]
  }
}
