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

# Toolchain-related configuration that may be needed outside the context of the
# toolchain() rules themselves.

import("//build/config/chrome_build.gni")
import("//build_overrides/build.gni")

declare_args() {
  # If this is set to true, or if LLVM_FORCE_HEAD_REVISION is set to 1
  # in the environment, we use the revision in the llvm repo to determine
  # the CLANG_REVISION to use, instead of the version hard-coded into
  # //tools/clang/scripts/update.py. This should only be used in
  # conjunction with setting LLVM_FORCE_HEAD_REVISION in the
  # environment when `gclient runhooks` is run as well.
  llvm_force_head_revision = false

  # Compile with Xcode version of clang instead of hermetic version shipped
  # with the build. Used to be used iOS for official builds, but is now off by
  # default for all configurations.
  use_xcode_clang = false

  # Used for binary size analysis.
  generate_linker_map = is_android && is_official_build
}

if (generate_linker_map) {
  assert(
      is_official_build,
      "Linker map files should only be generated when is_official_build = true")
  assert(current_os == "android" || current_os == "linux" ||
             target_os == "android" || target_os == "linux" ||
             target_os == "chromeos",
         "Linker map files should only be generated for Android, Linux, " +
             "or ChromeOS.")
}

declare_args() {
  if (is_clang) {
    # Clang compiler version. Clang files are placed at version-dependent paths.
    clang_version = "11.0.0"
  }
}

# Check target_os here instead of is_ios as this file is loaded for secondary
# toolchain (host toolchain in particular) but the argument is the same for
# all toolchains.
assert(!use_xcode_clang || target_os == "ios",
       "Using Xcode's clang is only supported in iOS builds")

# Extension for shared library files (including leading dot).
if (is_mac || is_ios) {
  shlib_extension = ".dylib"
} else if (is_android && is_component_build) {
  # By appending .cr, we prevent name collisions with libraries already
  # loaded by the Android zygote.
  shlib_extension = ".cr.so"
} else if (is_posix || is_fuchsia) {
  shlib_extension = ".so"
} else if (is_win) {
  shlib_extension = ".dll"
} else {
  assert(false, "Platform not supported")
}

# Prefix for shared library files.
if (is_posix || is_fuchsia) {
  shlib_prefix = "lib"
} else {
  shlib_prefix = ""
}

# Directory for shared library files.
if (is_fuchsia) {
  shlib_subdir = "/lib"
} else {
  shlib_subdir = ""
}

# While other "tool"s in a toolchain are specific to the target of that
# toolchain, the "stamp" and "copy" tools are really generic to the host;
# but each toolchain must define them separately.  GN doesn't allow a
# template instantiation inside a toolchain definition, so some boilerplate
# has to be repeated in each toolchain to define these two tools.  These
# four variables reduce the duplication in that boilerplate.
stamp_description = "STAMP {{output}}"
copy_description = "COPY {{source}} {{output}}"
if (host_os == "win") {
  _tool_wrapper_path =
      rebase_path("//build/toolchain/win/tool_wrapper.py", root_build_dir)

  stamp_command = "cmd /c type nul > \"{{output}}\""
  copy_command =
      "$python_path $_tool_wrapper_path recursive-mirror {{source}} {{output}}"
} else {
  stamp_command = "touch {{output}}"
  copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
}

# This variable is true if the current toolchain is one of the target
# toolchains, i.e. a toolchain which is being used to build the main Chrome
# binary. This generally means "not the host toolchain", but in the case where
# we're targeting the host it's true then as well. We do require current_os to
# match target_os so that for example we avoid considering Android as a target
# toolchain when targeting CrOS.
is_a_target_toolchain =
    (current_toolchain != host_toolchain ||
     default_toolchain == host_toolchain) && current_os == target_os
