aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2016-05-04 17:47:37 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-05-04 18:32:20 +0000
commit87a58589d6770a6e9a0f998274bfe69f1feb6014 (patch)
treeb6c86c28738c5549c28edc62742499234c7d5641 /tools
parent8cb3f2bd61182ae08c5506802a6a849f4bf83d17 (diff)
*** Reason for rollback *** Rollforward with fixes: - Quote single-quote in the environment exports - Exclude the following environment variables: _ and dotted names - Add the wrapper to the dependency of the crosstool chain so it gets shipped to the sandbox. Hopefully after that we can cut a new release and have a homebrew package again #1177. *** Original change description *** Automated [] rollback of commit f1f24fc4b5aa83b7a4b872ec8f1c3a369799c081. *** Reason for rollback *** Broke ci.bazel.io See #1231. *** Original change description *** Ship the environment fixed at configure time to the C++ compiler Use a wrapper script on all platform to ship the environment to the C++ compiler. This should enable building with Homebrew special setup and will likely reduce the number of hard corner cases to solve. Should... *** -- MOS_MIGRATED_REVID=121497195
Diffstat (limited to 'tools')
-rw-r--r--tools/cpp/BUILD.tpl9
-rw-r--r--tools/cpp/cc_configure.bzl27
-rw-r--r--tools/cpp/linux_cc_wrapper.sh.tpl25
-rw-r--r--tools/cpp/osx_cc_wrapper.sh.tpl3
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} "$@"