aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cody Schroeder <schroederc@google.com>2015-06-11 22:27:01 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-06-12 11:52:12 +0000
commitfefd57cb089de4de75993130d03bf4f42fc797de (patch)
tree3c57180bd67fb07e39d9e528192060d7d424936a
parentdcddbd15ab41f0dcdfc609616f27adbf2cb647cc (diff)
Add link_flags and libs methods to the C++ Skylark API
-- MOS_MIGRATED_REVID=95783111
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
index 4506ee45d7..1840a35b44 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
@@ -14,8 +14,10 @@
package com.google.devtools.build.lib.rules.cpp;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.SkylarkApiProvider;
import com.google.devtools.build.lib.syntax.SkylarkCallable;
import com.google.devtools.build.lib.syntax.SkylarkModule;
@@ -40,4 +42,38 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider {
CppCompilationContext ccContext = getInfo().getProvider(CppCompilationContext.class);
return ccContext.getDeclaredIncludeSrcs();
}
+
+ @SkylarkCallable(
+ name = "libs",
+ structField = true,
+ doc =
+ "Returns the immutable set of libraries for either "
+ + "FULLY STATIC mode (linkopts=[\"-static\"]) or MOSTLY STATIC mode (linkstatic=1) "
+ + "(possibly empty but never None)")
+ public NestedSet<Artifact> getLibraries() {
+ NestedSetBuilder<Artifact> libs = NestedSetBuilder.linkOrder();
+ CcLinkParamsProvider ccLinkParams = getInfo().getProvider(CcLinkParamsProvider.class);
+ if (ccLinkParams == null) {
+ return libs.build();
+ }
+ for (LinkerInput lib : ccLinkParams.getCcLinkParams(true, false).getLibraries()) {
+ libs.add(lib.getArtifact());
+ }
+ return libs.build();
+ }
+
+ @SkylarkCallable(
+ name = "link_flags",
+ structField = true,
+ doc =
+ "Returns the immutable list of flags given to the C++ linker command for either "
+ + "FULLY STATIC mode (linkopts=[\"-static\"]) or MOSTLY STATIC mode (linkstatic=1) "
+ + "(possibly empty but never None)")
+ public ImmutableList<String> getLinkopts() {
+ CcLinkParamsProvider ccLinkParams = getInfo().getProvider(CcLinkParamsProvider.class);
+ if (ccLinkParams == null) {
+ return ImmutableList.of();
+ }
+ return ccLinkParams.getCcLinkParams(true, false).flattenedLinkopts();
+ }
}