aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-04-20 10:41:36 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-04-20 11:09:45 +0200
commit28c9617d53bf58dcba9572bcfdc165c62421d983 (patch)
tree487fc901a408f8e9790074f6d709d94f83ac1038 /src/main/java/com/google/devtools/build/lib/rules/cpp
parentdd99e4b9b4c9640ec5e9b9363282e547dd90a399 (diff)
Allow Skylark rule to declare a dependency on the C++ toolchain and make the list of built-in include directories available to Skylark through it.
RELNOTES: None. PiperOrigin-RevId: 153684976
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java35
2 files changed, 38 insertions, 8 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 9cb154f3db..c4d3abc469 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
@@ -229,14 +229,15 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
getBuiltinIncludes(ruleContext),
coverageEnvironment.build(),
ruleContext.getPrerequisiteArtifact("$link_dynamic_library_tool", Mode.HOST),
- getEnvironment(ruleContext));
+ getEnvironment(ruleContext),
+ cppConfiguration.getBuiltInIncludeDirectories());
RuleConfiguredTargetBuilder builder =
new RuleConfiguredTargetBuilder(ruleContext)
- .add(CcToolchainProvider.class, provider)
- .add(FdoSupportProvider.class,
- fdoSupport.getFdoSupport().createFdoSupportProvider(ruleContext))
+ .addProvider(provider)
+ .addNativeDeclaredProvider(provider)
+ .addProvider(fdoSupport.getFdoSupport().createFdoSupportProvider(ruleContext))
.setFilesToBuild(new NestedSetBuilder<Artifact>(Order.STABLE_ORDER).build())
- .add(RunfilesProvider.class, RunfilesProvider.simple(Runfiles.EMPTY));
+ .addProvider(RunfilesProvider.simple(Runfiles.EMPTY));
// If output_license is specified on the cc_toolchain rule, override the transitive licenses
// with that one. This is necessary because cc_toolchain is used in the target configuration,
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 498822161f..d441cf84a9 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
@@ -22,6 +22,11 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -31,8 +36,18 @@ import javax.annotation.Nullable;
/**
* Information about a C++ compiler used by the <code>cc_*</code> rules.
*/
+@SkylarkModule(
+ name = "CcToolchainInfo",
+ doc = "Information about the C++ compiler being used."
+)
@Immutable
-public final class CcToolchainProvider implements TransitiveInfoProvider {
+public final class CcToolchainProvider
+ extends SkylarkClassObject implements TransitiveInfoProvider {
+ public static final String SKYLARK_NAME = "CcToolchainInfo";
+
+ public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor(SKYLARK_NAME) {};
+
/** An empty toolchain to be returned in the error case (instead of null). */
public static final CcToolchainProvider EMPTY_TOOLCHAIN_IS_ERROR =
new CcToolchainProvider(
@@ -59,7 +74,8 @@ public final class CcToolchainProvider implements TransitiveInfoProvider {
ImmutableList.<Artifact>of(),
NestedSetBuilder.<Pair<String, String>>emptySet(Order.COMPILE_ORDER),
null,
- ImmutableMap.<String, String>of());
+ ImmutableMap.<String, String>of(),
+ ImmutableList.<PathFragment>of());
@Nullable private final CppConfiguration cppConfiguration;
private final NestedSet<Artifact> crosstool;
@@ -85,6 +101,7 @@ public final class CcToolchainProvider implements TransitiveInfoProvider {
private final NestedSet<Pair<String, String>> coverageEnvironment;
@Nullable private final Artifact linkDynamicLibraryTool;
private final ImmutableMap<String, String> environment;
+ private final ImmutableList<PathFragment> builtInIncludeDirectories;
public CcToolchainProvider(
@Nullable CppConfiguration cppConfiguration,
@@ -110,7 +127,9 @@ public final class CcToolchainProvider implements TransitiveInfoProvider {
ImmutableList<Artifact> builtinIncludeFiles,
NestedSet<Pair<String, String>> coverageEnvironment,
Artifact linkDynamicLibraryTool,
- ImmutableMap<String, String> environment) {
+ ImmutableMap<String, String> environment,
+ ImmutableList<PathFragment> builtInIncludeDirectories) {
+ super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of());
this.cppConfiguration = cppConfiguration;
this.crosstool = Preconditions.checkNotNull(crosstool);
this.crosstoolMiddleman = Preconditions.checkNotNull(crosstoolMiddleman);
@@ -135,6 +154,16 @@ public final class CcToolchainProvider implements TransitiveInfoProvider {
this.coverageEnvironment = coverageEnvironment;
this.linkDynamicLibraryTool = linkDynamicLibraryTool;
this.environment = environment;
+ this.builtInIncludeDirectories = builtInIncludeDirectories;
+ }
+
+ @SkylarkCallable(
+ name = "built_in_include_directories",
+ doc = "Returns the list of built-in directories of the compiler.",
+ structField = true
+ )
+ public ImmutableList<PathFragment> getBuiltInIncludeDirectories() {
+ return builtInIncludeDirectories;
}
/**