cc_configure: use the wrapper only if on Darwin and ship the environment only if in homebrew This will fix the sandboxing issues for rules_rust and rules_go while still allowing to build inside homebrew. Should unblock #1238 Fixes bazelbuild/rules_go#20. Fixes bazelbuild/rules_rust#4. Tested under homebrew + classic tests. -- MOS_MIGRATED_REVID=121834186
diff --git a/tools/cpp/BUILD.tpl b/tools/cpp/BUILD.tpl index b7f5dd0..921e93a 100644 --- a/tools/cpp/BUILD.tpl +++ b/tools/cpp/BUILD.tpl
@@ -31,12 +31,12 @@ cc_toolchain( name = "cc-compiler-%{name}", - all_files = ":cc_wrapper", - compiler_files = ":cc_wrapper", + all_files = "%{cc_compiler_deps}", + compiler_files = "%{cc_compiler_deps}", cpu = "local", dwp_files = ":empty", dynamic_runtime_libs = [":empty"], - linker_files = ":cc_wrapper", + linker_files = "%{cc_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 18b8130..7f33475 100644 --- a/tools/cpp/cc_configure.bzl +++ b/tools/cpp/cc_configure.bzl
@@ -50,7 +50,7 @@ return default if result == None else str(result) -def _get_tool_paths(repository_ctx, darwin): +def _get_tool_paths(repository_ctx, darwin, cc): """Compute the path to the various tools.""" return {k: _which(repository_ctx, k, "/usr/bin/" + k) for k in [ @@ -63,7 +63,7 @@ "objdump", "strip", ]} + { - "gcc": "cc_wrapper.sh", + "gcc": cc, "ar": "/usr/bin/libtool" if darwin else _which(repository_ctx, "ar", "/usr/bin/ar") } @@ -299,13 +299,16 @@ def _get_env(repository_ctx): - """Convert the environment in a list of export.""" + """Convert the environment in a list of export if in Homebrew.""" 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 - ]) + if "HOMEBREW_RUBY_PATH" in env: + return "\n".join([ + "export %s='%s'" % (k, env[k].replace("'", "'\\''")) + for k in env + if k != "_" and k.find(".") == -1 + ]) + else: + return "" def _impl(repository_ctx): repository_ctx.file("tools/cpp/empty.cc") @@ -322,14 +325,15 @@ else: darwin = cpu_value == "darwin" cc = _find_cc(repository_ctx) - darwin = cpu_value == "darwin" - tool_paths = _get_tool_paths(repository_ctx, darwin) + tool_paths = _get_tool_paths(repository_ctx, darwin, + "cc_wrapper.sh" if darwin else str(cc)) 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" + "%{supports_param_files}": "0" if darwin else "1", + "%{cc_compiler_deps}": ":cc_wrapper" if darwin else ":empty", }) _tpl(repository_ctx, "osx_cc_wrapper.sh" if darwin else "linux_cc_wrapper.sh",