| # 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") |
| |
| _default_llvm_prefix = "" |
| _default_rust_prefix = "" |
| |
| # If Pigweed's CIPD environment setup was run, assume a LLVM toolchain and Rust |
| # compiler are present there. |
| if (defined(pw_env_setup_CIPD_PIGWEED)) { |
| _default_llvm_prefix = pw_env_setup_CIPD_PIGWEED + "/bin/" |
| _default_rust_prefix = pw_env_setup_CIPD_PIGWEED + "/bin/" |
| } |
| |
| declare_args() { |
| # This flag allows you to specify a prefix to use for 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. |
| # |
| # Pigweed toolchains should NOT override this variable so projects or users |
| # can control it via `.gn` or by setting it as a regular gn argument (e.g. |
| # `gn gen --args='pw_toolchain_CLANG_PREFIX=/path/to/my-llvm-'`). |
| # |
| # Examples: |
| # pw_toolchain_CLANG_PREFIX = "" |
| # command: "clang" (from PATH) |
| # |
| # pw_toolchain_CLANG_PREFIX = "my-" |
| # command: "my-clang" (from PATH) |
| # |
| # pw_toolchain_CLANG_PREFIX = "/bin/my-" |
| # command: "/bin/my-clang" (absolute path) |
| # |
| # pw_toolchain_CLANG_PREFIX = "//environment/clang_next/" |
| # command: "../environment/clang_next/clang" (relative path) |
| # |
| # GN templates should use `pw_toolchain_clang_tools.*` to get the intended |
| # command string rather than relying directly on pw_toolchain_CLANG_PREFIX. |
| # |
| # If the prefix begins with "//", it will be rebased to be relative to the |
| # root build directory. |
| pw_toolchain_CLANG_PREFIX = _default_llvm_prefix |
| |
| # This flag allows you to specify a prefix for rustc. |
| # |
| # This follows the same rules as pw_toolchain_CLANG_PREFIX, see above for |
| # more information. |
| # |
| # If the prefix begins with "//", it will be rebased to be relative to the |
| # root build directory. |
| pw_toolchain_RUST_PREFIX = _default_rust_prefix |
| } |
| |
| pw_toolchain_clang_tools = { |
| ar = "llvm-ar" |
| cc = "clang" |
| cxx = "clang++" |
| ld = cxx |
| llvm_cov = "llvm-cov" |
| llvm_profdata = "llvm-profdata" |
| rustc = "rustc" |
| |
| _toolchain_prefix = pw_toolchain_CLANG_PREFIX |
| if (_toolchain_prefix != "") { |
| # If the prefix is a GN-absolute path, rebase it so it's relative to the |
| # root of the build directory. |
| _split_prefix = string_split(_toolchain_prefix, "//") |
| if (_split_prefix[0] == "") { |
| _toolchain_prefix = rebase_path(_toolchain_prefix, root_build_dir) |
| } |
| if (host_os == "win") { |
| _toolchain_prefix = "./" + _toolchain_prefix |
| _toolchain_prefix = string_replace(_toolchain_prefix, "/", "\\") |
| } |
| ar = _toolchain_prefix + ar |
| cc = _toolchain_prefix + cc |
| cxx = _toolchain_prefix + cxx |
| ld = _toolchain_prefix + ld |
| llvm_cov = _toolchain_prefix + llvm_cov |
| llvm_profdata = _toolchain_prefix + llvm_profdata |
| } |
| |
| _rust_prefix = pw_toolchain_RUST_PREFIX |
| if (host_os == "win") { |
| _rust_prefix = string_replace(_rust_prefix, "/", "\\") |
| } |
| if (_rust_prefix != "") { |
| # If the prefix is a GN-absolute path, rebase it so it's relative to the |
| # root of the build directory. |
| _split_rust_prefix = string_split(_rust_prefix, "//") |
| if (_split_rust_prefix[0] == "") { |
| _rust_prefix = rebase_path(_rust_prefix, root_build_dir) |
| } |
| rustc = _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 |
| } |
| } |