diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2016-05-04 17:47:37 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-05-04 18:32:20 +0000 |
commit | 87a58589d6770a6e9a0f998274bfe69f1feb6014 (patch) | |
tree | b6c86c28738c5549c28edc62742499234c7d5641 /tools | |
parent | 8cb3f2bd61182ae08c5506802a6a849f4bf83d17 (diff) |
Rollback of commit b4549fe8dfb29f87fd37b38bf21a5b4bef818b12.
*** 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.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} "$@" |