aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar ruperts <ruperts@google.com>2018-07-27 13:08:41 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-27 13:11:03 -0700
commit25e75dc2f15c8fd405226fd3a3f68a3a7f857392 (patch)
tree1156d36290ffb878fcdce1ba4d9db67369bb254d /src/main/java/com/google/devtools/build/lib/rules/cpp
parentc9efd06dc6cfef400b288becf96aed1f5ba228b2 (diff)
Automated rollback of commit 71479d3ef1627a30b9ec75ca50e6a90cf7db6377.
*** Reason for rollback *** http://https://github.com/bazelbuild/bazel/commit/71479d3ef1627a30b9ec75ca50e6a90cf7db6377 broke thousands of targets in the nightly, notably: //abuse/ares/rulesystem/generator/python/rule_set:main (x1754) //net/encapdecap/common/templates:gen_dr_scopes (x903) //testing/cloud/vex/public:vex_main_internal (x782) //wireless/android/play/playlog/server:playlog_server (x401) *** Original change description *** C++: Removes calls to setCcLinkparamsStore of CcLinkingInfo.Builder This is in preparation for deleting CcLinkParamsStore. All remaining calls to the setCcLinkparamsStore method of the CcLinkingInfo builder have been removed. RELNOTES:none PiperOrigin-RevId: 206361808
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java74
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java113
3 files changed, 95 insertions, 105 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 167a44aa92..871def83e3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -887,14 +887,15 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
CcLinkingInfo.Builder ccLinkingInfoBuilder = CcLinkingInfo.Builder.create();
// TODO(b/111289526): Remove CcLinkingInfo provider from cc_binary as soon as the flag
- // --noexperimental_enable_cc_dynlibs_for_runtime is flipped. An empty CcLinkParamsStore is not
+ // --experimental_enable_cc_dynlibs_for_runtime is flipped. An empty CcLinkParamsStore is not
// needed, but here we set it to avoid a null pointer exception in places where we're expecting
// it. In the future CcLinkParamsStore will be obligatory.
- ccLinkingInfoBuilder
- .setStaticModeParamsForDynamicLibrary(CcLinkParams.EMPTY)
- .setStaticModeParamsForExecutable(CcLinkParams.EMPTY)
- .setDynamicModeParamsForDynamicLibrary(CcLinkParams.EMPTY)
- .setDynamicModeParamsForExecutable(CcLinkParams.EMPTY);
+ ccLinkingInfoBuilder.setCcLinkParamsStore(
+ new CcLinkParamsStore(
+ /* staticModeParamsForDynamicLibrary= */ CcLinkParams.EMPTY,
+ /* staticModeParamsForExecutable= */ CcLinkParams.EMPTY,
+ /* dynamicModeParamsForDynamicLibrary= */ CcLinkParams.EMPTY,
+ /* dynamicModeParamsForExecutable= */ CcLinkParams.EMPTY));
if (cppConfiguration.enableCcDynamicLibrariesForRuntime()) {
ccLinkingInfoBuilder.setCcDynamicLibrariesForRuntime(
new CcDynamicLibrariesForRuntime(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index e5eb997365..2c0e64e638 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -55,7 +55,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-import java.util.function.BiFunction;
import javax.annotation.Nullable;
/**
@@ -537,45 +536,11 @@ public final class CcLinkingHelper {
collectDynamicLibrariesForRuntimeArtifacts(
ccLinkingOutputs.getDynamicLibrariesForRuntime()));
}
-
- final CcLinkingOutputs ccLinkingOutputsFinalized = ccLinkingOutputs;
- BiFunction<Boolean, Boolean, CcLinkParams> createParams =
- (staticMode, forDynamicLibrary) -> {
- CcLinkParams.Builder builder = CcLinkParams.builder();
- builder.addLinkstamps(linkstamps.build(), ccCompilationContext);
- for (CcLinkingInfo ccLinkingInfo : ccLinkingInfos) {
- builder.addTransitiveArgs(
- ccLinkingInfo.getCcLinkParams(
- /* staticMode= */ staticMode, /* forDynamicLibrary */ forDynamicLibrary));
- }
- if (!neverlink) {
- builder.addLibraries(
- ccLinkingOutputsFinalized.getPreferredLibraries(
- staticMode,
- /*preferPic=*/ forDynamicLibrary
- || ruleContext.getFragment(CppConfiguration.class).forcePic()));
- if (!staticMode
- || (ccLinkingOutputsFinalized.getStaticLibraries().isEmpty()
- && ccLinkingOutputsFinalized.getPicStaticLibraries().isEmpty())) {
- builder.addDynamicLibrariesForRuntime(
- LinkerInputs.toLibraryArtifacts(
- ccLinkingOutputsFinalized.getDynamicLibrariesForRuntime()));
- }
- builder.addLinkOpts(linkopts);
- builder.addNonCodeInputs(nonCodeLinkerInputs);
- }
- return builder.build();
- };
-
- ccLinkingInfoBuilder
- .setStaticModeParamsForDynamicLibrary(
- createParams.apply(/* staticMode= */ true, /* forDynamicLibrary= */ true))
- .setStaticModeParamsForExecutable(
- createParams.apply(/* staticMode= */ true, /* forDynamicLibrary= */ false))
- .setDynamicModeParamsForDynamicLibrary(
- createParams.apply(/* staticMode= */ false, /* forDynamicLibrary= */ true))
- .setDynamicModeParamsForExecutable(
- createParams.apply(/* staticMode= */ false, /* forDynamicLibrary= */ false));
+ CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
+ boolean forcePic = cppConfiguration.forcePic();
+ ccLinkingInfoBuilder.setCcLinkParamsStore(
+ new CcLinkParamsStore(
+ createCcLinkParamsStore(ccLinkingOutputs, ccCompilationContext, forcePic)));
providers.put(ccLinkingInfoBuilder.build());
return new LinkingInfo(
providers.build(), outputGroups, ccLinkingOutputs, originalLinkingOutputs);
@@ -646,6 +611,35 @@ public final class CcLinkingHelper {
outputGroups.put(DYNAMIC_LIBRARY_OUTPUT_GROUP_NAME, dynamicLibrary.build());
}
+ private AbstractCcLinkParamsStore createCcLinkParamsStore(
+ final CcLinkingOutputs ccLinkingOutputs,
+ final CcCompilationContext ccCompilationContext,
+ final boolean forcePic) {
+ return new AbstractCcLinkParamsStore() {
+ @Override
+ protected void collect(
+ CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) {
+ builder.addLinkstamps(linkstamps.build(), ccCompilationContext);
+ for (CcLinkingInfo ccLinkingInfo : ccLinkingInfos) {
+ builder.add(ccLinkingInfo.getCcLinkParamsStore());
+ }
+ if (!neverlink) {
+ builder.addLibraries(
+ ccLinkingOutputs.getPreferredLibraries(
+ linkingStatically, /*preferPic=*/ linkShared || forcePic));
+ if (!linkingStatically
+ || (ccLinkingOutputs.getStaticLibraries().isEmpty()
+ && ccLinkingOutputs.getPicStaticLibraries().isEmpty())) {
+ builder.addDynamicLibrariesForRuntime(
+ LinkerInputs.toLibraryArtifacts(ccLinkingOutputs.getDynamicLibrariesForRuntime()));
+ }
+ builder.addLinkOpts(linkopts);
+ builder.addNonCodeInputs(nonCodeLinkerInputs);
+ }
+ }
+ };
+ }
+
private NestedSet<LinkerInput> collectNativeCcLibraries(CcLinkingOutputs ccLinkingOutputs) {
NestedSetBuilder<LinkerInput> result = NestedSetBuilder.linkOrder();
result.addAll(ccLinkingOutputs.getDynamicLibrariesForLinking());
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 b2048a0e61..483575accf 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
@@ -30,6 +30,7 @@ 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 java.util.stream.Stream;
import javax.annotation.Nullable;
/** Wrapper for every C++ linking provider. */
@@ -92,11 +93,12 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
throw new EvalException(
loc, "Every CcLinkParams parameter must be passed to CcLinkingInfo.");
}
- ccLinkingInfoBuilder
- .setStaticModeParamsForDynamicLibrary(staticModeParamsForDynamicLibrary)
- .setStaticModeParamsForExecutable(staticModeParamsForExecutable)
- .setDynamicModeParamsForDynamicLibrary(dynamicModeParamsForDynamicLibrary)
- .setDynamicModeParamsForExecutable(dynamicModeParamsForExecutable);
+ ccLinkingInfoBuilder.setCcLinkParamsStore(
+ new CcLinkParamsStore(
+ 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
// at the time of this comment (cl/200184914). Perhaps it can be removed but Skylark rules
@@ -108,10 +110,12 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
public static final CcLinkingInfo EMPTY =
CcLinkingInfo.Builder.create()
- .setStaticModeParamsForDynamicLibrary(CcLinkParams.EMPTY)
- .setStaticModeParamsForExecutable(CcLinkParams.EMPTY)
- .setDynamicModeParamsForDynamicLibrary(CcLinkParams.EMPTY)
- .setDynamicModeParamsForExecutable(CcLinkParams.EMPTY)
+ .setCcLinkParamsStore(
+ new CcLinkParamsStore(
+ /* staticModeParamsForDynamicLibrary= */ CcLinkParams.EMPTY,
+ /* staticModeParamsForExecutable= */ CcLinkParams.EMPTY,
+ /* dynamicModeParamsForDynamicLibrary= */ CcLinkParams.EMPTY,
+ /* dynamicModeParamsForExecutable= */ CcLinkParams.EMPTY))
.build();
private final CcLinkParamsStore ccLinkParamsStore;
@@ -159,26 +163,13 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
}
public static CcLinkingInfo merge(Collection<CcLinkingInfo> ccLinkingInfos) {
- CcLinkParams.Builder staticModeParamsForDynamicLibraryBuilder = CcLinkParams.builder();
- CcLinkParams.Builder staticModeParamsForExecutableBuilder = CcLinkParams.builder();
- CcLinkParams.Builder dynamicModeParamsForDynamicLibraryBuilder = CcLinkParams.builder();
- CcLinkParams.Builder dynamicModeParamsForExecutableBuilder = CcLinkParams.builder();
- for (CcLinkingInfo ccLinkingInfo : ccLinkingInfos) {
- staticModeParamsForDynamicLibraryBuilder.addTransitiveArgs(
- ccLinkingInfo.getStaticModeParamsForDynamicLibrary());
- staticModeParamsForExecutableBuilder.addTransitiveArgs(
- ccLinkingInfo.getStaticModeParamsForExecutable());
- dynamicModeParamsForDynamicLibraryBuilder.addTransitiveArgs(
- ccLinkingInfo.getDynamicModeParamsForDynamicLibrary());
- dynamicModeParamsForExecutableBuilder.addTransitiveArgs(
- ccLinkingInfo.getDynamicModeParamsForExecutable());
- }
- return new CcLinkingInfo.Builder()
- .setStaticModeParamsForDynamicLibrary(staticModeParamsForDynamicLibraryBuilder.build())
- .setStaticModeParamsForExecutable(staticModeParamsForExecutableBuilder.build())
- .setDynamicModeParamsForDynamicLibrary(dynamicModeParamsForDynamicLibraryBuilder.build())
- .setDynamicModeParamsForExecutable(dynamicModeParamsForExecutableBuilder.build())
- .build();
+ CcLinkingInfo.Builder builder = new CcLinkingInfo.Builder();
+ builder.setCcLinkParamsStore(
+ CcLinkParamsStore.merge(
+ Stream.concat(Stream.of(CcLinkingInfo.EMPTY), ccLinkingInfos.stream())
+ .map(CcLinkingInfo::getCcLinkParamsStore)
+ .collect(ImmutableList.toImmutableList())));
+ return builder.build();
}
@Override
@@ -190,24 +181,9 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
return ccDynamicLibrariesForRuntime;
}
- public CcLinkParams getCcLinkParams(boolean staticMode, boolean forDynamicLibrary) {
- if (staticMode) {
- if (forDynamicLibrary) {
- return getStaticModeParamsForDynamicLibrary();
- } else {
- return getStaticModeParamsForExecutable();
- }
- } else {
- if (forDynamicLibrary) {
- return getDynamicModeParamsForDynamicLibrary();
- } else {
- return getDynamicModeParamsForExecutable();
- }
- }
- }
-
/** A Builder for {@link CcLinkingInfo}. */
public static class Builder {
+ CcLinkParamsStore ccLinkParamsStore;
CcLinkParams staticModeParamsForDynamicLibrary;
CcLinkParams staticModeParamsForExecutable;
CcLinkParams dynamicModeParamsForDynamicLibrary;
@@ -219,6 +195,19 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
return new CcLinkingInfo.Builder();
}
+ @Deprecated
+ // TODO(b/111781390): Use individual setters for each flavor of CcLinkParams. Not all call sites
+ // are being refactored at once. Work in progress.
+ public Builder setCcLinkParamsStore(CcLinkParamsStore ccLinkParamsStore) {
+ Preconditions.checkState(this.ccLinkParamsStore == null);
+ Preconditions.checkState(this.staticModeParamsForDynamicLibrary == null);
+ Preconditions.checkState(this.staticModeParamsForExecutable == null);
+ Preconditions.checkState(this.dynamicModeParamsForDynamicLibrary == null);
+ Preconditions.checkState(this.dynamicModeParamsForExecutable == null);
+ this.ccLinkParamsStore = ccLinkParamsStore;
+ return this;
+ }
+
public Builder setCcRunfiles(CcRunfiles ccRunfiles) {
Preconditions.checkState(this.ccRunfiles == null);
this.ccRunfiles = ccRunfiles;
@@ -233,40 +222,46 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
}
public Builder setStaticModeParamsForDynamicLibrary(CcLinkParams ccLinkParams) {
- Preconditions.checkState(this.staticModeParamsForDynamicLibrary == null);
+ Preconditions.checkState(
+ this.staticModeParamsForDynamicLibrary == null && ccLinkParamsStore == null);
this.staticModeParamsForDynamicLibrary = ccLinkParams;
return this;
}
public Builder setStaticModeParamsForExecutable(CcLinkParams ccLinkParams) {
- Preconditions.checkState(this.staticModeParamsForExecutable == null);
+ Preconditions.checkState(
+ this.staticModeParamsForExecutable == null && ccLinkParamsStore == null);
this.staticModeParamsForExecutable = ccLinkParams;
return this;
}
public Builder setDynamicModeParamsForDynamicLibrary(CcLinkParams ccLinkParams) {
- Preconditions.checkState(this.dynamicModeParamsForDynamicLibrary == null);
+ Preconditions.checkState(
+ this.dynamicModeParamsForDynamicLibrary == null && ccLinkParamsStore == null);
this.dynamicModeParamsForDynamicLibrary = ccLinkParams;
return this;
}
public Builder setDynamicModeParamsForExecutable(CcLinkParams ccLinkParams) {
- Preconditions.checkState(this.dynamicModeParamsForExecutable == null);
+ Preconditions.checkState(
+ this.dynamicModeParamsForExecutable == null && ccLinkParamsStore == null);
this.dynamicModeParamsForExecutable = ccLinkParams;
return this;
}
public CcLinkingInfo build() {
- Preconditions.checkNotNull(staticModeParamsForDynamicLibrary);
- Preconditions.checkNotNull(staticModeParamsForExecutable);
- Preconditions.checkNotNull(dynamicModeParamsForDynamicLibrary);
- Preconditions.checkNotNull(dynamicModeParamsForExecutable);
- CcLinkParamsStore ccLinkParamsStore =
- new CcLinkParamsStore(
- staticModeParamsForDynamicLibrary,
- staticModeParamsForExecutable,
- dynamicModeParamsForDynamicLibrary,
- dynamicModeParamsForExecutable);
+ if (ccLinkParamsStore == null) {
+ Preconditions.checkNotNull(staticModeParamsForDynamicLibrary);
+ Preconditions.checkNotNull(staticModeParamsForExecutable);
+ Preconditions.checkNotNull(dynamicModeParamsForDynamicLibrary);
+ Preconditions.checkNotNull(dynamicModeParamsForExecutable);
+ ccLinkParamsStore =
+ new CcLinkParamsStore(
+ staticModeParamsForDynamicLibrary,
+ staticModeParamsForExecutable,
+ dynamicModeParamsForDynamicLibrary,
+ dynamicModeParamsForExecutable);
+ }
return new CcLinkingInfo(ccLinkParamsStore, ccRunfiles, ccDynamicLibrariesForRuntime);
}
}