# Copyright 2015 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("//base/android/linker/config.gni")
import("//build/config/android/rules.gni")
import("//chrome/common/features.gni")
import("//third_party/leakcanary/config.gni")
import("channel.gni")

declare_args() {
  # Whether chrome_public_apk should use the crazy linker.
  chrome_public_apk_use_chromium_linker = chromium_linker_supported

  # Whether chrome_public_apk should use the relocation packer.
  chrome_public_apk_use_relocation_packer = chromium_linker_supported

  # Whether native libraries should be loaded from within the apk.
  # Only attempt loading the library from the APK for 64 bit devices
  # until the number of 32 bit devices which don't support this
  # approach falls to a minimal level -  http://crbug.com/390618.
  chrome_public_apk_load_library_from_apk =
      chromium_linker_supported &&
      (current_cpu == "arm64" || current_cpu == "x64")

  # Enables ProGuard obfuscation of Chromium packages.
  enable_proguard_obfuscation = false
}

default_chrome_public_jinja_variables = [
  "channel=$android_channel",
  "enable_leakcanary=$enable_leakcanary",
  "enable_vr_shell=$enable_vr_shell",
  "enable_webvr=$enable_webvr",
]

template("chrome_public_apk_tmpl") {
  android_apk(target_name) {
    forward_variables_from(invoker, "*")
    _native_lib_file =
        rebase_path("$root_gen_dir/CHROME_VERSION.json", root_out_dir)
    native_lib_version_arg = "@FileArg($_native_lib_file:full-quoted)"

    if (is_java_debug) {
      enable_multidex = true
    } else {
      proguard_enabled = true
      if (!defined(proguard_configs)) {
        proguard_configs = []
      }
      proguard_configs += [
        "//chrome/android/java/proguard.flags",
        "//base/android/proguard/chromium_apk.flags",
        "//base/android/proguard/chromium_code.flags",
      ]
      if (enable_proguard_obfuscation) {
        proguard_configs += [ "//chrome/android/java/proguard-obfuscate.flags" ]
      } else {
        proguard_configs +=
            [ "//chrome/android/java/proguard-dont-obfuscate.flags" ]
      }
    }

    if (!defined(use_chromium_linker)) {
      use_chromium_linker = chrome_public_apk_use_chromium_linker
    }

    if (use_chromium_linker) {
      if (!defined(load_library_from_apk)) {
        load_library_from_apk = chrome_public_apk_load_library_from_apk
      }

      if (!defined(enable_relocation_packing)) {
        enable_relocation_packing = chrome_public_apk_use_relocation_packer
      }
    }
  }
}

template("monochrome_public_apk_tmpl") {
  chrome_public_apk_tmpl(target_name) {
    # Always build 64-bit //android_webview:monochrome because Chrome runs
    # in 32-bit mode.
    if (android_64bit_target_cpu) {
      shared_libraries = [ "//android_webview:monochrome" ]
    } else {
      shared_libraries = [ "//chrome/android:monochrome" ]
    }
    if (android_64bit_target_cpu && build_apk_secondary_abi) {
      secondary_abi_shared_libraries =
          [ "//chrome/android:monochrome_secondary_abi_lib" ]
    }

    alternative_android_sdk_jar = webview_framework_jar
    app_as_shared_lib = true
    use_chromium_linker = false
    requires_sdk_api_level_23 = true
    enable_relocation_packing = true
    extensions_to_not_compress = ".lpak,.pak,.bin,.dat"

    # Configrations to make android load shared library from APK.
    uncompress_shared_libraries = true
    page_align_shared_libraries = true

    forward_variables_from(invoker, "*")

    if (!defined(deps)) {
      deps = []
    }
    deps += [
      "//android_webview:monochrome_webview_assets",
      "//android_webview/glue",
      "//chrome/android:chrome_public_non_pak_assets",
      "//chrome/android:monochrome_pak_assets",
    ]

    if (!is_java_debug) {
      if (!defined(proguard_configs)) {
        proguard_configs = []
      }
      proguard_configs += [ "//android_webview/apk/java/proguard.flags" ]
    }
  }
}
