diff options
author | 2018-07-27 13:08:41 -0700 | |
---|---|---|
committer | 2018-07-27 13:11:03 -0700 | |
commit | 25e75dc2f15c8fd405226fd3a3f68a3a7f857392 (patch) | |
tree | 1156d36290ffb878fcdce1ba4d9db67369bb254d /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | c9efd06dc6cfef400b288becf96aed1f5ba228b2 (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')
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); } } |