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

# Logic separated out from config.gni so that it can be used by compiler.gni
# without introducing a circular dependency.

# 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.
assert(is_android || is_chromeos)

declare_args() {
  # Adds intrumentation to each function. Writes a file with the order that
  # functions are called at startup.
  use_order_profiling = false

  # Only effective if use_order_profiling = true. When this is true,
  # instrumentation switches from startup profiling after a delay, and
  # then waits for a devtools memory dump request to dump all
  # profiling information. When false, the same delay is used to switch from
  # startup, and then after a second delay all profiling information is dumped.
  # See base::android::orderfile::StartDelayedDump for more information.
  devtools_instrumentation_dumping = false

  # Only effective if use_order_profiling = true. When this is true the call
  # graph based instrumentation is used.
  use_call_graph = false

  # Build additional browser splits with HWASAN instrumentation enabled.
  build_hwasan_splits = false
}

assert(!devtools_instrumentation_dumping || use_order_profiling,
       "devtools_instrumentation_dumping requires use_order_profiling")
assert(!use_call_graph || use_order_profiling,
       "use_call_graph requires use_order_profiling")

if (current_cpu == "x86") {
  android_app_abi = "x86"
  android_abi_target = "i686-linux-android"
} else if (current_cpu == "arm") {
  import("//build/config/arm.gni")
  if (arm_version < 7) {
    android_app_abi = "armeabi"
  } else {
    android_app_abi = "armeabi-v7a"
  }
  android_abi_target = "arm-linux-androideabi"
} else if (current_cpu == "mipsel") {
  android_app_abi = "mips"
  android_abi_target = "mipsel-linux-android"
} else if (current_cpu == "x64") {
  android_app_abi = "x86_64"

  # Place holder for x64 support, not tested.
  # TODO: Enable clang support for Android x64. http://crbug.com/539781
  android_abi_target = "x86_64-linux-android"
} else if (current_cpu == "arm64") {
  android_app_abi = "arm64-v8a"
  android_abi_target = "aarch64-linux-android"
} else if (current_cpu == "mips64el") {
  android_app_abi = "mips64"

  # Place holder for mips64 support, not tested.
  android_abi_target = "mips64el-linux-android"
} else {
  assert(false, "Unknown Android ABI: " + current_cpu)
}

if (target_cpu == "arm64" || target_cpu == "x64" || target_cpu == "mips64el") {
  android_64bit_target_cpu = true
} else if (target_cpu == "arm" || target_cpu == "x86" ||
           target_cpu == "mipsel") {
  android_64bit_target_cpu = false
} else {
  assert(false, "Unknown target CPU: $target_cpu")
}

# Intentionally do not define android_app_secondary_abi_cpu and
# android_app_secondary_abi for 32-bit target_cpu, since they are not used.
if (target_cpu == "arm64") {
  android_secondary_abi_cpu = "arm"
  android_app_secondary_abi = "armeabi-v7a"
} else if (target_cpu == "x64") {
  android_secondary_abi_cpu = "x86"
  android_app_secondary_abi = "x86"
} else if (target_cpu == "mips64el") {
  android_secondary_abi_cpu = "mipsel"
  android_app_secondary_abi = "mips"
}

if (defined(android_secondary_abi_cpu)) {
  android_secondary_abi_toolchain =
      "//build/toolchain/android:android_clang_${android_secondary_abi_cpu}"
}
