# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
  # Directory where the GCC toolchain binaries ("gcc", "nm", etc.) are found.
  # This directory is expected to contain `aarch64-elf-*` and `x86_64-elf-*`
  # tools used to build for the Fuchsia targets.  This directory will not be
  # used for host tools.  If this is "", then a standard prebuilt is used.
  gcc_tool_dir = ""
}

# This is a string identifying the particular toolchain version in use.  Its
# only purpose is to be unique enough that it changes when switching to a new
# toolchain, so that recompilations with the new compiler can be triggered.
gcc_version_string = gcc_tool_dir

# TODO(https://fxbug.dev/42068125): The `gcc` prebuilt is missing for mac-arm64.
# This is currently not a blocker as Infra does not build with `gcc` on Mac,
# but a developer might want to some day.
if (host_platform != "mac-arm64") {
  _prebuilt_gcc_dir = "//prebuilt/third_party/gcc/$host_platform"

  _prebuilt_cipd_version =
      read_file("$_prebuilt_gcc_dir/.versions/gcc.cipd_version", "json")

  if (gcc_tool_dir == "") {
    gcc_tool_dir = "$_prebuilt_gcc_dir/bin"
    gcc_version_string = _prebuilt_cipd_version.instance_id
  }
}

ifs_extra_switches = []

# GNU linkers add these symbols which we want to exclude from abi tracking
# and shared object stub creation.
gnu_linker_synthetic_symbols = [
  "__bss_start",
  "_edata",
  "_end",
]

if (is_gcc) {
  foreach(symbol, gnu_linker_synthetic_symbols) {
    ifs_extra_switches += [ "--exclude=$symbol" ]
  }
}
