Skip to content

Commit

Permalink
Ship the environment fixed at configure time to the C++ compiler
Browse files Browse the repository at this point in the history
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 unblock #1177.

--
Change-Id: I36f09edaf131f65c730bdd626ce521478ff587c7
Reviewed-on: https://bazel-review.googlesource.com/3560
MOS_MIGRATED_REVID=121462120
  • Loading branch information
damienmg committed May 4, 2016
1 parent be13f9f commit f1f24fc
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 7 deletions.
23 changes: 16 additions & 7 deletions tools/cpp/cc_configure.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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 [
Expand All @@ -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")
}
Expand Down Expand Up @@ -289,13 +289,20 @@ 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]) for k in env])

def _impl(repository_ctx):
repository_ctx.file("tools/cpp/empty.cc")
cpu_value = _get_cpu_value(repository_ctx)
Expand All @@ -311,17 +318,19 @@ 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()
_tpl(repository_ctx, "BUILD", {
"%{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" +
Expand Down
25 changes: 25 additions & 0 deletions tools/cpp/linux_cc_wrapper.sh.tpl
Original file line number Diff line number Diff line change
@@ -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} "$@"
3 changes: 3 additions & 0 deletions tools/cpp/osx_cc_wrapper.sh.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ for i in "$@"; do
fi
done

# Set-up the environment
%{env}

# Call the C++ compiler
%{cc} "$@"

Expand Down

0 comments on commit f1f24fc

Please sign in to comment.