aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-10-20 21:55:49 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-10-23 17:16:10 +0200
commitbb56762398a7852f5824b7f9a6435d88c7aa1045 (patch)
treede5574a7ed11fabe9a14030399c39450c500606b /src/main/java/com/google/devtools/build/lib/rules
parent121c6b16188b7e66b3ffb143b02ec0a8dd7ae71a (diff)
Expose a CcToolchainProvider that is generated by the legacy toolchain selection logic to skylark.
PiperOrigin-RevId: 172921818
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java4
2 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 2e6eee972c..230220b0bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -405,6 +405,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
CcToolchainProvider ccProvider =
new CcToolchainProvider(
+ getToolchainForSkylark(toolchainInfo),
cppConfiguration,
toolchain,
toolchainInfo,
@@ -487,6 +488,25 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
return builder.build();
}
+ private static String getSkylarkValueForTool(Tool tool, CppToolchainInfo cppToolchainInfo) {
+ PathFragment toolPath = cppToolchainInfo.getToolPathFragment(tool);
+ return toolPath != null ? toolPath.getPathString() : "";
+ }
+
+ private static ImmutableMap<String, Object> getToolchainForSkylark(
+ CppToolchainInfo cppToolchainInfo) {
+ return ImmutableMap.<String, Object>builder()
+ .put("objcopy_executable", getSkylarkValueForTool(Tool.OBJCOPY, cppToolchainInfo))
+ .put("compiler_executable", getSkylarkValueForTool(Tool.GCC, cppToolchainInfo))
+ .put("preprocessor_executable", getSkylarkValueForTool(Tool.CPP, cppToolchainInfo))
+ .put("nm_executable", getSkylarkValueForTool(Tool.NM, cppToolchainInfo))
+ .put("objdump_executable", getSkylarkValueForTool(Tool.OBJDUMP, cppToolchainInfo))
+ .put("ar_executable", getSkylarkValueForTool(Tool.AR, cppToolchainInfo))
+ .put("strip_executable", getSkylarkValueForTool(Tool.STRIP, cppToolchainInfo))
+ .put("ld_executable", getSkylarkValueForTool(Tool.LD, cppToolchainInfo))
+ .build();
+ }
+
private CToolchain getToolchainFromAttributes(
RuleContext ruleContext, CppConfiguration cppConfiguration) throws RuleErrorException {
for (String requiredAttr : ImmutableList.of("cpu", "compiler", "libc")) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index 7b1fa5e7f5..2f30b35c7e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -41,6 +41,7 @@ public final class CcToolchainProvider extends ToolchainInfo {
/** An empty toolchain to be returned in the error case (instead of null). */
public static final CcToolchainProvider EMPTY_TOOLCHAIN_IS_ERROR =
new CcToolchainProvider(
+ ImmutableMap.of(),
null,
null,
null,
@@ -102,6 +103,7 @@ public final class CcToolchainProvider extends ToolchainInfo {
@Nullable private final PathFragment sysroot;
public CcToolchainProvider(
+ ImmutableMap<String, Object> skylarkToolchain,
@Nullable CppConfiguration cppConfiguration,
CToolchain toolchain,
CppToolchainInfo toolchainInfo,
@@ -131,7 +133,7 @@ public final class CcToolchainProvider extends ToolchainInfo {
ImmutableMap<String, String> environment,
ImmutableList<PathFragment> builtInIncludeDirectories,
@Nullable PathFragment sysroot) {
- super(ImmutableMap.of(), Location.BUILTIN);
+ super(skylarkToolchain, Location.BUILTIN);
this.cppConfiguration = cppConfiguration;
this.toolchain = toolchain;
this.toolchainInfo = toolchainInfo;