# 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("//android_webview/variables.gni")
import("//base/android/linker/config.gni")
import("//base/android/proguard/proguard.gni")
import("//build/config/android/extract_unwind_tables.gni")
import("//build/config/android/rules.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/locales.gni")
import("//build/util/version.gni")
import("//chrome/android/chrome_common_shared_library.gni")
import("//chrome/common/features.gni")
import("//device/vr/buildflags/buildflags.gni")
import("channel.gni")

declare_args() {
  # Enable multidex in release builds.
  multidex_in_release = false

  # Experimental only. Causes .dex files to be store in the APK uncompressed.
  # Only affects monochrome_public_apk and trichrome_chrome_apk.
  use_uncompressed_dex = false
}

default_chrome_public_jinja_variables = [
  "channel=$android_channel",
  "enable_vr=$enable_vr",
  "include_arcore_manifest_flag=false",
  "notouch_build=$notouch_build",
]

# Enable stack unwinding only on official build with specific channels. It is
# not enabled on non-official builds to not affect build time for developers.
# The unwind file is ~2MB in apk, which is fine for Canary.
_add_unwind_tables_in_chrome_32bit_apk =
    is_official_build && (target_cpu == "arm" || target_cpu == "arm64") &&
    (android_channel == "default" || android_channel == "canary" ||
     android_channel == "dev")

# A template used to declare any target that will implement a full Chromium
# or Chrome application, either as an APK, or an app bundle module.
#
# Variables:
#   target_type: Either 'android_apk' or 'android_app_bundle_module'.
#   apk_name: For APK target types, the final APK name without a suffix.
#   module_name: For bundle module target types, the module's name without a
#     suffix.
#   is_base_module: For bundle module target types, true iff this is a base
#     application module, instead of a feature module.
#   android_manifest: Application manifest path.
#   android_manifest_dep: Name of target generating the android_manifest.
#   shared_libraries: List of native shared libraries targets to include in
#     the final target (e.g. [ ":libchrome" ]).
#   add_unwind_tables_in_apk: Optional. If true, add the unwind tables to the
#     final APK or bundle.
#   is_modern: If true, indicates this corresponds to a chrome_modern_XXX
#     target that can only run on Android L-M.
#   is_monochrome: Indicates that this target contains chrome and webview
#     packaged together and can only run on Android N+.
#   is_trichrome: Indicates this target relies on a trichrome static library
#     target and can only run on Android P+.
#   png_to_webp: Optional. If true, convert image resources to webp format.
#     requires Android K+, since these were not supported by Android properly
#     before 4.3.0.
#   load_library_from_apk: Optional. If true, native libraries will be loaded
#     directly from the APK (and stored zipaligned and uncompressed). This
#     requires either the Chromium linker, or Android M+.
#   version_name: Application version name (e.g. "Developer Build").
#
#   Plus all other variables accepted by android_apk() or
#   android_app_bundle_module(), depending on the target type.
#
template("chrome_public_common_apk_or_module_tmpl") {
  assert(
      invoker.target_type == "android_apk" ||
          invoker.target_type == "android_app_bundle_module" ||
          invoker.target_type == "instrumentation_test_apk",
      "Invalid target_type definition, should be 'android_apk' or 'android_app_bundle_module'")

  _is_modern = defined(invoker.is_modern) && invoker.is_modern
  _is_monochrome = defined(invoker.is_monochrome) && invoker.is_monochrome
  _is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
  assert(_is_modern || !_is_modern)  # Mark as used.
  assert(!(_is_monochrome && _is_trichrome),
         "Cannot be both trichrome and monochrome!")

  # Adds unwind table asset to the chrome apk for the given library target. This
  # is not part of generic apk assets target since it depends on the main shared
  # library of the apk, to extract unwind tables.
  if (defined(invoker.add_unwind_tables_in_apk)) {
    _add_unwind_tables = invoker.add_unwind_tables_in_apk
  } else {
    _needs_32bit_lib =
        target_cpu == "arm" ||
        (_is_monochrome && target_cpu == "arm64" && build_apk_secondary_abi)
    _add_unwind_tables =
        _needs_32bit_lib && _add_unwind_tables_in_chrome_32bit_apk &&
        defined(invoker.shared_libraries)
  }

  if (_add_unwind_tables) {
    _unwind_asset_target = "${target_name}__unwind_assets"
    unwind_table_asset(_unwind_asset_target) {
      if (defined(invoker.testonly)) {
        testonly = invoker.testonly
      }

      if (defined(invoker.shared_library_for_unwind_asset)) {
        library_target = invoker.shared_library_for_unwind_asset
      } else {
        library_target = "chrome"
      }
      deps = invoker.shared_libraries
      if (build_apk_secondary_abi && defined(android_secondary_abi_cpu)) {
        deps += [ "//chrome/android:lib${library_target}($android_secondary_abi_toolchain)" ]
      }
    }
  } else if (defined(invoker.shared_library_for_unwind_asset)) {
    not_needed(invoker, [ "shared_library_for_unwind_asset" ])
  }

  if (!defined(invoker.target_type)) {
    _target_type = "android_apk"
  } else {
    _target_type = invoker.target_type
  }

  if (defined(invoker.enable_multidex)) {
    _enable_multidex = invoker.enable_multidex
  } else {
    _enable_multidex = is_java_debug || multidex_in_release
  }

  target(_target_type, target_name) {
    forward_variables_from(invoker, "*")

    if (_is_trichrome) {
      # TODO(torne): make minsdk=Q once we no longer build hacky P version
      min_sdk_version = android_sdk_version
    } else if (_is_monochrome) {
      min_sdk_version = 24
    } else if (_is_modern) {
      min_sdk_version = 21
    } else {
      min_sdk_version = 19
    }
    target_sdk_version = android_sdk_version

    # Match drawables, but not mipmaps.
    resource_blacklist_regex = "drawable[^/]*-xxxhdpi"
    if (min_sdk_version >= 21) {
      # Resources used by AndroidManifest.xml only for pre-21.
      resource_blacklist_regex += "|app_single_page_icon"
    }

    # Exception rationale in https://crbug.com/691733.
    resource_blacklist_exceptions = [
      "*shadow*",  # Combination of gradient & transparency cause pixelation.
      "*.9.*",  # Most nine-patches contain shadows.
      "*ic_file_download_white*",  # Bottom edge seems misaligned.
      "*ic_lock.*",  # Bottom edge seems misaligned.
      "*ic_group_*",  # Appear only in xxxhdpi.
    ]

    if (!_is_monochrome) {
      locale_config_java_packages = [ "org.chromium.chrome.browser" ]
    }

    # Use zh-TW strings for zh-HK (https://crbug.com/780847).
    if (!defined(support_zh_hk)) {
      support_zh_hk = true
    }

    strip_resource_names = !is_java_debug

    # TODO(753402): enable once aapt2>=3.6.0 and bundletool>0.9.0 are rolled in.
    short_resource_paths = false

    if (defined(shared_libraries) && shared_libraries != []) {
      _native_lib_file =
          rebase_path("$root_gen_dir/CHROME_VERSION.json", root_out_dir)
      native_lib_version_arg = "@FileArg($_native_lib_file:full-quoted)"
      native_lib_version_rule = "//build/util:chrome_version_json"
    }
    if (!defined(aapt_locale_whitelist)) {
      if (target_type == "android_apk") {
        # For APKs, do not include the resource strings files from our
        # omitted locale list in order to save size.
        aapt_locale_whitelist = locales - android_chrome_omitted_locales
      } else {
        # For bundles, only include resource strings files from our full
        # locale list, but nothing more.
        aapt_locale_whitelist = locales
      }
    }

    if (!_is_monochrome && !_is_trichrome) {
      deps += [
        "//chrome/android:chrome_public_v8_assets",
        "//components/crash/content/app:chrome_crashpad_handler_named_as_so",
        "//third_party/icu:icu_assets",
      ]
      if (!defined(loadable_modules)) {
        loadable_modules = []
      }
      loadable_modules += [ "$root_out_dir/libchrome_crashpad_handler.so" ]
    }

    if (_enable_multidex) {
      enable_multidex = true
      if (_target_type == "android_apk") {
        if (!defined(negative_main_dex_globs)) {
          negative_main_dex_globs = [
            "*ApplicationStatus*",  # Doesn't work in non-browser process.
            "*ChromeActivity*",  # Pulls in the world, so ensure it doesn't slip in.
            "*GoogleApiAvailability*",  # Play Services only in browser process.
            "*R\$*",  # Should not use resources from non-browser process.
          ]
        }

        # Allow targets to append to the default list.
        if (defined(extra_negative_main_dex_globs)) {
          negative_main_dex_globs += extra_negative_main_dex_globs
        }
      }
    }

    # Only bundles can install modules. Therefore, include stub implementation
    # for all other targets to save some binary size.
    if (_target_type == "android_app_bundle_module") {
      deps +=
          [ "//components/module_installer/android:module_installer_impl_java" ]
    } else {
      deps +=
          [ "//components/module_installer/android:module_installer_stub_java" ]
    }

    if (!is_java_debug) {
      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 +=
            [ "//base/android/proguard/enable_obfuscation.flags" ]
      } else {
        proguard_configs +=
            [ "//base/android/proguard/disable_all_obfuscation.flags" ]
      }
    }

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

    if (use_chromium_linker) {
      if (!defined(load_library_from_apk)) {
        # 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.
        load_library_from_apk = chromium_linker_supported &&
                                (current_cpu == "arm64" || current_cpu == "x64")
      }
    }
    if (_target_type == "android_apk") {
      command_line_flags_file = "chrome-command-line"
    } else {
      deps += [ "//chrome/android:bundle_canary_java" ]
    }
    if (!_is_trichrome) {
      product_version_resources_dep =
          "//chrome/android:product_version_resources"
    }

    if (defined(_unwind_asset_target)) {
      deps += [ ":$_unwind_asset_target" ]
    }

    deps += [ "//chrome/android:chrome_all_java" ]

    if (!defined(version_code)) {
      if (_is_trichrome) {
        version_code = trichrome_version_code
      } else if (_is_monochrome) {
        version_code = monochrome_version_code
      } else if (_is_modern) {
        version_code = chrome_modern_version_code
      } else {
        # For chrome without the modern design, used on pre-L devices
        version_code = chrome_version_code
      }
    }
  }
}

# The equivalent of chrome_common_apk_or_module_tmpl for all builds of
# monochrome and trichrome chrome.

# Variables:
#   use_trichrome_library: Specifies that this target depends on a trichrome
#     static library target to provide certain shared library deps, and that
#     this target should not package webview deps.
template("monochrome_public_common_apk_or_module_tmpl") {
  if (defined(invoker.enable_multidex)) {
    _enable_multidex = invoker.enable_multidex
  } else {
    _enable_multidex = is_java_debug || multidex_in_release
  }
  chrome_public_common_apk_or_module_tmpl(target_name) {
    forward_variables_from(invoker,
                           [
                             "version_code",
                             "verify_manifest",
                           ])
    is_trichrome =
        defined(invoker.use_trichrome_library) && invoker.use_trichrome_library
    is_monochrome = !is_trichrome

    loadable_modules = []
    secondary_abi_loadable_modules = []

    _deps = [
      "//components/crash/android:handler_java",
      "//chrome/android:chrome_public_non_pak_assets",
    ]

    if (is_monochrome) {
      locale_config_java_packages = [
        "org.chromium.chrome.browser",
        webview_locale_config_java_package,
      ]
      if (android_64bit_target_cpu) {
        # Build //android_webview:monochrome with the opposite bitness that
        # Chrome runs in.
        if (defined(invoker.is_64_bit_browser) && invoker.is_64_bit_browser) {
          shared_libraries = [ "//chrome/android:libmonochrome_64" ]
          if (build_apk_secondary_abi && invoker.include_32_bit_webview) {
            secondary_abi_shared_libraries = [ "//android_webview:monochrome_64($android_secondary_abi_toolchain)" ]
          }
        } else {
          shared_libraries = [ "//android_webview:monochrome" ]
          if (build_apk_secondary_abi) {
            secondary_abi_shared_libraries =
                [ "//chrome/android:monochrome_secondary_abi_lib" ]
          }
        }
      } else {
        shared_libraries = [ "//chrome/android:libmonochrome" ]
      }
      shared_library_for_unwind_asset = "monochrome"

      _deps += [
        "//android_webview:monochrome_webview_assets",
        "//android_webview/apk:apk_java",
        "//android_webview/glue",
        "//chrome/android:monochrome_java",
        "//chrome/android/monochrome:monochrome_license_provider_java",
        "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
      ]
      loadable_modules += [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]

      if (android_64bit_target_cpu && build_apk_secondary_abi &&
          (!defined(invoker.is_64_bit_browser) || !invoker.is_64_bit_browser ||
           invoker.include_32_bit_webview)) {
        _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
        _deps += [ _trampoline ]
        _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
        secondary_abi_loadable_modules +=
            [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
      }
      alternative_android_sdk_dep = webview_framework_dep
      app_as_shared_lib = true
      _pak_prefix = "monochrome"
    }
    if (is_trichrome) {
      if (!trichrome_shared_assets) {
        _deps += [ "//android_webview:monochrome_webview_assets" ]
      }

      # Include placeholder libraries to make Chrome multiarch in the same way
      # as Monochrome, even though Chrome only runs with one of the two
      # bitnesses. This allows the "32-bit" and "64-bit" versions of Chrome to
      # depend on their respective versions of the shared library APK even
      # though they're functionally the same.
      native_lib_placeholders = [ "libdummy.so" ]
      if (android_64bit_target_cpu && build_apk_secondary_abi &&
          (!defined(invoker.is_64_bit_browser) || !invoker.is_64_bit_browser ||
           invoker.include_32_bit_webview)) {
        secondary_native_lib_placeholders = [ "libdummy.so" ]
      }
      _pak_prefix = "trichrome_chrome"
    }

    use_chromium_linker = false

    # Resources config for blocklisting resource names from obfuscation
    resources_config_path = "//android_webview/aapt2.config"

    if (!defined(invoker.target_type) || invoker.target_type == "android_apk") {
      # Incremental install doesn't work for monochrome. See crbug.com/663492.
      never_incremental = true

      uncompress_dex = use_uncompressed_dex
    }

    # Strip xml namespaces for monochrome. This should only be done for apks
    # targeting API > 21 which for chrome is only Monochrome. This is due to
    # how android public and private resource ids are namespaced.
    no_xml_namespaces = true

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

    forward_variables_from(invoker,
                           "*",
                           [
                             "include_32_bit_webview",
                             "is_64_bit_browser",
                           ])

    # Android N+ better supports multiple locales (https://crbug.com/780847).
    support_zh_hk = false

    _deps += [ "//chrome/android:${_pak_prefix}_apk_pak_assets" ]

    if (_enable_multidex && invoker.target_type == "android_apk" &&
        !defined(invoker.negative_main_dex_globs)) {
      # WebView pulls play services into the main dex.
      negative_main_dex_globs = [
        # TODO(agrieve): Add ApplicationStatus to this list. It's currently
        #     included because of ActivityWindowAndroid, but is never used at
        #     runtime by webview.
        "*ChromeActivity*",  # Pulls in the world, so ensure it doesn't slip in.
      ]
    }

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

    if (!defined(deps)) {
      deps = []
    }
    deps += _deps
  }
}
