# 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 + "/rust/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
  }
}
