# Copyright 2018 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("//third_party/angle/gni/angle.gni")

vulkan_validation_layers = [
  "VkLayer_core_validation",
  "VkLayer_object_lifetimes",
  "VkLayer_stateless_validation",
  "VkLayer_thread_safety",
  "VkLayer_unique_objects",
]

angle_libraries = [
  "EGL",
  "GLESv1_CM",
  "GLESv2",
  "feature_support",
]

template("angle_apk") {
  manifest_target_name = "${target_name}__manifest"
  manifest_path = "${target_gen_dir}/${target_name}/android/AndroidManifest.xml"

  jinja_template(manifest_target_name) {
    input = "//third_party/angle/android/AndroidManifest.xml.jinja2"
    output = manifest_path
    variables = [ "manifest_package=${invoker.package_name}" ]
  }

  android_resources("${invoker.package_name}_resources") {
    resource_dirs = [ "android/res" ]
    custom_package = "${invoker.package_name}"
  }

  android_assets("${invoker.package_name}_assets") {
    disable_compression = true
    sources = [
      "src/feature_support_util/a4a_rules.json",
    ]
  }

  android_apk(target_name) {
    forward_variables_from(invoker, "*")
    android_manifest = manifest_path
    android_manifest_dep = ":$manifest_target_name"
    deps = [
      ":${invoker.package_name}_assets",
      ":${invoker.package_name}_resources",
    ]
    if (symbol_level != 0) {
      deps += [ ":compressed_symbols" ]
      if (build_apk_secondary_abi && android_64bit_target_cpu) {
        deps += [ ":compressed_symbols($android_secondary_abi_toolchain)" ]
      }
    }

    uncompress_shared_libraries = true

    if (build_apk_secondary_abi && android_64bit_target_cpu) {
      if (symbol_level == 0) {
        secondary_abi_shared_libraries = []
        foreach(_library, angle_libraries) {
          secondary_abi_shared_libraries +=
              [ "${angle_root}:lib${_library}${angle_libs_suffix}" +
                "($android_secondary_abi_toolchain)" ]
        }
        if (angle_enable_vulkan_validation_layers) {
          foreach(_layer, vulkan_validation_layers) {
            secondary_abi_shared_libraries += [
              "${angle_root}/third_party/vulkan-validation-layers:${_layer}" +
                  "($android_secondary_abi_toolchain)",
            ]
          }
        }
      } else {
        _secondary_out_dir = get_label_info(
                ":compressed_symbols($android_secondary_abi_toolchain)",
                "root_out_dir")
        secondary_abi_loadable_modules = []
        foreach(_library, angle_libraries) {
          secondary_abi_loadable_modules += [ "${_secondary_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so" ]
        }
        if (angle_enable_vulkan_validation_layers) {
          foreach(_layer, vulkan_validation_layers) {
            secondary_abi_loadable_modules +=
                [ "${_secondary_out_dir}/lib.compressed/lib${_layer}.so" ]
          }
        }
      }
    }

    if (symbol_level == 0) {
      shared_libraries = []
      foreach(_library, angle_libraries) {
        shared_libraries +=
            [ "${angle_root}:lib${_library}${angle_libs_suffix}" ]
      }
      if (angle_enable_vulkan_validation_layers) {
        foreach(_layer, vulkan_validation_layers) {
          shared_libraries +=
              [ "${angle_root}/third_party/vulkan-validation-layers:${_layer}" ]
        }
      }
    } else {
      loadable_modules = []
      foreach(_library, angle_libraries) {
        loadable_modules += [ "${root_out_dir}/lib.compressed/lib${_library}${angle_libs_suffix}.so" ]
      }
      if (angle_enable_vulkan_validation_layers) {
        foreach(_layer, vulkan_validation_layers) {
          loadable_modules +=
              [ "${root_out_dir}/lib.compressed/lib${_layer}.so" ]
        }
      }
    }
  }
}
