# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/mac/mac_sdk.gni")
import("//build/config/v8_target_cpu.gni")
import("//build/toolchain/apple/toolchain.gni")
import("//build_overrides/build.gni")

# Specialisation of the apple_toolchain template to declare the toolchain
# and its tools to build target for macOS platform.
template("mac_toolchain") {
  assert(defined(invoker.toolchain_args),
         "Toolchains must declare toolchain_args")

  apple_toolchain(target_name) {
    forward_variables_from(invoker, "*", [ "toolchain_args" ])

    bin_path = mac_bin_path

    toolchain_args = {
      forward_variables_from(invoker.toolchain_args, "*")
      current_os = "mac"

      if (target_os == "ios") {
        # Use LLD for the host part of a chrome/ios build.
        use_lld = true

        # Override `is_component_build` for the host toolchain.
        # See https://crbug.com/gn/286 for details why this is
        # required.
        is_component_build = is_debug

        # Defined in //base, would trigger a warning if the build doesn't depend
        # on it.
        if (build_with_chromium) {
          # cronet disable this because it targets 32-bit,
          # enable it unconditionally for the host toolchain.
          use_allocator_shim = true
        }

        # TODO(crbug.com/753445): the use_sanitizer_coverage arg is currently
        # not supported by the Chromium mac_clang_x64 toolchain on iOS
        # distribution.
        use_sanitizer_coverage = false
      }
    }
  }
}

mac_toolchain("clang_arm") {
  toolchain_args = {
    current_cpu = "arm"
  }
}

mac_toolchain("clang_arm64") {
  toolchain_args = {
    current_cpu = "arm64"
  }
}

mac_toolchain("clang_x64") {
  toolchain_args = {
    current_cpu = "x64"
  }
}

mac_toolchain("clang_x86") {
  toolchain_args = {
    current_cpu = "x86"
  }
}

mac_toolchain("clang_x86_v8_arm") {
  toolchain_args = {
    current_cpu = "x86"
    v8_current_cpu = "arm"
  }
}

mac_toolchain("clang_x86_v8_mipsel") {
  toolchain_args = {
    current_cpu = "x86"
    v8_current_cpu = "mipsel"
  }
}

mac_toolchain("clang_x64_v8_arm64") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "arm64"
  }
}

mac_toolchain("clang_x64_v8_mips64el") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "mips64el"
  }
}

mac_toolchain("clang_arm64_v8_x64") {
  toolchain_args = {
    current_cpu = "arm64"
    v8_current_cpu = "x64"
  }
}

# Needed to run v8 on the host during a arm64 -> x86_64 cross-build
mac_toolchain("clang_arm64_v8_arm64") {
  toolchain_args = {
    current_cpu = "arm64"
    v8_current_cpu = "arm64"
  }
}
