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

default_clang_prefix =
    rebase_path("//prebuilt/third_party/clang/${host_platform}/bin",
                root_build_dir)

declare_args() {
  # The default clang toolchain provided by the prebuilt. This variable is
  # additionally consumed by the Go toolchain.
  clang_prefix = default_clang_prefix
}

if (current_cpu == "arm64") {
  clang_cpu = "aarch64"
} else if (current_cpu == "x64") {
  clang_cpu = "x86_64"
} else if (current_cpu == "wasm32") {
  clang_cpu = "wasm32"
} else {
  assert(false, "CPU not supported")
}

if (is_fuchsia) {
  clang_target = "${clang_cpu}-fuchsia"
} else if (is_linux) {
  clang_target = "${clang_cpu}-linux-gnu"
} else if (is_mac) {
  clang_target = "${clang_cpu}-apple-darwin"
} else if (current_cpu == "wasm32" && current_os == "unknown") {
  clang_target = "${clang_cpu}-unknown-unknown"
} else {
  assert(false, "OS not supported")
}

# TODO(phosek): this is inefficient, rather this should come from a JSON file.
clang_resource_dir =
    exec_script(rebase_path("$clang_prefix/clang", "", root_build_dir),
                [
                  "--target=$clang_target",
                  "-print-resource-dir",
                ],
                "trim string",
                [])
