# 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/android/rules.gni")
import("//build/config/c++/c++.gni")
import("//device/vr/buildflags/buildflags.gni")

assert(enable_vr)

android_aar_prebuilt("controller_test_api_java") {
  testonly = true
  aar_path = "test-libraries/controller_test_api.aar"
  proguard_configs = [ "test-libraries/proguard.txt" ]

  # Jar includes conflicting copies of Desugar-runtime.jar classes.
  jar_excluded_patterns = [ "*ThrowableExtension*.class" ]
  deps = [
    ":gvr_common_java",
    "//third_party/guava:guava_android_java",
  ]
}

android_aar_prebuilt("gvr_common_java") {
  aar_path = "src/libraries/sdk-common-1.130.0.aar"
  proguard_configs = [
    "src/proguard-gvr.txt",
    "proguard-gvr-chromium.txt",
  ]
  ignore_native_libraries = true
  deps = [
    "//third_party/android_protobuf:protobuf_nano_javalib",
  ]
}

android_aar_prebuilt("gvr_controller_java") {
  aar_path = "src/libraries/sdk-controller-1.130.0.aar"
  deps = [
    ":gvr_common_java",
  ]
}

config("libgvr_config") {
  include_dirs = [ "src/libraries/headers/" ]
}

component("gvr_shim") {
  libs = [
    "android",
    "log",
  ]
  if (enable_chrome_android_internal && !is_official_build) {
    deps = [
      "//clank/third_party/gvr_shim",
    ]
  } else {
    if (is_component_build) {
      cxx_abi_version = "Cr"
    } else {
      cxx_abi_version = "1"
    }
    library = "//third_party/gvr-android-sdk/libgvr_shim_static_${current_cpu}_${cxx_abi_version}.a"
    libs += [ library ]

    if (is_component_build) {
      ldflags = [
        "-Wl,--whole-archive",
        rebase_path(library, root_build_dir),
        "-Wl,--no-whole-archive",
      ]
    }
  }
}
