diff options
author | 2018-07-16 01:11:04 -0700 | |
---|---|---|
committer | 2018-07-16 01:12:34 -0700 | |
commit | e14a7d4f156c28244a491c65083273f57734cdbe (patch) | |
tree | 63bae469d108c3d89d80c29013358dd0830f3f6e /src/main/java/com/google | |
parent | a567777889fd0abc6c31818054ed18eaa918e1fe (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')
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(); } |