aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
diff options
context:
space:
mode:
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.java64
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;
}