aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/cpp/BUILD.tpl11
-rw-r--r--tools/cpp/cc_configure.bzl11
-rw-r--r--tools/cpp/osx_cc_configure.bzl6
-rw-r--r--tools/cpp/unix_cc_configure.bzl24
4 files changed, 33 insertions, 19 deletions
diff --git a/tools/cpp/BUILD.tpl b/tools/cpp/BUILD.tpl
index 8db745f06e..9f3fd764b5 100644
--- a/tools/cpp/BUILD.tpl
+++ b/tools/cpp/BUILD.tpl
@@ -32,6 +32,11 @@ filegroup(
srcs = ["cc_wrapper.sh"],
)
+filegroup(
+ name = "compiler_deps",
+ srcs = glob(["extra_tools/**"]) + ["%{cc_compiler_deps}"],
+)
+
# This is the entry point for --crosstool_top. Toolchains are found
# by lopping off the name of --crosstool_top and searching for
# the "${CPU}" entry in the toolchains attribute.
@@ -46,12 +51,12 @@ cc_toolchain_suite(
cc_toolchain(
name = "cc-compiler-%{name}",
- all_files = "%{cc_compiler_deps}",
- compiler_files = "%{cc_compiler_deps}",
+ all_files = ":compiler_deps",
+ compiler_files = ":compiler_deps",
cpu = "%{name}",
dwp_files = ":empty",
dynamic_runtime_libs = [":empty"],
- linker_files = "%{cc_compiler_deps}",
+ linker_files = ":compiler_deps",
objcopy_files = ":empty",
static_runtime_libs = [":empty"],
strip_files = ":empty",
diff --git a/tools/cpp/cc_configure.bzl b/tools/cpp/cc_configure.bzl
index b14b00e82c..610f5a7d54 100644
--- a/tools/cpp/cc_configure.bzl
+++ b/tools/cpp/cc_configure.bzl
@@ -19,7 +19,7 @@ load("@bazel_tools//tools/cpp:osx_cc_configure.bzl", "configure_osx_toolchain")
load("@bazel_tools//tools/cpp:unix_cc_configure.bzl", "configure_unix_toolchain")
load("@bazel_tools//tools/cpp:lib_cc_configure.bzl", "get_cpu_value")
-def _impl(repository_ctx):
+def cc_autoconf_impl(repository_ctx, overriden_tools = dict()):
repository_ctx.symlink(
Label("@bazel_tools//tools/cpp:dummy_toolchain.bzl"), "dummy_toolchain.bzl")
env = repository_ctx.os.environ
@@ -32,16 +32,17 @@ def _impl(repository_ctx):
repository_ctx.symlink(Label("@bazel_tools//tools/cpp:CROSSTOOL"), "CROSSTOOL")
repository_ctx.symlink(Label("@bazel_tools//tools/cpp:BUILD.static"), "BUILD")
elif cpu_value == "x64_windows":
+ # TODO(ibiryukov): overriden_tools are only supported in configure_unix_toolchain.
+ # We might want to add that to Windows too(at least for msys toolchain).
configure_windows_toolchain(repository_ctx)
elif (cpu_value == "darwin" and
("BAZEL_USE_CPP_ONLY_TOOLCHAIN" not in env or env["BAZEL_USE_CPP_ONLY_TOOLCHAIN"] != "1")):
- configure_osx_toolchain(repository_ctx)
+ configure_osx_toolchain(repository_ctx, overriden_tools)
else:
- configure_unix_toolchain(repository_ctx, cpu_value)
-
+ configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools)
cc_autoconf = repository_rule(
- implementation=_impl,
+ implementation = cc_autoconf_impl,
environ = [
"ABI_LIBC_VERSION",
"ABI_VERSION",
diff --git a/tools/cpp/osx_cc_configure.bzl b/tools/cpp/osx_cc_configure.bzl
index bac3c0dfc9..1c75c6e271 100644
--- a/tools/cpp/osx_cc_configure.bzl
+++ b/tools/cpp/osx_cc_configure.bzl
@@ -50,14 +50,14 @@ def _get_escaped_xcode_cxx_inc_directories(repository_ctx, cc, xcode_toolchains)
return include_dirs
-def configure_osx_toolchain(repository_ctx):
+def configure_osx_toolchain(repository_ctx, overriden_tools):
"""Configure C++ toolchain on macOS."""
xcode_toolchains = []
(xcode_toolchains, xcodeloc_err) = run_xcode_locator(
repository_ctx,
Label("@bazel_tools//tools/osx:xcode_locator.m"))
if xcode_toolchains:
- cc = find_cc(repository_ctx)
+ cc = find_cc(repository_ctx, overriden_tools = {})
tpl(repository_ctx, "osx_cc_wrapper.sh", {
"%{cc}": escape_string(str(cc)),
"%{env}": escape_string(get_env(repository_ctx))
@@ -95,4 +95,4 @@ def configure_osx_toolchain(repository_ctx):
Label("@bazel_tools//tools/osx/crosstool:CROSSTOOL.tpl"),
{"%{cxx_builtin_include_directory}": "\n".join(escaped_cxx_include_directories)})
else:
- configure_unix_toolchain(repository_ctx, cpu_value = "darwin")
+ configure_unix_toolchain(repository_ctx, cpu_value = "darwin", overriden_tools = overriden_tools)
diff --git a/tools/cpp/unix_cc_configure.bzl b/tools/cpp/unix_cc_configure.bzl
index e7c099eeed..1e5207145c 100644
--- a/tools/cpp/unix_cc_configure.bzl
+++ b/tools/cpp/unix_cc_configure.bzl
@@ -76,10 +76,15 @@ def _build_tool_path(d):
lines.append(" tool_path {name: \"%s\" path: \"%s\" }" % (k, escape_string(d[k])))
return "\n".join(lines)
+def _find_tool(repository_ctx, tool, overriden_tools):
+ """Find a tool for repository, taking overriden tools into account."""
+ if tool in overriden_tools:
+ return overriden_tools[tool]
+ return which(repository_ctx, tool, "/usr/bin/" + tool)
-def _get_tool_paths(repository_ctx, darwin, cc):
+def _get_tool_paths(repository_ctx, darwin, cc, overriden_tools):
"""Compute the path to the various tools. Doesn't %-escape the result!"""
- return {k: which(repository_ctx, k, "/usr/bin/" + k)
+ return {k: _find_tool(repository_ctx, k, overriden_tools)
for k in [
"ld",
"cpp",
@@ -351,9 +356,12 @@ def _coverage_feature(darwin):
}
"""
-
-def find_cc(repository_ctx):
+def find_cc(repository_ctx, overriden_tools):
"""Find the C++ compiler. Doesn't %-escape the result."""
+
+ if "gcc" in overriden_tools:
+ return overriden_tools["gcc"]
+
cc_name = "gcc"
cc_environ = repository_ctx.os.environ.get("CC")
cc_paren = ""
@@ -372,14 +380,14 @@ def find_cc(repository_ctx):
+ " environment variable") % cc_paren)
return cc
-
-def configure_unix_toolchain(repository_ctx, cpu_value):
+def configure_unix_toolchain(repository_ctx, cpu_value, overriden_tools):
"""Configure C++ toolchain on Unix platforms."""
repository_ctx.file("tools/cpp/empty.cc", "int main() {}")
darwin = cpu_value == "darwin"
- cc = find_cc(repository_ctx)
+ cc = find_cc(repository_ctx, overriden_tools)
tool_paths = _get_tool_paths(repository_ctx, darwin,
- "cc_wrapper.sh" if darwin else str(cc))
+ "cc_wrapper.sh" if darwin else str(cc),
+ overriden_tools)
crosstool_content = _crosstool_content(repository_ctx, cc, cpu_value, darwin)
opt_content = _opt_content(darwin)
dbg_content = _dbg_content()