# 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("features/features.gni")
import("//mojo/public/tools/bindings/mojom.gni")

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

if (enable_vr) {
  component("vr") {
    output_name = "device_vr"

    sources = [
      "vr_export.h",
    ]
    defines = [ "DEVICE_VR_IMPLEMENTATION" ]
    deps = [
      ":mojo_bindings",
      "features",
    ]
    sources += [
      "vr_device.cc",
      "vr_device.h",
      "vr_device_manager.cc",
      "vr_device_manager.h",
      "vr_device_provider.h",
      "vr_display_impl.cc",
      "vr_display_impl.h",
      "vr_service_impl.cc",
      "vr_service_impl.h",
    ]

    deps += [
      "//base",
      "//gpu/ipc/common:interfaces",
      "//mojo/public/cpp/bindings",
      "//ui/gfx",
    ]

    if (is_android && (current_cpu == "arm" || current_cpu == "arm64")) {
      sources += [
        "android/gvr/cardboard_gamepad_data_fetcher.cc",
        "android/gvr/cardboard_gamepad_data_fetcher.h",
        "android/gvr/cardboard_gamepad_data_provider.h",
        "android/gvr/gvr_delegate.cc",
        "android/gvr/gvr_delegate.h",
        "android/gvr/gvr_delegate_provider.h",
        "android/gvr/gvr_delegate_provider_factory.cc",
        "android/gvr/gvr_delegate_provider_factory.h",
        "android/gvr/gvr_device.cc",
        "android/gvr/gvr_device.h",
        "android/gvr/gvr_device_provider.cc",
        "android/gvr/gvr_device_provider.h",
        "android/gvr/gvr_gamepad_data_fetcher.cc",
        "android/gvr/gvr_gamepad_data_fetcher.h",
        "android/gvr/gvr_gamepad_data_provider.h",
      ]

      deps += [
        ":jni_headers",
        "//device/gamepad",
        "//device/gamepad/public/cpp:shared_with_blink",
        "//third_party/WebKit/public:blink_headers",
      ]
      ldflags = [ "-landroid" ]
      libs = [ "//third_party/gvr-android-sdk/libgvr_shim_static_${current_cpu}.a" ]
      configs += [ "//third_party/gvr-android-sdk:libgvr_config" ]
    }

    if (enable_openvr) {
      deps += [
        "//device/gamepad",
        "//third_party/openvr:openvr",
      ]
      sources += [
        "openvr/openvr_device.cc",
        "openvr/openvr_device.h",
        "openvr/openvr_device_provider.cc",
        "openvr/openvr_device_provider.h",
        "openvr/openvr_gamepad_data_fetcher.cc",
        "openvr/openvr_gamepad_data_fetcher.h",
      ]
    }
  }

  static_library("fakes") {
    testonly = true

    sources = [
      "test/fake_vr_device.cc",
      "test/fake_vr_device.h",
      "test/fake_vr_device_provider.cc",
      "test/fake_vr_device_provider.h",
      "test/fake_vr_display_impl_client.cc",
      "test/fake_vr_display_impl_client.h",
      "test/fake_vr_service_client.cc",
      "test/fake_vr_service_client.h",
    ]

    public_deps = [
      ":mojo_bindings",
      ":vr",
      "//base",
      "//mojo/public/cpp/bindings",
    ]
  }
} else {
  source_set("vr") {
    # We need to include an empty .cc file so that mac and windows don't fall over when trying to
    # compile this when webvr is disabled.
    sources = [
      "empty.cc",
    ]
  }
}

if (is_android && (current_cpu == "arm" || current_cpu == "arm64")) {
  java_sources_needing_jni =
      [ "android/java/src/org/chromium/device/vr/NonPresentingGvrContext.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",
      "//third_party/gvr-android-sdk:gvr_common_java",
      "//ui/android:ui_java",
    ]
  }
}

mojom_component("mojo_bindings") {
  output_prefix = "device_vr_mojo_bindings"
  macro_prefix = "DEVICE_VR_MOJO_BINDINGS"

  sources = [
    "vr_service.mojom",
  ]

  public_deps = [
    "//gpu/ipc/common:interfaces",
    "//mojo/common:common_custom_types",
    "//ui/gfx/geometry/mojo",
  ]
}
