diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java | 64 |
1 files changed, 48 insertions, 16 deletions
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; } |