# Copyright 2014 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.

# This file contains common system config stuff for the Android build.

# NOTE: Because Chrome OS builds may depend on targets built with the Android
# toolchain, this GNI file may be read and processed from within Chrome OS
# toolchains. Checking |is_android| here would therefore be too restrictive.
if (is_android || is_chromeos) {
  import("//build/config/chromecast_build.gni")
  import("//build/config/dcheck_always_on.gni")
  import("//build_overrides/build.gni")
  import("abi.gni")

  if (build_with_chromium) {
    # Some non-chromium projects (e.g. WebRTC) use our build configs
    # heavily but don't write gclient args files.

    import("//build/config/gclient_args.gni")
    if (defined(checkout_android_native_support)) {
      n = "$0x0A"  # Newline
      assert(checkout_android_native_support,
             "Missing native Android toolchain support. |target_os| in your " +
                 ".gclient configuration file (in the parent directory of " +
                 "src) must include \"android\" and/or \"chromeos\". For " +
                 "example:${n}${n}solutions = [${n}...${n}]${n}" +
                 "target_os=[\"chromeos\"]${n}${n}" +
                 "After adding |target_os| please re-run \"gclient sync\".${n}")
    }
  }

  has_chrome_android_internal =
      exec_script("//build/dir_exists.py",
                  [ rebase_path("//clank", root_build_dir) ],
                  "string") == "True"

  # We are using a separate declare_args block for only this argument so that
  # we can decide if we have to pull in definitions from the internal config
  # early.
  declare_args() {
    # Enables using the internal Chrome for Android repository. The default
    # value depends on whether the repository is available, and if it's not but
    # this argument is manually set to True, the generation will fail.
    # The main purpose of this argument is to avoid having to maintain 2
    # repositories to support both public only and internal builds.
    enable_chrome_android_internal = has_chrome_android_internal

    # The default to use for android:minSdkVersion for targets that do
    # not explicitly set it.
    default_min_sdk_version = 21

    # [WIP] Allows devs to achieve much faster edit-build-install cycles.
    # Currently only works for ChromeModern apks due to incremental install.
    # This needs to be in a separate declare_args as it determines some of the
    # args in the main declare_args block below.
    android_fast_local_dev = false
  }

  declare_args() {
    # Android API level for 32 bits platforms
    android32_ndk_api_level = default_min_sdk_version

    # Android API level for 64 bits platforms
    if (default_min_sdk_version < 21) {
      android64_ndk_api_level = 21
    } else {
      android64_ndk_api_level = default_min_sdk_version
    }
  }

  if (enable_chrome_android_internal) {
    import("//clank/config.gni")
  } else {
    import("//build/config/android/sdk.gni")
    declare_args() {
      # Which Android SDK to use.
      android_sdk_release = default_android_sdk_release
    }
  }

  if (!defined(default_android_ndk_root)) {
    default_android_ndk_root = "//third_party/android_ndk"
    default_android_ndk_version = "r22"
    default_android_ndk_major_version = 22
  } else {
    assert(defined(default_android_ndk_version))
    assert(defined(default_android_ndk_major_version))
  }

  public_android_sdk_root = "//third_party/android_sdk/public"
  if (android_sdk_release == "r") {
    default_android_sdk_root = public_android_sdk_root
    default_android_sdk_version = "30"
    default_android_sdk_build_tools_version = "30.0.1"
    public_android_sdk = true
  }

  # For use downstream when we are building with preview Android SDK
  if (!defined(final_android_sdk)) {
    final_android_sdk = public_android_sdk
  }

  if (!defined(default_lint_android_sdk_root)) {
    # Purposefully repeated so that downstream can change
    # default_android_sdk_root without changing lint version.
    default_lint_android_sdk_root = public_android_sdk_root
    default_lint_android_sdk_version = 30
  }

  if (!defined(default_extras_android_sdk_root)) {
    # Purposefully repeated so that downstream can change
    # default_android_sdk_root without changing where we load the SDK extras
    # from. (Google Play services, etc.)
    default_extras_android_sdk_root = public_android_sdk_root
  }

  if (!defined(default_android_keystore_path)) {
    default_android_keystore_path = "//build/android/chromium-debug.keystore"
    default_android_keystore_name = "chromiumdebugkey"
    default_android_keystore_password = "chromium"
  }

  # google_play_services_package contains the path where individual client
  # targets (e.g. google_play_services_base_java) are located.
  if (!defined(google_play_services_package)) {
    if (is_chromecast && chromecast_branding != "public") {
      google_play_services_package = "//chromecast/internal/android/prebuilt/google-play-services-first-party"
    } else {
      google_play_services_package = "//third_party/android_deps"
    }
  }

  if (!defined(dagger_java_target)) {
    dagger_java_target =
        "//third_party/android_deps:com_google_dagger_dagger_java"
  }

  if (!defined(dagger_annotation_processor_target)) {
    dagger_annotation_processor_target =
        "//third_party/android_deps:com_google_dagger_dagger_compiler_java"
  }

  if (!defined(guava_android_target)) {
    guava_android_target =
        "//third_party/android_deps:com_google_guava_guava_android_java"
  }

  if (!defined(material_design_target)) {
    material_design_target =
        "//third_party/android_deps:com_google_android_material_material_java"
  }

  if (!defined(android_protoc_bin)) {
    android_protoc_bin = "//third_party/android_protoc/protoc"
    android_proto_runtime =
        "//third_party/android_deps:com_google_protobuf_protobuf_javalite_java"
  }

  webview_public_framework_dep =
      "//third_party/android_sdk:public_framework_system_java"
  if (!defined(webview_framework_dep)) {
    webview_framework_dep = webview_public_framework_dep
  }

  assert(defined(default_android_sdk_root),
         "SDK release " + android_sdk_release + " not recognized.")

  declare_args() {
    android_ndk_root = default_android_ndk_root
    android_ndk_version = default_android_ndk_version
    android_ndk_major_version = default_android_ndk_major_version

    android_sdk_root = default_android_sdk_root
    android_sdk_version = default_android_sdk_version
    android_sdk_build_tools_version = default_android_sdk_build_tools_version

    lint_android_sdk_root = default_lint_android_sdk_root
    lint_android_sdk_version = default_lint_android_sdk_version

    # Libc++ library directory. Override to use a custom libc++ binary.
    android_libcpp_lib_dir = ""

    # Android versionCode for android_apk()s that don't explicitly set one.
    android_default_version_code = "1"

    # Android versionName for android_apk()s that don't explicitly set one.
    android_default_version_name = "Developer Build"

    # Forced Android versionCode
    android_override_version_code = ""

    # Forced Android versionName
    android_override_version_name = ""

    # The path to the keystore to use for signing builds.
    android_keystore_path = default_android_keystore_path

    # The name of the keystore to use for signing builds.
    android_keystore_name = default_android_keystore_name

    # The password for the keystore to use for signing builds.
    android_keystore_password = default_android_keystore_password

    # Java debug on Android. Having this on enables multidexing, and turning it
    # off will enable proguard.
    is_java_debug = is_debug

    # Mark APKs as android:debuggable="true".
    debuggable_apks = !is_official_build

    # Set to false to disable the Errorprone compiler.
    # Defaults to false for official builds to reduce build times.
    # Static analysis failures should have been already caught by normal bots.
    # Disabled when fast_local_dev is turned on.
    use_errorprone_java_compiler = !is_official_build && !android_fast_local_dev

    # Build incremental targets whenever possible.
    # See //build/android/incremental_install/README.md for more details.
    incremental_install = android_fast_local_dev

    # When true, updates all android_aar_prebuilt() .info files during gn gen.
    # Refer to android_aar_prebuilt() for more details.
    update_android_aar_prebuilts = false

    # Turns off android lint. Useful for prototyping or for faster local builds.
    # Defaults to true for official builds to reduce build times.
    # Static analysis failures should have been already caught by normal bots.
    # Disabled when fast_local_dev is turned on.
    disable_android_lint = is_official_build || android_fast_local_dev

    # Location of aapt2 used for app bundles. For now, a more recent version
    # than the one distributed with the Android SDK is required.
    android_sdk_tools_bundle_aapt2_dir =
        "//third_party/android_build_tools/aapt2"

    # Causes expectation failures to break the build, otherwise, just warns on
    # stderr and writes a failure file to $android_configuration_failure_dir:
    fail_on_android_expectations = false

    # Controls whether proguard obfuscation is enabled for targets
    # configured to use it.
    enable_proguard_obfuscation = true

    # Controls whether |short_resource_paths| and |strip_resource_names| are
    # respected. Useful when trying to analyze APKs using tools that do not
    # support mapping these names.
    enable_arsc_obfuscation = true

    # The target to use as the system WebView implementation.
    system_webview_apk_target = "//android_webview:system_webview_apk"

    # Where to write failed expectations for bots to read.
    expectations_failure_dir = "$root_build_dir/failed_expectations"
  }

  # We need a second declare_args block to make sure we are using the overridden
  # value of the arguments set above.
  declare_args() {
    if (defined(default_android_sdk_platform_version)) {
      android_sdk_platform_version = default_android_sdk_platform_version
    } else {
      android_sdk_platform_version = android_sdk_version
    }

    # Whether java assertions and Preconditions checks are enabled.
    enable_java_asserts = is_java_debug || dcheck_always_on

    # Reduce build time by using d8 incremental build.
    enable_incremental_d8 = true

    # Use hashed symbol names to reduce JNI symbol overhead.
    use_hashed_jni_names = !is_java_debug

    # Desugar lambdas and interfaces methods using Desugar.jar rather than
    # D8/R8. D8/R8 will still be used for backported method desugaring.
    enable_bazel_desugar = true

    # Enables Java library desugaring.
    # This will cause an extra classes.dex file to appear in every apk.
    enable_jdk_library_desugaring = true
  }

  # Host stuff -----------------------------------------------------------------

  # Defines the name the Android build gives to the current host CPU
  # architecture, which is different than the names GN uses.
  if (host_cpu == "x64") {
    android_host_arch = "x86_64"
  } else if (host_cpu == "x86") {
    android_host_arch = "x86"
  } else {
    assert(false, "Need Android toolchain support for your build CPU arch.")
  }

  # Defines the name the Android build gives to the current host CPU
  # architecture, which is different than the names GN uses.
  if (host_os == "linux") {
    android_host_os = "linux"
  } else if (host_os == "mac") {
    android_host_os = "darwin"
  } else {
    assert(false, "Need Android toolchain support for your build OS.")
  }

  # Directories and files ------------------------------------------------------
  #
  # We define may of the dirs strings here for each output architecture (rather
  # than just the current one) since these are needed by the Android toolchain
  # file to define toolchains for all possible targets in one pass.

  android_sdk =
      "${android_sdk_root}/platforms/android-${android_sdk_platform_version}"
  android_sdk_build_tools =
      "${android_sdk_root}/build-tools/$android_sdk_build_tools_version"

  # Path to the SDK's android.jar
  android_sdk_jar = "$android_sdk/android.jar"

  # Location of libgcc. This is only needed for the current GN toolchain, so we
  # only need to define the current one, rather than one for every platform
  # like the toolchain roots.
  if (current_cpu == "x86") {
    android_prebuilt_arch = "android-x86"
    _binary_prefix = "i686-linux-android"
  } else if (current_cpu == "arm") {
    android_prebuilt_arch = "android-arm"
    _binary_prefix = "arm-linux-androideabi"
  } else if (current_cpu == "mipsel") {
    android_prebuilt_arch = "android-mips"
    _binary_prefix = "mipsel-linux-android"
  } else if (current_cpu == "x64") {
    android_prebuilt_arch = "android-x86_64"
    _binary_prefix = "x86_64-linux-android"
  } else if (current_cpu == "arm64") {
    android_prebuilt_arch = "android-arm64"
    _binary_prefix = "aarch64-linux-android"
  } else if (current_cpu == "mips64el") {
    android_prebuilt_arch = "android-mips64"
    _binary_prefix = "mips64el-linux-android"
  } else {
    assert(false, "Need android libgcc support for your target arch.")
  }

  android_toolchain_root = "$android_ndk_root/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}"
  android_tool_prefix = "$android_toolchain_root/bin/$_binary_prefix-"
  android_readelf = "${android_tool_prefix}readelf"
  android_objcopy = "${android_tool_prefix}objcopy"
  android_gdbserver =
      "$android_ndk_root/prebuilt/$android_prebuilt_arch/gdbserver/gdbserver"

  android_sdk_tools_bundle_aapt2 = "${android_sdk_tools_bundle_aapt2_dir}/aapt2"
}
