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

vulkan_validation_layers = [ "VkLayer_khronos_validation" ]

angle_libraries = [
  "libEGL",
  "libGLESv1_CM",
  "libGLESv2",
  "libfeature_support",
]

if (enable_java_templates) {
  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 = "${angle_root}/android/AndroidManifest.xml.jinja2"
      output = manifest_path
      variables = [
        "manifest_package=${invoker.package_name}",
        "extract_native_libs=${angle_extract_native_libs}",
      ]
    }

    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"
      version_code = invoker.version_code
      version_name = invoker.version_name
      min_sdk_version = 26
      target_sdk_version = 28
      generate_final_jni = false
      deps = [ ":${invoker.package_name}_assets" ]
      if (symbol_level != 0) {
        deps += [ ":compressed_symbols" ]
        if (android_64bit_target_cpu) {
          deps += [ ":compressed_symbols($android_secondary_abi_toolchain)" ]
        }
      }

      uncompress_shared_libraries = true

      if (android_64bit_target_cpu) {
        if (symbol_level == 0) {
          secondary_abi_shared_libraries = []
          foreach(_library, angle_libraries) {
            secondary_abi_shared_libraries +=
                [ "$angle_root:${_library}($android_secondary_abi_toolchain)" ]
          }
          if (angle_enable_vulkan_validation_layers) {
            foreach(_layer, vulkan_validation_layers) {
              secondary_abi_shared_libraries +=
                  [ "$angle_vulkan_validation_layers_dir:${_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/${_library}${angle_libs_suffix}${shlib_extension}" ]
          }
          if (angle_enable_vulkan_validation_layers) {
            foreach(_layer, vulkan_validation_layers) {
              secondary_abi_loadable_modules += [ "${_secondary_out_dir}/lib.compressed/lib${_layer}${shlib_extension}" ]
            }
          }
        }
      }

      if (symbol_level == 0) {
        shared_libraries = []
        foreach(_library, angle_libraries) {
          shared_libraries += [ "$angle_root:$_library" ]
        }
        if (angle_enable_vulkan_validation_layers) {
          foreach(_layer, vulkan_validation_layers) {
            shared_libraries +=
                [ "$angle_vulkan_validation_layers_dir:${_layer}" ]
          }
        }
      } else {
        loadable_modules = []
        foreach(_library, angle_libraries) {
          loadable_modules += [ "$root_out_dir/lib.compressed/${_library}${angle_libs_suffix}${shlib_extension}" ]
        }
        if (angle_enable_vulkan_validation_layers) {
          foreach(_layer, vulkan_validation_layers) {
            loadable_modules += [
              "$root_out_dir/lib.compressed/lib${_layer}${shlib_extension}",
            ]
          }
        }
      }
    }
  }
}
