# 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" || target_os == "linux",
         "Linker map files should only be generated for Android and Linux")
}

declare_args() {
  if (is_clang) {
    # Clang compiler version. Clang files are placed at version-dependent paths.
    clang_version = "10.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}})"
}
