diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/cpp/BUILD.tpl | 9 | ||||
-rw-r--r-- | tools/cpp/cc_configure.bzl | 27 | ||||
-rw-r--r-- | tools/cpp/linux_cc_wrapper.sh.tpl | 25 | ||||
-rw-r--r-- | tools/cpp/osx_cc_wrapper.sh.tpl | 3 |
4 files changed, 55 insertions, 9 deletions
diff --git a/tools/cpp/BUILD.tpl b/tools/cpp/BUILD.tpl index 036c7ec85c..a67d0495e0 100644 --- a/tools/cpp/BUILD.tpl +++ b/tools/cpp/BUILD.tpl @@ -13,6 +13,11 @@ filegroup( srcs = [], ) +filegroup( + name = "cc_wrapper", + srcs = ["cc_wrapper.sh"], +) + # 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. @@ -27,11 +32,11 @@ cc_toolchain_suite( cc_toolchain( name = "cc-compiler-%{name}", all_files = ":empty", - compiler_files = ":empty", + compiler_files = ":cc_wrapper", cpu = "local", dwp_files = ":empty", dynamic_runtime_libs = [":empty"], - linker_files = ":empty", + linker_files = ":cc_wrapper", 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 1250d2357d..18b8130c4f 100644 --- a/tools/cpp/cc_configure.bzl +++ b/tools/cpp/cc_configure.bzl @@ -50,7 +50,7 @@ def _which(repository_ctx, cmd, default): return default if result == None else str(result) -def _get_tool_paths(repository_ctx, darwin, cc): +def _get_tool_paths(repository_ctx, darwin): """Compute the path to the various tools.""" return {k: _which(repository_ctx, k, "/usr/bin/" + k) for k in [ @@ -63,7 +63,7 @@ def _get_tool_paths(repository_ctx, darwin, cc): "objdump", "strip", ]} + { - "gcc": cc, + "gcc": "cc_wrapper.sh", "ar": "/usr/bin/libtool" if darwin else _which(repository_ctx, "ar", "/usr/bin/ar") } @@ -289,13 +289,24 @@ def _find_cc(repository_ctx): return cc -def _tpl(repository_ctx, tpl, substitutions={}): +def _tpl(repository_ctx, tpl, substitutions={}, out=None): + if not out: + out = tpl repository_ctx.template( - tpl, + out, Label("@bazel_tools//tools/cpp:%s.tpl" % tpl), substitutions) +def _get_env(repository_ctx): + """Convert the environment in a list of export.""" + env = repository_ctx.os.environ + return "\n".join([ + "export %s='%s'" % (k, env[k].replace("'", "'\\''")) + for k in env + if k != "_" and k.find(".") == -1 + ]) + def _impl(repository_ctx): repository_ctx.file("tools/cpp/empty.cc") cpu_value = _get_cpu_value(repository_ctx) @@ -311,9 +322,8 @@ def _impl(repository_ctx): else: darwin = cpu_value == "darwin" cc = _find_cc(repository_ctx) - crosstool_cc = "osx_cc_wrapper.sh" if darwin else str(cc) darwin = cpu_value == "darwin" - tool_paths = _get_tool_paths(repository_ctx, darwin, crosstool_cc) + tool_paths = _get_tool_paths(repository_ctx, darwin) crosstool_content = _crosstool_content(repository_ctx, cc, cpu_value, darwin) opt_content = _opt_content(darwin) dbg_content = _dbg_content() @@ -321,7 +331,10 @@ def _impl(repository_ctx): "%{name}": cpu_value, "%{supports_param_files}": "0" if darwin else "1" }) - _tpl(repository_ctx, "osx_cc_wrapper.sh", {"%{cc}": str(cc)}) + _tpl(repository_ctx, + "osx_cc_wrapper.sh" if darwin else "linux_cc_wrapper.sh", + {"%{cc}": str(cc), "%{env}": _get_env(repository_ctx)}, + "cc_wrapper.sh") _tpl(repository_ctx, "CROSSTOOL", { "%{cpu}": cpu_value, "%{content}": _build_crosstool(crosstool_content) + "\n" + diff --git a/tools/cpp/linux_cc_wrapper.sh.tpl b/tools/cpp/linux_cc_wrapper.sh.tpl new file mode 100644 index 0000000000..a83be50655 --- /dev/null +++ b/tools/cpp/linux_cc_wrapper.sh.tpl @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Copyright 2015 The Bazel Authors. All rights reserved. +# +# 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 +# +# http://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. +# +# Ship the environment to the C++ action +# +set -eu + +# Set-up the environment +%{env} + +# Call the C++ compiler +%{cc} "$@" diff --git a/tools/cpp/osx_cc_wrapper.sh.tpl b/tools/cpp/osx_cc_wrapper.sh.tpl index 5e66680f6a..5ea4b52c1b 100644 --- a/tools/cpp/osx_cc_wrapper.sh.tpl +++ b/tools/cpp/osx_cc_wrapper.sh.tpl @@ -52,6 +52,9 @@ for i in "$@"; do fi done +# Set-up the environment +%{env} + # Call the C++ compiler %{cc} "$@" |