# 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",
      ]
    }
  }
}
