# 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

  # Embed LLVM bitcode as .llvmbc section in ELF files. This is intended
  # primarily for external tools that use bitcode for analysis.
  clang_embed_bitcode = false
}

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}-unknown-fuchsia"
} else if (is_linux) {
  clang_target = "${clang_cpu}-unknown-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 if (current_os == "win") {
  clang_target = "${clang_cpu}-pc-windows-msvc"
} 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",
                [])

# We only provide dynamic runtime libs on Fuchsia.
if (is_fuchsia) {
  # TODO(fxbug.dev/57729): Get this information from runtime.json instead.
  clang_libunwind =
      exec_script(rebase_path("$clang_prefix/clang++", "", root_build_dir),
                  [
                    "--target=$clang_target",
                    "-print-file-name=libunwind.so",
                  ],
                  "trim string",
                  [])
}
