diff options
author | Cody Schroeder <schroederc@google.com> | 2015-06-11 22:27:01 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2015-06-12 11:52:12 +0000 |
commit | fefd57cb089de4de75993130d03bf4f42fc797de (patch) | |
tree | 3c57180bd67fb07e39d9e528192060d7d424936a /src/main/java/com/google | |
parent | dcddbd15ab41f0dcdfc609616f27adbf2cb647cc (diff) |
Add link_flags and libs methods to the C++ Skylark API
--
MOS_MIGRATED_REVID=95783111
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java | 36 |
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(); + } } |