# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import("//build_overrides/pigweed.gni")
import("//build_overrides/pigweed_environment.gni")
import("$dir_pw_toolchain/rbe.gni")

declare_args() {
  # This flag allows you to specify the root directory of the clang, clang++,
  # and llvm-ar binaries to use when compiling with a clang-based toolchain.
  # This is useful for debugging toolchain-related issues by building with an
  # externally-provided toolchain.
  pw_toolchain_CLANG_PREFIX =
      rebase_path(pw_env_setup_CIPD_PIGWEED + "/bin/", root_build_dir)

  # This flag allows you to specify the root directory of the rustc binary.
  pw_toolchain_RUST_PREFIX =
      rebase_path(pw_env_setup_CIPD_PIGWEED + "/bin/", root_build_dir)
}

pw_toolchain_clang_tools = {
  ar = "llvm-ar"
  cc = "clang"
  cxx = "clang++"
  ld = cxx
  rustc = "rustc"

  if (pw_toolchain_CLANG_PREFIX != "") {
    ar = pw_toolchain_CLANG_PREFIX + ar
    cc = pw_toolchain_CLANG_PREFIX + cc
    cxx = pw_toolchain_CLANG_PREFIX + cxx
    ld = pw_toolchain_CLANG_PREFIX + ld
  }

  if (pw_toolchain_RUST_PREFIX != "") {
    rustc = pw_toolchain_RUST_PREFIX + rustc
  }

  if (pw_toolchain_USE_RBE) {
    _rbe_debug_flag = ""
    if (pw_toolchain_RBE_DEBUG) {
      _rbe_debug_flag = " -v"
    }
    _exec_root = rebase_path("//")
    _rewrapper_binary = "rewrapper"
    _pw_rbe_config = pw_rbe_clang_config
    _rbe_toolchain_prefix =
        _rewrapper_binary +
        " --labels=type=compile,lang=cpp,compiler=clang --cfg=" +
        _pw_rbe_config + " --exec_root=" + _exec_root + " -- "

    cc = _rbe_toolchain_prefix + cc + _rbe_debug_flag
    cxx = _rbe_toolchain_prefix + cxx + _rbe_debug_flag
  }
}
