aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2018-07-16 01:11:04 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-16 01:12:34 -0700
commite14a7d4f156c28244a491c65083273f57734cdbe (patch)
tree63bae469d108c3d89d80c29013358dd0830f3f6e /src/main/java/com/google
parenta567777889fd0abc6c31818054ed18eaa918e1fe (diff)
C++: New functionality exposed to Skylark for external libs.
- CcLinkingInfo has a getter for CcLinkParams. - Artifacts and linkopts of CcLinkParams are accessible. - CcCompilationInfo constructor now accepts defines and include dirs. - CcCompilation now has getters for headers, defines and include dirs. CcCompiilationInfo( headers=depset([Artifacts]), defines=depset([Strings]), include_dirs=depet([Strings]) CcCompilationInfo.headers CcCompilationInfo.defines CcCompilationInfo.include_dirs -- cc_common.merge([CcLinkingInfos]) returns CcLinkingInfo -- CcLinkingInfo.static_shared_params CcLinkingInfo.static_no_shared_params CcLinkingInfo.no_static_shared_params CcLinkingInfo.no_static_no_shared_params -- CcLinkParams.libraries CcLinkParams.linkopts CcLinkParams.dynamic_libraries_for_runtime RELNOTES:none PiperOrigin-RevId: 204700779
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/AbstractCcLinkParamsStore.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java67
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java64
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsApi.java25
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java28
11 files changed, 266 insertions, 62 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/AbstractCcLinkParamsStore.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/AbstractCcLinkParamsStore.java
index 2849d55e0c..ec9ece078d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/AbstractCcLinkParamsStore.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/AbstractCcLinkParamsStore.java
@@ -47,10 +47,10 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.
* </pre>
*/
public abstract class AbstractCcLinkParamsStore {
- protected CcLinkParams staticSharedParams;
- protected CcLinkParams staticNoSharedParams;
- protected CcLinkParams noStaticSharedParams;
- protected CcLinkParams noStaticNoSharedParams;
+ protected CcLinkParams staticModeParamsForDynamicLibrary;
+ protected CcLinkParams staticModeParamsForExecutable;
+ protected CcLinkParams dynamicModeParamsForDynamicLibrary;
+ protected CcLinkParams dynamicModeParamsForExecutable;
private CcLinkParams compute(boolean linkingStatically, boolean linkShared) {
CcLinkParams.Builder builder = CcLinkParams.builder(linkingStatically, linkShared);
@@ -76,9 +76,9 @@ public abstract class AbstractCcLinkParamsStore {
private CcLinkParams lookup(boolean linkingStatically, boolean linkShared) {
if (linkingStatically) {
- return linkShared ? staticSharedParams : staticNoSharedParams;
+ return linkShared ? staticModeParamsForDynamicLibrary : staticModeParamsForExecutable;
} else {
- return linkShared ? noStaticSharedParams : noStaticNoSharedParams;
+ return linkShared ? dynamicModeParamsForDynamicLibrary : dynamicModeParamsForExecutable;
}
}
@@ -86,15 +86,15 @@ public abstract class AbstractCcLinkParamsStore {
Preconditions.checkNotNull(params);
if (linkingStatically) {
if (linkShared) {
- staticSharedParams = params;
+ staticModeParamsForDynamicLibrary = params;
} else {
- staticNoSharedParams = params;
+ staticModeParamsForExecutable = params;
}
} else {
if (linkShared) {
- noStaticSharedParams = params;
+ dynamicModeParamsForDynamicLibrary = params;
} else {
- noStaticNoSharedParams = params;
+ dynamicModeParamsForExecutable = params;
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index 02c2c184d6..492131bfdd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -483,19 +483,6 @@ public final class CcCompilationContext implements CcCompilationContextApi {
}
/**
- * Add multiple include directories to be added with "-I". These can be
- * either relative to the exec root (see {@link
- * com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot}) or absolute. The
- * entries are normalized before they are stored.
- */
- public Builder addIncludeDirs(Iterable<PathFragment> includeDirs) {
- for (PathFragment includeDir : includeDirs) {
- addIncludeDir(includeDir);
- }
- return this;
- }
-
- /**
* Add a single include directory to be added with "-iquote". It can be
* either relative to the exec root (see {@link
* com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot}) or absolute. Before it
@@ -507,13 +494,12 @@ public final class CcCompilationContext implements CcCompilationContextApi {
}
/**
- * Add a single include directory to be added with "-isystem". It can be
- * either relative to the exec root (see {@link
- * com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot}) or absolute. Before it
- * is stored, the include directory is normalized.
+ * Add a single include directory to be added with "-isystem". It can be either relative to the
+ * exec root (see {@link com.google.devtools.build.lib.analysis.BlazeDirectories#getExecRoot})
+ * or absolute. Before it is stored, the include directory is normalized.
*/
- public Builder addSystemIncludeDir(PathFragment systemIncludeDir) {
- systemIncludeDirs.add(systemIncludeDir);
+ public Builder addSystemIncludeDirs(Iterable<PathFragment> systemIncludeDirs) {
+ Iterables.addAll(this.systemIncludeDirs, systemIncludeDirs);
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index f82782f6d4..09ea9f6596 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -939,9 +939,8 @@ public final class CcCompilationHelper {
ccCompilationContextBuilder.addQuoteIncludeDir(
ruleContext.getConfiguration().getBinFragment().getRelative(repositoryPath));
- for (PathFragment systemIncludeDir : systemIncludeDirs) {
- ccCompilationContextBuilder.addSystemIncludeDir(systemIncludeDir);
- }
+ ccCompilationContextBuilder.addSystemIncludeDirs(systemIncludeDirs);
+
for (PathFragment includeDir : includeDirs) {
ccCompilationContextBuilder.addIncludeDir(includeDir);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
index 0e540b6106..d6806ad487 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java
@@ -21,6 +21,8 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AnalysisUtils;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+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.events.Location;
import com.google.devtools.build.lib.packages.NativeInfo;
@@ -34,6 +36,8 @@ import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.SkylarkType;
+import com.google.devtools.build.lib.vfs.PathFragment;
+import java.util.Collection;
import javax.annotation.Nullable;
/** Wrapper for every C++ compilation provider. */
@@ -48,9 +52,14 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
/* numMandatoryNamedOnly= */ 0,
/* starArg= */ false,
/* kwArg= */ false,
- "headers"),
- /* defaultValues= */ ImmutableList.of(Runtime.NONE),
- /* types= */ ImmutableList.of(SkylarkType.of(SkylarkNestedSet.class)));
+ "headers",
+ "system_includes",
+ "defines"),
+ /* defaultValues= */ ImmutableList.of(Runtime.NONE, Runtime.NONE, Runtime.NONE),
+ /* types= */ ImmutableList.of(
+ SkylarkType.of(SkylarkNestedSet.class),
+ SkylarkType.of(SkylarkNestedSet.class),
+ SkylarkType.of(SkylarkNestedSet.class)));
@Nullable
private static Object nullIfNone(Object object) {
@@ -71,12 +80,27 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
Object[] args, Environment env, Location loc) throws EvalException {
CcCommon.checkLocationWhitelisted(loc);
CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create();
- SkylarkNestedSet headers = (SkylarkNestedSet) nullIfNone(args[0]);
CcCompilationContext.Builder ccCompilationContext =
new CcCompilationContext.Builder(/* ruleContext= */ null);
+ int i = 0;
+ SkylarkNestedSet headers = (SkylarkNestedSet) nullIfNone(args[i++]);
if (headers != null) {
ccCompilationContext.addDeclaredIncludeSrcs(headers.getSet(Artifact.class));
}
+ SkylarkNestedSet systemIncludes = (SkylarkNestedSet) nullIfNone(args[i++]);
+ if (systemIncludes != null) {
+ ccCompilationContext.addSystemIncludeDirs(
+ systemIncludes
+ .getSet(String.class)
+ .toList()
+ .stream()
+ .map(x -> PathFragment.create(x))
+ .collect(ImmutableList.toImmutableList()));
+ }
+ SkylarkNestedSet defines = (SkylarkNestedSet) nullIfNone(args[i++]);
+ if (defines != null) {
+ ccCompilationContext.addDefines(defines.getSet(String.class));
+ }
ccCompilationInfoBuilder.setCcCompilationContext(ccCompilationContext.build());
return ccCompilationInfoBuilder.build();
}
@@ -91,6 +115,41 @@ public final class CcCompilationInfo extends NativeInfo implements CcCompilation
this.ccCompilationContext = ccCompilationContext;
}
+ public static CcCompilationInfo merge(Collection<CcCompilationInfo> ccCompilationInfos) {
+ CcCompilationContext.Builder builder =
+ new CcCompilationContext.Builder(/* ruleContext= */ null);
+ builder.mergeDependentCcCompilationContexts(
+ ccCompilationInfos
+ .stream()
+ .map(CcCompilationInfo::getCcCompilationContext)
+ .collect(ImmutableList.toImmutableList()));
+ return (new CcCompilationInfo.Builder()).setCcCompilationContext(builder.build()).build();
+ }
+
+ @Override
+ public SkylarkNestedSet getSkylarkDefines() {
+ return SkylarkNestedSet.of(
+ String.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, ccCompilationContext.getDefines()));
+ }
+
+ @Override
+ public SkylarkNestedSet getSkylarkHeaders() {
+ return SkylarkNestedSet.of(Artifact.class, ccCompilationContext.getDeclaredIncludeSrcs());
+ }
+
+ @Override
+ public SkylarkNestedSet getSkylarkDeclaredIncludeDirs() {
+ return SkylarkNestedSet.of(
+ String.class,
+ NestedSetBuilder.wrap(
+ Order.STABLE_ORDER,
+ ccCompilationContext
+ .getSystemIncludeDirs()
+ .stream()
+ .map(PathFragment::getPathString)
+ .collect(ImmutableList.toImmutableList())));
+ }
+
public CcCompilationContext getCcCompilationContext() {
return ccCompilationContext;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
index 44bc16eb8c..dc94c49408 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
@@ -30,6 +30,7 @@ import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsApi;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import java.util.Collection;
import java.util.Objects;
import javax.annotation.Nullable;
@@ -106,6 +107,14 @@ public final class CcLinkParams implements CcLinkParamsApi {
return ImmutableList.copyOf(Iterables.concat(Iterables.transform(linkOpts, LinkOptions::get)));
}
+ @Override
+ public SkylarkNestedSet getSkylarkLinkopts() {
+ // TODO(plf): Shouldn't flatten nested set. Remove LinkOptions class and just have a nested set
+ // of strings.
+ return SkylarkNestedSet.of(
+ String.class, NestedSetBuilder.wrap(Order.COMPILE_ORDER, flattenedLinkopts()));
+ }
+
/**
* Returns the linkstamps
*/
@@ -120,11 +129,21 @@ public final class CcLinkParams implements CcLinkParamsApi {
return libraries;
}
+ @Override
+ public SkylarkNestedSet getSkylarkLibrariesToLink() {
+ return SkylarkNestedSet.of(LibraryToLink.class, libraries);
+ }
+
/** Returns the dynamicLibrariesForRuntime. */
public NestedSet<Artifact> getDynamicLibrariesForRuntime() {
return dynamicLibrariesForRuntime;
}
+ @Override
+ public SkylarkNestedSet getSkylarkDynamicLibrariesForRuntime() {
+ return SkylarkNestedSet.of(Artifact.class, dynamicLibrariesForRuntime);
+ }
+
/**
* The extra link time libraries; will be null if there are no such libraries.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
index ae2992c4ba..e4f6e183c8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
@@ -64,14 +64,14 @@ public final class CcLinkParamsStore extends AbstractCcLinkParamsStore {
@VisibleForSerialization
@AutoCodec.Instantiator
public CcLinkParamsStore(
- CcLinkParams staticSharedParams,
- CcLinkParams staticNoSharedParams,
- CcLinkParams noStaticSharedParams,
- CcLinkParams noStaticNoSharedParams) {
- super.staticSharedParams = staticSharedParams;
- super.staticNoSharedParams = staticNoSharedParams;
- super.noStaticSharedParams = noStaticSharedParams;
- super.noStaticNoSharedParams = noStaticNoSharedParams;
+ CcLinkParams staticModeParamsForDynamicLibrary,
+ CcLinkParams staticModeParamsForExecutable,
+ CcLinkParams dynamicModeParamsForDynamicLibrary,
+ CcLinkParams dynamicModeParamsForExecutable) {
+ super.staticModeParamsForDynamicLibrary = staticModeParamsForDynamicLibrary;
+ super.staticModeParamsForExecutable = staticModeParamsForExecutable;
+ super.dynamicModeParamsForDynamicLibrary = dynamicModeParamsForDynamicLibrary;
+ super.dynamicModeParamsForExecutable = dynamicModeParamsForExecutable;
}
public static com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore merge(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
index 4f087f374a..dd792ccb75 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.FunctionSignature;
import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.SkylarkType;
+import java.util.Collection;
import javax.annotation.Nullable;
/** Wrapper for every C++ linking provider. */
@@ -46,10 +47,10 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
/* numMandatoryNamedOnly= */ 0,
/* starArg= */ false,
/* kwArg= */ false,
- "static_shared_params",
- "static_no_shared_params",
- "no_static_shared_params",
- "no_static_no_shared_params",
+ "static_mode_params_for_dynamic_library",
+ "static_mode_params_for_executable",
+ "dynamic_mode_params_for_dynamic_library",
+ "dynamic_mode_params_for_executable",
"cc_runfiles"),
/* defaultValues= */ ImmutableList.of(
Runtime.NONE, Runtime.NONE, Runtime.NONE, Runtime.NONE, Runtime.NONE),
@@ -78,16 +79,16 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
Object[] args, Environment env, Location loc) throws EvalException {
CcCommon.checkLocationWhitelisted(loc);
int i = 0;
- CcLinkParams staticSharedParams = (CcLinkParams) nullIfNone(args[i++]);
- CcLinkParams staticNoSharedParams = (CcLinkParams) nullIfNone(args[i++]);
- CcLinkParams noStaticSharedParams = (CcLinkParams) nullIfNone(args[i++]);
- CcLinkParams noStaticNoSharedParams = (CcLinkParams) nullIfNone(args[i++]);
+ CcLinkParams staticModeParamsForDynamicLibrary = (CcLinkParams) nullIfNone(args[i++]);
+ CcLinkParams staticModeParamsForExecutable = (CcLinkParams) nullIfNone(args[i++]);
+ CcLinkParams dynamicModeParamsForDynamicLibrary = (CcLinkParams) nullIfNone(args[i++]);
+ CcLinkParams dynamicModeParamsForExecutable = (CcLinkParams) nullIfNone(args[i++]);
CcRunfiles ccRunfiles = (CcRunfiles) nullIfNone(args[i++]);
CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
- if (staticSharedParams != null) {
- if (staticNoSharedParams == null
- || noStaticSharedParams == null
- || noStaticNoSharedParams == null) {
+ if (staticModeParamsForDynamicLibrary != null) {
+ if (staticModeParamsForExecutable == null
+ || dynamicModeParamsForDynamicLibrary == null
+ || dynamicModeParamsForExecutable == null) {
throw new EvalException(
loc,
"Every CcLinkParams parameter must be passed to CcLinkingInfo "
@@ -95,10 +96,10 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
}
ccLinkingInfoBuilder.setCcLinkParamsStore(
new CcLinkParamsStore(
- staticSharedParams,
- staticNoSharedParams,
- noStaticSharedParams,
- noStaticNoSharedParams));
+ staticModeParamsForDynamicLibrary,
+ staticModeParamsForExecutable,
+ dynamicModeParamsForDynamicLibrary,
+ dynamicModeParamsForExecutable));
}
// TODO(plf): The CcDynamicLibrariesForRuntime provider can be removed perhaps. Do not
// add to the API until we know for sure. The CcRunfiles provider is already in the API
@@ -133,6 +134,37 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
}
@Override
+ public CcLinkParams getStaticModeParamsForDynamicLibrary() {
+ return ccLinkParamsStore.get(/* linkingStatically= */ true, /* linkShared= */ true);
+ }
+
+ @Override
+ public CcLinkParams getStaticModeParamsForExecutable() {
+ return ccLinkParamsStore.get(/* linkingStatically= */ true, /* linkShared= */ false);
+ }
+
+ @Override
+ public CcLinkParams getDynamicModeParamsForDynamicLibrary() {
+ return ccLinkParamsStore.get(/* linkingStatically= */ false, /* linkShared= */ true);
+ }
+
+ @Override
+ public CcLinkParams getDynamicModeParamsForExecutable() {
+ return ccLinkParamsStore.get(/* linkingStatically= */ false, /* linkShared= */ false);
+ }
+
+ public static CcLinkingInfo merge(Collection<CcLinkingInfo> ccLinkingInfos) {
+ CcLinkingInfo.Builder builder = new CcLinkingInfo.Builder();
+ builder.setCcLinkParamsStore(
+ CcLinkParamsStore.merge(
+ ccLinkingInfos
+ .stream()
+ .map(CcLinkingInfo::getCcLinkParamsStore)
+ .collect(ImmutableList.toImmutableList())));
+ return builder.build();
+ }
+
+ @Override
public CcRunfiles getCcRunfiles() {
return ccRunfiles;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 55bcc8f5e7..d775a39793 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -35,6 +35,8 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcModuleApi;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcSkylarkInfoApi;
+import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.SkylarkDict;
@@ -294,4 +296,37 @@ public class CcModule
}
return new CcSkylarkInfo();
}
+
+ @SkylarkCallable(
+ name = "merge_cc_linking_infos",
+ documented = false,
+ parameters = {
+ @Param(
+ name = "cc_linking_infos",
+ doc = "cc_linking_infos to be merged.",
+ positional = false,
+ named = true,
+ defaultValue = "[]",
+ type = SkylarkList.class)
+ })
+ public CcLinkingInfo mergeCcLinkingInfos(SkylarkList<CcLinkingInfo> ccLinkingInfos) {
+ return CcLinkingInfo.merge(ccLinkingInfos);
+ }
+
+ @SkylarkCallable(
+ name = "merge_cc_compilation_infos",
+ documented = false,
+ parameters = {
+ @Param(
+ name = "cc_compilation_infos",
+ doc = "cc_compilation_infos to be merged.",
+ positional = false,
+ named = true,
+ defaultValue = "[]",
+ type = SkylarkList.class)
+ })
+ public CcCompilationInfo mergeCcCompilationInfos(
+ SkylarkList<CcCompilationInfo> ccCompilationInfos) {
+ return CcCompilationInfo.merge(ccCompilationInfos);
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
index 127ebaade4..a95863989a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationInfoApi.java
@@ -15,8 +15,10 @@
package com.google.devtools.build.lib.skylarkbuildapi.cpp;
import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/** Interface for a wrapper of every C++ compilation provider. */
@SkylarkModule(
@@ -24,4 +26,25 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
documented = false,
category = SkylarkModuleCategory.PROVIDER,
doc = "Wrapper for every C++ compilation provider")
-public interface CcCompilationInfoApi extends StructApi {}
+public interface CcCompilationInfoApi extends StructApi {
+ @SkylarkCallable(
+ name = "defines",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkDefines();
+
+ @SkylarkCallable(
+ name = "headers",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkHeaders();
+
+ @SkylarkCallable(
+ name = "system_includes",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkDeclaredIncludeDirs();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsApi.java
index 2759c14370..f732819929 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsApi.java
@@ -14,8 +14,10 @@
package com.google.devtools.build.lib.skylarkbuildapi.cpp;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
/**
* Parameters that affect linking actions.
@@ -31,4 +33,25 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
documented = false,
category = SkylarkModuleCategory.BUILTIN,
doc = "Parameters that affect linking actions.")
-public interface CcLinkParamsApi {}
+public interface CcLinkParamsApi {
+ @SkylarkCallable(
+ name = "linkopts",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkLinkopts();
+
+ @SkylarkCallable(
+ name = "libraries_to_link",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkLibrariesToLink();
+
+ @SkylarkCallable(
+ name = "dynamic_libraries_for_runtime",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ SkylarkNestedSet getSkylarkDynamicLibrariesForRuntime();
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
index 12bc9368d0..590d00503e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
@@ -36,4 +36,32 @@ public interface CcLinkingInfoApi extends StructApi {
allowReturnNones = true,
structField = true)
public CcRunfilesApi getCcRunfiles();
+
+ @SkylarkCallable(
+ name = "static_mode_params_for_dynamic_library",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ CcLinkParamsApi getStaticModeParamsForDynamicLibrary();
+
+ @SkylarkCallable(
+ name = "static_mode_params_for_executable",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ CcLinkParamsApi getStaticModeParamsForExecutable();
+
+ @SkylarkCallable(
+ name = "dynamic_mode_params_for_dynamic_library",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ CcLinkParamsApi getDynamicModeParamsForDynamicLibrary();
+
+ @SkylarkCallable(
+ name = "dynamic_mode_params_for_executable",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ CcLinkParamsApi getDynamicModeParamsForExecutable();
}