diff options
author | 2017-10-20 21:55:49 +0200 | |
---|---|---|
committer | 2017-10-23 17:16:10 +0200 | |
commit | bb56762398a7852f5824b7f9a6435d88c7aa1045 (patch) | |
tree | de5574a7ed11fabe9a14030399c39450c500606b /src/main/java/com/google/devtools/build/lib/rules | |
parent | 121c6b16188b7e66b3ffb143b02ec0a8dd7ae71a (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.java | 20 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java | 4 |
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; |