From 0c5cc1b0253b57c4d04e324fc36536c094a77a6f Mon Sep 17 00:00:00 2001 From: hlopko Date: Mon, 7 May 2018 23:52:02 -0700 Subject: Rename LinkStaticness to LinkingMode and unify with the other LinkingMode. RELNOTES: None. PiperOrigin-RevId: 195777400 --- .../devtools/build/lib/rules/cpp/CcBinary.java | 40 +++++++++---------- .../build/lib/rules/cpp/CcLinkingHelper.java | 8 ++-- .../build/lib/rules/cpp/CcLinkingOutputs.java | 41 ++++++++++--------- .../build/lib/rules/cpp/CcToolchainProvider.java | 7 ++-- .../build/lib/rules/cpp/CppConfiguration.java | 23 +++++++++-- .../build/lib/rules/cpp/CppLinkAction.java | 28 ++++++------- .../build/lib/rules/cpp/CppLinkActionBuilder.java | 40 +++++++++---------- .../build/lib/rules/cpp/CppToolchainInfo.java | 1 + .../lib/rules/cpp/LibrariesToLinkCollector.java | 7 ++-- .../google/devtools/build/lib/rules/cpp/Link.java | 28 +++++++++++-- .../build/lib/rules/cpp/LinkCommandLine.java | 27 ++++++------- .../devtools/build/lib/rules/cpp/LinkingMode.java | 46 ---------------------- .../lib/rules/nativedeps/NativeDepsHelper.java | 4 +- .../build/lib/rules/objc/CompilationSupport.java | 34 ++++++++-------- 14 files changed, 158 insertions(+), 176 deletions(-) delete mode 100644 src/main/java/com/google/devtools/build/lib/rules/cpp/LinkingMode.java (limited to 'src/main/java/com') 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 801606fc4a..c82e329733 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 @@ -56,8 +56,8 @@ import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationIn import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.DynamicMode; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.OsUtils; @@ -100,7 +100,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { CcLinkingOutputs linkingOutputs, CcLinkingOutputs ccLibraryLinkingOutputs, CcCompilationContextInfo ccCompilationContextInfo, - LinkStaticness linkStaticness, + Link.LinkingMode linkingMode, NestedSet filesToBuild, Iterable fakeLinkerInputs, boolean fake, @@ -109,7 +109,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { Runfiles.Builder builder = new Runfiles.Builder( context.getWorkspaceName(), context.getConfiguration().legacyExternalRunfiles()); Function runfilesMapping = - CcRunfilesInfo.runfilesFunction(linkStaticness != LinkStaticness.DYNAMIC); + CcRunfilesInfo.runfilesFunction(linkingMode != Link.LinkingMode.DYNAMIC); builder.addTransitiveArtifacts(filesToBuild); // Add the shared libraries to the runfiles. This adds any shared libraries that are in the // srcs of this target. @@ -117,7 +117,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { builder.addRunfiles(context, RunfilesProvider.DEFAULT_RUNFILES); builder.add(context, runfilesMapping); // Add the C++ runtime libraries if linking them dynamically. - if (linkStaticness == LinkStaticness.DYNAMIC) { + if (linkingMode == Link.LinkingMode.DYNAMIC) { builder.addTransitiveArtifacts(toolchain.getDynamicRuntimeLinkInputs(featureConfiguration)); } if (linkCompileOutputSeparately) { @@ -213,7 +213,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { } List linkopts = common.getLinkopts(); - LinkStaticness linkStaticness = + LinkingMode linkingMode = getLinkStaticness(ruleContext, linkopts, cppConfiguration, ccToolchain); FdoSupportProvider fdoSupport = common.getFdoSupport(); FeatureConfiguration featureConfiguration = @@ -222,7 +222,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { /* requestedFeatures= */ ImmutableSet.builder() .addAll(ruleContext.getFeatures()) .add( - linkStaticness == LinkStaticness.DYNAMIC + linkingMode == Link.LinkingMode.DYNAMIC ? DYNAMIC_LINKING_MODE : STATIC_LINKING_MODE) .build(), @@ -246,7 +246,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { boolean linkCompileOutputSeparately = ruleContext.isTestTarget() && cppConfiguration.getLinkCompileOutputSeparately() - && linkStaticness == LinkStaticness.DYNAMIC; + && linkingMode == LinkingMode.DYNAMIC; // When linking the object files directly into the resulting binary, we do not need // library-level link outputs; thus, we do not let CcCompilationHelper produce link outputs // (either shared object files or archives) for a non-library link type [*], and add @@ -280,7 +280,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { CcLinkParams linkParams = collectCcLinkParams( ruleContext, - linkStaticness != LinkStaticness.DYNAMIC, + linkingMode != Link.LinkingMode.DYNAMIC, isLinkShared(ruleContext), linkopts); CppLinkActionBuilder linkActionBuilder = @@ -300,7 +300,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { linkCompileOutputSeparately, semantics); linkActionBuilder.setUseTestOnlyFlags(ruleContext.isTestTarget()); - if (linkStaticness == LinkStaticness.DYNAMIC) { + if (linkingMode == Link.LinkingMode.DYNAMIC) { linkActionBuilder.setRuntimeInputs( ArtifactCategory.DYNAMIC_LIBRARY, ccToolchain.getDynamicRuntimeLinkMiddleman(featureConfiguration), @@ -319,7 +319,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { } linkActionBuilder.setLinkType(linkType); - linkActionBuilder.setLinkStaticness(linkStaticness); + linkActionBuilder.setLinkingMode(linkingMode); linkActionBuilder.setFake(fake); if (CppLinkAction.enableSymbolsCounts( @@ -428,7 +428,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { collectTransitiveDwoArtifacts( ruleContext, ccCompilationOutputs, - linkStaticness, + linkingMode, CppHelper.useFission(cppConfiguration, ccToolchain), usePic, ltoBackendArtifacts); @@ -444,7 +444,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { // For cc_test rules, include the dwp in the runfiles if Fission is enabled and the test was // built statically. if (TargetUtils.isTestRule(ruleContext.getRule()) - && linkStaticness != LinkStaticness.DYNAMIC + && linkingMode != Link.LinkingMode.DYNAMIC && CppHelper.useFission(cppConfiguration, ccToolchain) && cppConfiguration.buildTestDwpIsActivated()) { filesToBuild = NestedSetBuilder.fromNestedSet(filesToBuild).add(dwpFile).build(); @@ -475,7 +475,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { linkingOutputs, ccLinkingOutputs, ccCompilationContextInfo, - linkStaticness, + linkingMode, filesToBuild, fakeLinkerInputs, fake, @@ -645,20 +645,20 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { return linkopts.contains("-static") || cppConfiguration.hasStaticLinkOption(); } - private static final LinkStaticness getLinkStaticness( + private static final LinkingMode getLinkStaticness( RuleContext context, List linkopts, CppConfiguration cppConfiguration, CcToolchainProvider toolchain) { if (CppHelper.getDynamicMode(cppConfiguration, toolchain) == DynamicMode.FULLY) { - return LinkStaticness.DYNAMIC; + return LinkingMode.DYNAMIC; } else if (dashStaticInLinkopts(linkopts, cppConfiguration)) { - return LinkStaticness.FULLY_STATIC; + return Link.LinkingMode.LEGACY_FULLY_STATIC; } else if (CppHelper.getDynamicMode(cppConfiguration, toolchain) == DynamicMode.OFF || context.attributes().get("linkstatic", Type.BOOLEAN)) { - return LinkStaticness.MOSTLY_STATIC; + return LinkingMode.STATIC; } else { - return LinkStaticness.DYNAMIC; + return LinkingMode.DYNAMIC; } } @@ -673,11 +673,11 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { private static DwoArtifactsCollector collectTransitiveDwoArtifacts( RuleContext context, CcCompilationOutputs compilationOutputs, - LinkStaticness linkStaticness, + Link.LinkingMode linkingMode, boolean generateDwo, boolean ltoBackendArtifactsUsePic, Iterable ltoBackendArtifacts) { - if (linkStaticness == LinkStaticness.DYNAMIC) { + if (linkingMode == LinkingMode.DYNAMIC) { return DwoArtifactsCollector.directCollector( compilationOutputs, generateDwo, ltoBackendArtifactsUsePic, ltoBackendArtifacts); } else { 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 b77087943b..5683e08200 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 @@ -44,9 +44,9 @@ import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory. import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.ExpansionException; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariablesExtension; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.rules.cpp.Link.LinkerOrArchiver; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.Link.Picness; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; @@ -788,7 +788,7 @@ public final class CcLinkingHelper { .addLtoBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setUsePicForLtoBackendActions(usePicForBinaries) .setLinkType(linkType) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .setLinkingMode(LinkingMode.LEGACY_FULLY_STATIC) .addActionInputs(linkActionInputs) .setLibraryIdentifier(libraryIdentifier) .addVariablesExtensions(variablesExtensions) @@ -817,7 +817,7 @@ public final class CcLinkingHelper { .addLtoBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setUsePicForLtoBackendActions(true) .setLinkType(picLinkType) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .setLinkingMode(LinkingMode.LEGACY_FULLY_STATIC) .addActionInputs(linkActionInputs) .setLibraryIdentifier(libraryIdentifier) .addVariablesExtensions(variablesExtensions) @@ -880,7 +880,7 @@ public final class CcLinkingHelper { .addNonCodeInputs(ccOutputs.getHeaderTokenFiles()) .addLtoBitcodeFiles(ccOutputs.getLtoBitcodeFiles()) .setLinkType(LinkTargetType.NODEPS_DYNAMIC_LIBRARY) - .setLinkStaticness(LinkStaticness.DYNAMIC) + .setLinkingMode(LinkingMode.DYNAMIC) .addActionInputs(linkActionInputs) .setLibraryIdentifier(mainLibraryIdentifier) .addLinkopts(linkopts) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java index 40536f7d2f..39e651bbdb 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java @@ -19,7 +19,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.vfs.FileSystemUtils; import java.util.ArrayList; @@ -94,38 +94,37 @@ public class CcLinkingOutputs { return result.build(); } + /** + * Returns the shared libraries that are linked against and therefore also need to be in the + * runfiles. + */ + public Iterable getLibrariesForRunfiles(boolean linkingStatically) { + List libraries = + getPreferredLibraries(linkingStatically, /*preferPic*/ false, true); + return PrecompiledFiles.getSharedLibrariesFrom(LinkerInputs.toLibraryArtifacts(libraries)); + } + /** * Add the ".a", ".pic.a" and/or ".so" files in appropriate order of preference depending on the * link preferences. * *

This method tries to simulate a search path for adding static and dynamic libraries, - * allowing either to be preferred over the other depending on the link {@link LinkStaticness}. + * allowing either to be preferred over the other depending on the link {@link LinkingMode}. * - * TODO(bazel-team): (2009) we should preserve the relative ordering of first and second - * choice libraries. E.g. if srcs=['foo.a','bar.so','baz.a'] then we should link them in the - * same order. Currently we link entries from the first choice list before those from the - * second choice list, i.e. in the order {@code ['bar.so', 'foo.a', 'baz.a']}. + *

TODO(bazel-team): (2009) we should preserve the relative ordering of first and second choice + * libraries. E.g. if srcs=['foo.a','bar.so','baz.a'] then we should link them in the same order. + * Currently we link entries from the first choice list before those from the second choice list, + * i.e. in the order {@code ['bar.so', 'foo.a', 'baz.a']}. * - * @param linkingStatically whether to prefer static over dynamic libraries. Should be - * true for binaries that are linked in fully static or mostly static mode. + * @param linkingStatically whether to prefer static over dynamic libraries. Should be true + * for binaries that are linked in fully static or mostly static mode. * @param preferPic whether to prefer pic over non pic libraries (usually used when linking - * shared) + * shared) */ - public List getPreferredLibraries( - boolean linkingStatically, boolean preferPic) { + public List getPreferredLibraries(boolean linkingStatically, boolean preferPic) { return getPreferredLibraries(linkingStatically, preferPic, false); } - /** - * Returns the shared libraries that are linked against and therefore also need to be in the - * runfiles. - */ - public Iterable getLibrariesForRunfiles(boolean linkingStatically) { - List libraries = - getPreferredLibraries(linkingStatically, /*preferPic*/false, true); - return PrecompiledFiles.getSharedLibrariesFrom(LinkerInputs.toLibraryArtifacts(libraries)); - } - /** * Add the ".a", ".pic.a" and/or ".so" files in appropriate order of * preference depending on the link preferences. diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java index 381224f9de..3e229e15fc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfig import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables; import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool; import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; @@ -774,14 +775,14 @@ public final class CcToolchainProvider extends ToolchainInfo { /** Returns linker flags for fully statically linked outputs. */ FlagList getLegacyFullyStaticLinkFlags(CompilationMode compilationMode, LipoMode lipoMode) { return new FlagList( - configureAllLegacyLinkOptions(compilationMode, lipoMode, LinkingMode.FULLY_STATIC), + configureAllLegacyLinkOptions(compilationMode, lipoMode, LinkingMode.LEGACY_FULLY_STATIC), ImmutableList.of()); } /** Returns linker flags for mostly static linked outputs. */ FlagList getLegacyMostlyStaticLinkFlags(CompilationMode compilationMode, LipoMode lipoMode) { return new FlagList( - configureAllLegacyLinkOptions(compilationMode, lipoMode, LinkingMode.MOSTLY_STATIC), + configureAllLegacyLinkOptions(compilationMode, lipoMode, LinkingMode.STATIC), ImmutableList.of()); } @@ -790,7 +791,7 @@ public final class CcToolchainProvider extends ToolchainInfo { CompilationMode compilationMode, LipoMode lipoMode) { return new FlagList( configureAllLegacyLinkOptions( - compilationMode, lipoMode, LinkingMode.MOSTLY_STATIC_LIBRARIES), + compilationMode, lipoMode, LinkingMode.LEGACY_MOSTLY_STATIC_LIBRARIES), ImmutableList.of()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index e5cee301a4..af89b87ae5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -37,6 +37,7 @@ import com.google.devtools.build.lib.packages.OutputFile; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader.CppConfigurationParameters; import com.google.devtools.build.lib.rules.cpp.CrosstoolConfigurationLoader.CrosstoolFile; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.transitions.ContextCollectorOwnerTransition; import com.google.devtools.build.lib.rules.cpp.transitions.DisableLipoTransition; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -259,15 +260,17 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { ImmutableList.copyOf(cppOptions.conlyoptList), new FlagList( cppToolchainInfo.configureAllLegacyLinkOptions( - compilationMode, cppOptions.getLipoMode(), LinkingMode.FULLY_STATIC), + compilationMode, cppOptions.getLipoMode(), LinkingMode.LEGACY_FULLY_STATIC), ImmutableList.of()), new FlagList( cppToolchainInfo.configureAllLegacyLinkOptions( - compilationMode, cppOptions.getLipoMode(), LinkingMode.MOSTLY_STATIC), + compilationMode, cppOptions.getLipoMode(), LinkingMode.STATIC), ImmutableList.of()), new FlagList( cppToolchainInfo.configureAllLegacyLinkOptions( - compilationMode, cppOptions.getLipoMode(), LinkingMode.MOSTLY_STATIC_LIBRARIES), + compilationMode, + cppOptions.getLipoMode(), + LinkingMode.LEGACY_MOSTLY_STATIC_LIBRARIES), ImmutableList.of()), new FlagList( cppToolchainInfo.configureAllLegacyLinkOptions( @@ -360,7 +363,19 @@ public final class CppConfiguration extends BuildConfiguration.Fragment { @VisibleForTesting static LinkingMode importLinkingMode(CrosstoolConfig.LinkingMode mode) { - return LinkingMode.valueOf(mode.name()); + switch (mode.name()) { + case "FULLY_STATIC": + return LinkingMode.LEGACY_FULLY_STATIC; + case "MOSTLY_STATIC_LIBRARIES": + return LinkingMode.LEGACY_MOSTLY_STATIC_LIBRARIES; + case "MOSTLY_STATIC": + return LinkingMode.STATIC; + case "DYNAMIC": + return LinkingMode.DYNAMIC; + default: + throw new IllegalArgumentException( + String.format("Linking mode '%s' not known.", mode.name())); + } } /** Returns the {@link CppToolchainInfo} used by this configuration. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java index 249c53e5be..67d6b5bbee 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java @@ -50,8 +50,8 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Linkstamp; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; 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; @@ -423,7 +423,7 @@ public final class CppLinkAction extends AbstractAction info.setInterfaceOutputFile(interfaceOutputLibrary.getArtifact().getExecPathString()); } info.setLinkTargetType(getLinkCommandLine().getLinkTargetType().name()); - info.setLinkStaticness(getLinkCommandLine().getLinkStaticness().name()); + info.setLinkStaticness(getLinkCommandLine().getLinkingMode().name()); info.addAllLinkStamp(Artifact.toExecPaths(getLinkstampObjects())); info.addAllBuildInfoHeaderArtifact(Artifact.toExecPaths(getBuildInfoHeaderArtifacts())); info.addAllLinkOpt(getLinkCommandLine().getRawLinkArgv(null)); @@ -499,9 +499,9 @@ public final class CppLinkAction extends AbstractAction public ResourceSet estimateResourceConsumptionLocal() { // It's ok if this behaves differently even if the key is identical. ResourceSet minLinkResources = - getLinkCommandLine().getLinkStaticness() == Link.LinkStaticness.DYNAMIC - ? MIN_DYNAMIC_LINK_RESOURCES - : MIN_STATIC_LINK_RESOURCES; + getLinkCommandLine().getLinkingMode() == LinkingMode.DYNAMIC + ? MIN_DYNAMIC_LINK_RESOURCES + : MIN_STATIC_LINK_RESOURCES; final int inputSize = Iterables.size(getLinkCommandLine().getLinkerInputArtifacts()); @@ -554,7 +554,7 @@ public final class CppLinkAction extends AbstractAction final ImmutableSet linkstamps; final ImmutableList linkopts; final LinkTargetType linkType; - final LinkStaticness linkStaticness; + final LinkingMode linkingMode; final boolean fake; final boolean isNativeDeps; final boolean useTestOnlyFlags; @@ -584,7 +584,7 @@ public final class CppLinkAction extends AbstractAction builder.getLinkstamps(), ImmutableList.copyOf(builder.getLinkopts()), builder.getLinkType(), - builder.getLinkStaticness(), + builder.getLinkingMode(), builder.isFake(), builder.isNativeDeps(), builder.useTestOnlyFlags()); @@ -604,7 +604,7 @@ public final class CppLinkAction extends AbstractAction ImmutableSet linkstamps, ImmutableList linkopts, LinkTargetType linkType, - LinkStaticness linkStaticness, + Link.LinkingMode linkingMode, boolean fake, boolean isNativeDeps, boolean useTestOnlyFlags) { @@ -619,7 +619,7 @@ public final class CppLinkAction extends AbstractAction this.linkstamps = linkstamps; this.linkopts = linkopts; this.linkType = linkType; - this.linkStaticness = linkStaticness; + this.linkingMode = linkingMode; this.fake = fake; this.isNativeDeps = isNativeDeps; this.useTestOnlyFlags = useTestOnlyFlags; @@ -678,12 +678,10 @@ public final class CppLinkAction extends AbstractAction public LinkTargetType getLinkType() { return this.linkType; } - - /** - * Returns the staticness of the linking of this target. - */ - public LinkStaticness getLinkStaticness() { - return this.linkStaticness; + + /** Returns the staticness of the linking of this target. */ + public LinkingMode getLinkingMode() { + return this.linkingMode; } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java index c116465270..83df6d0f23 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java @@ -50,7 +50,6 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool; import com.google.devtools.build.lib.rules.cpp.CppLinkAction.Context; import com.google.devtools.build.lib.rules.cpp.CppLinkAction.LinkArtifactFactory; import com.google.devtools.build.lib.rules.cpp.LibrariesToLinkCollector.CollectedLibrariesToLink; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.rules.cpp.Link.LinkerOrArchiver; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; @@ -124,7 +123,7 @@ public class CppLinkActionBuilder { private ImmutableList additionalLinkstampDefines = ImmutableList.of(); private final List linkopts = new ArrayList<>(); private LinkTargetType linkType = LinkTargetType.STATIC_LIBRARY; - private LinkStaticness linkStaticness = LinkStaticness.FULLY_STATIC; + private Link.LinkingMode linkingMode = Link.LinkingMode.LEGACY_FULLY_STATIC; private String libraryIdentifier = null; private ImmutableMap ltoBitcodeFiles; private Artifact defFile; @@ -280,7 +279,7 @@ public class CppLinkActionBuilder { this.linkstampsBuilder.addAll(linkContext.linkstamps); this.linkopts.addAll(linkContext.linkopts); this.linkType = linkContext.linkType; - this.linkStaticness = linkContext.linkStaticness; + this.linkingMode = linkContext.linkingMode; this.fake = linkContext.fake; this.isNativeDeps = linkContext.isNativeDeps; this.useTestOnlyFlags = linkContext.useTestOnlyFlags; @@ -348,11 +347,9 @@ public class CppLinkActionBuilder { public LinkTargetType getLinkType() { return this.linkType; } - /** - * Returns the staticness of this link action. - */ - public LinkStaticness getLinkStaticness() { - return this.linkStaticness; + /** Returns the staticness of this link action. */ + public Link.LinkingMode getLinkingMode() { + return this.linkingMode; } /** * Returns linker inputs that are lto bitcode files in a map from the full bitcode file used by @@ -683,8 +680,8 @@ public class CppLinkActionBuilder { if (LinkerOrArchiver.ARCHIVER.equals(linkType.linkerOrArchiver())) { return ImmutableList.of(); } - boolean fullyStatic = (linkStaticness == LinkStaticness.FULLY_STATIC); - boolean mostlyStatic = (linkStaticness == LinkStaticness.MOSTLY_STATIC); + boolean fullyStatic = (linkingMode == Link.LinkingMode.LEGACY_FULLY_STATIC); + boolean mostlyStatic = (linkingMode == Link.LinkingMode.STATIC); boolean sharedLinkopts = linkType == LinkTargetType.DYNAMIC_LIBRARY || linkopts.contains("-shared") @@ -776,7 +773,7 @@ public class CppLinkActionBuilder { boolean needWholeArchive = wholeArchive - || needWholeArchive(linkStaticness, linkType, linkopts, isNativeDeps, cppConfiguration); + || needWholeArchive(linkingMode, linkType, linkopts, isNativeDeps, cppConfiguration); // Disallow LTO indexing for test targets that link statically, and optionally for any // linkstatic target (which can be used to disable LTO indexing for non-testonly cc_binary // built due to data dependences for a blaze test invocation). Otherwise this will provoke @@ -799,7 +796,7 @@ public class CppLinkActionBuilder { || !(ruleContext.isTestTarget() || ruleContext.isTestOnlyTarget())); boolean allowLtoIndexing = includeLinkStaticInLtoIndexing - || (linkStaticness == LinkStaticness.DYNAMIC && !ltoBitcodeFiles.isEmpty()); + || (linkingMode == Link.LinkingMode.DYNAMIC && !ltoBitcodeFiles.isEmpty()); NestedSet originalUniqueLibraries = libraries.build(); @@ -975,7 +972,7 @@ public class CppLinkActionBuilder { toolchain, toolchainLibrariesSolibDir, linkType, - linkStaticness, + linkingMode, output, solibDir, isLtoIndexing, @@ -1041,7 +1038,8 @@ public class CppLinkActionBuilder { toolchainLibrariesSolibDir = null; Preconditions.checkArgument( - linkStaticness == LinkStaticness.FULLY_STATIC, "static library link must be static"); + linkingMode == Link.LinkingMode.LEGACY_FULLY_STATIC, + "static library link must be static"); Preconditions.checkArgument( symbolCounts == null, "the symbol counts output must be null for static links"); Preconditions.checkArgument( @@ -1054,7 +1052,7 @@ public class CppLinkActionBuilder { new LinkCommandLine.Builder(ruleContext) .setLinkerInputArtifacts(expandedLinkerArtifacts) .setLinkTargetType(linkType) - .setLinkStaticness(linkStaticness) + .setLinkingMode(linkingMode) .setToolchainLibrariesSolibDir( linkType.linkerOrArchiver() == LinkerOrArchiver.ARCHIVER ? null @@ -1250,13 +1248,13 @@ public class CppLinkActionBuilder { /** The default heuristic on whether we need to use whole-archive for the link. */ private static boolean needWholeArchive( - LinkStaticness staticness, + Link.LinkingMode staticness, LinkTargetType type, Collection linkopts, boolean isNativeDeps, CppConfiguration cppConfig) { - boolean fullyStatic = (staticness == LinkStaticness.FULLY_STATIC); - boolean mostlyStatic = (staticness == LinkStaticness.MOSTLY_STATIC); + boolean fullyStatic = (staticness == Link.LinkingMode.LEGACY_FULLY_STATIC); + boolean mostlyStatic = (staticness == Link.LinkingMode.STATIC); boolean sharedLinkopts = type.isDynamicLibrary() || linkopts.contains("-shared") || cppConfig.hasSharedLinkOption(); return (isNativeDeps || cppConfig.legacyWholeArchive()) @@ -1516,10 +1514,10 @@ public class CppLinkActionBuilder { /** * Sets the degree of "staticness" of the link: fully static (static binding of all symbols), * mostly static (use dynamic binding only for symbols from glibc), dynamic (use dynamic binding - * wherever possible). The default is {@link LinkStaticness#FULLY_STATIC}. + * wherever possible). The default is {@link Link.LinkingMode#LEGACY_FULLY_STATIC}. */ - public CppLinkActionBuilder setLinkStaticness(LinkStaticness linkStaticness) { - this.linkStaticness = linkStaticness; + public CppLinkActionBuilder setLinkingMode(Link.LinkingMode linkingMode) { + this.linkingMode = linkingMode; return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java index c8abd2b2d7..1656d11970 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.cpp.CppActionConfigs.CppPlatform; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibrariesToLinkCollector.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibrariesToLinkCollector.java index 0d2bbf3cdf..56f361fc1d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibrariesToLinkCollector.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibrariesToLinkCollector.java @@ -22,8 +22,8 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.LibraryToLinkValue; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.SequenceBuilder; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.HashMap; @@ -55,7 +55,7 @@ public class LibrariesToLinkCollector { CcToolchainProvider toolchain, PathFragment toolchainLibrariesSolibDir, LinkTargetType linkType, - LinkStaticness linkStaticness, + Link.LinkingMode linkingMode, Artifact output, PathFragment solibDir, boolean isLtoIndexing, @@ -82,8 +82,7 @@ public class LibrariesToLinkCollector { needToolchainLibrariesRpath = toolchainLibrariesSolibDir != null && (linkType.isDynamicLibrary() - || (linkType == LinkTargetType.EXECUTABLE - && linkStaticness == LinkStaticness.DYNAMIC)); + || (linkType == LinkTargetType.EXECUTABLE && linkingMode == LinkingMode.DYNAMIC)); // Calculate the correct relative value for the "-rpath" link option (which sets // the search path for finding shared libraries). diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/Link.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/Link.java index d347baefa6..76018356ea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/Link.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/Link.java @@ -263,10 +263,30 @@ public abstract class Link { } /** The degree of "staticness" of symbol resolution during linking. */ - public enum LinkStaticness { - FULLY_STATIC, // Static binding of all symbols. - MOSTLY_STATIC, // Use dynamic binding only for symbols from glibc. - DYNAMIC, // Use dynamic binding wherever possible. + public enum LinkingMode { + /** + * Same as {@link STATIC}, but for shared libraries. Will be removed soon. This was added in + * times when we couldn't control linking mode flags for transitive shared libraries. Now we + * can, so this is obsolete. + */ + LEGACY_MOSTLY_STATIC_LIBRARIES, + /** + * Everything is linked statically; e.g. {@code gcc -static x.o libfoo.a libbar.a -lm}. + * Specified by {@code -static} in linkopts. Will be removed soon. This was added in times when + * features were not expressive enough to specify different flags for {@link STATIC} and for + * fully static links. This is now obsolete. + */ + LEGACY_FULLY_STATIC, + /** + * Link binaries statically except for system libraries (e.g. {@code gcc x.o libfoo.a libbar.a + * -lm}). + */ + STATIC, + /** + * All libraries are linked dynamically (if a dynamic version is available), e.g. {@code gcc x.o + * libfoo.so libbar.so -lm}. + */ + DYNAMIC, } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index 9fca9f65ab..545dd9e956 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java @@ -25,7 +25,6 @@ import com.google.devtools.build.lib.collect.CollectionUtils; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration; import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; import com.google.devtools.build.lib.rules.cpp.Link.LinkerOrArchiver; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -51,7 +50,7 @@ public final class LinkCommandLine extends CommandLine { private final ImmutableList buildInfoHeaderArtifacts; private final Iterable linkerInputArtifacts; private final LinkTargetType linkTargetType; - private final LinkStaticness linkStaticness; + private final Link.LinkingMode linkingMode; private final ImmutableList linkopts; @Nullable private final PathFragment toolchainLibrariesSolibDir; private final boolean nativeDeps; @@ -66,7 +65,7 @@ public final class LinkCommandLine extends CommandLine { ImmutableList buildInfoHeaderArtifacts, Iterable linkerInputArtifacts, LinkTargetType linkTargetType, - LinkStaticness linkStaticness, + Link.LinkingMode linkingMode, ImmutableList linkopts, @Nullable PathFragment toolchainLibrariesSolibDir, boolean nativeDeps, @@ -82,7 +81,7 @@ public final class LinkCommandLine extends CommandLine { this.buildInfoHeaderArtifacts = Preconditions.checkNotNull(buildInfoHeaderArtifacts); this.linkerInputArtifacts = Preconditions.checkNotNull(linkerInputArtifacts); this.linkTargetType = Preconditions.checkNotNull(linkTargetType); - this.linkStaticness = Preconditions.checkNotNull(linkStaticness); + this.linkingMode = Preconditions.checkNotNull(linkingMode); this.linkopts = linkopts; this.toolchainLibrariesSolibDir = toolchainLibrariesSolibDir; this.nativeDeps = nativeDeps; @@ -112,11 +111,9 @@ public final class LinkCommandLine extends CommandLine { return linkTargetType; } - /** - * Returns the "staticness" of the link. - */ - public LinkStaticness getLinkStaticness() { - return linkStaticness; + /** Returns the "staticness" of the link. */ + public Link.LinkingMode getLinkingMode() { + return linkingMode; } /** @@ -416,7 +413,7 @@ public final class LinkCommandLine extends CommandLine { private ImmutableList buildInfoHeaderArtifacts = ImmutableList.of(); private Iterable linkerInputArtifacts = ImmutableList.of(); @Nullable private LinkTargetType linkTargetType; - private LinkStaticness linkStaticness = LinkStaticness.FULLY_STATIC; + private Link.LinkingMode linkingMode = Link.LinkingMode.LEGACY_FULLY_STATIC; private ImmutableList linkopts = ImmutableList.of(); @Nullable private PathFragment toolchainLibrariesSolibDir; private boolean nativeDeps; @@ -454,7 +451,7 @@ public final class LinkCommandLine extends CommandLine { buildInfoHeaderArtifacts, linkerInputArtifacts, linkTargetType, - linkStaticness, + linkingMode, linkopts, toolchainLibrariesSolibDir, nativeDeps, @@ -512,11 +509,11 @@ public final class LinkCommandLine extends CommandLine { /** * Sets how static the link is supposed to be. For static target types (see {@link * LinkTargetType#linkerOrArchiver()}}), the {@link #build} method throws an exception if this - * is not {@link LinkStaticness#FULLY_STATIC}. The default setting is {@link - * LinkStaticness#FULLY_STATIC}. + * is not {@link Link.LinkingMode#LEGACY_FULLY_STATIC}. The default setting is {@link + * Link.LinkingMode#LEGACY_FULLY_STATIC}. */ - public Builder setLinkStaticness(LinkStaticness linkStaticness) { - this.linkStaticness = linkStaticness; + public Builder setLinkingMode(Link.LinkingMode linkingMode) { + this.linkingMode = linkingMode; return this; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkingMode.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkingMode.java deleted file mode 100644 index 80db9b7e6b..0000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkingMode.java +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.rules.cpp; - -/** - * This class represents the different linking modes. - */ -public enum LinkingMode { - - /** - * Everything is linked statically; e.g. {@code gcc -static x.o libfoo.a - * libbar.a -lm}. Specified by {@code -static} in linkopts. - */ - FULLY_STATIC, - - /** - * Link binaries statically except for system libraries - * e.g. {@code gcc x.o libfoo.a libbar.a -lm}. Specified by {@code linkstatic=1}. - * - *

This mode applies to executables. - */ - MOSTLY_STATIC, - - /** - * Same as MOSTLY_STATIC, but for shared libraries. - */ - MOSTLY_STATIC_LIBRARIES, - - /** - * All libraries are linked dynamically (if a dynamic version is available), - * e.g. {@code gcc x.o libfoo.so libbar.so -lm}. Specified by {@code - * linkstatic=0}. - */ - DYNAMIC; -} diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java index 4d2e2d067b..4a05540ded 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java @@ -41,8 +41,8 @@ import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.CppSemantics; import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider; import com.google.devtools.build.lib.rules.cpp.Link; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.LinkerInputs; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.util.Fingerprint; @@ -264,7 +264,7 @@ public abstract class NativeDepsHelper { .setCrosstoolInputs(toolchain.getLink()) .addLibraries(linkerInputs) .setLinkType(LinkTargetType.DYNAMIC_LIBRARY) - .setLinkStaticness(LinkStaticness.MOSTLY_STATIC) + .setLinkingMode(LinkingMode.STATIC) .setLibraryIdentifier(libraryIdentifier) .addLinkopts(linkopts) .setNativeDeps(true) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index e79c118830..71ba13cf01 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -113,8 +113,8 @@ import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider; import com.google.devtools.build.lib.rules.cpp.IncludeProcessing; -import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; +import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode; import com.google.devtools.build.lib.rules.cpp.NoProcessing; import com.google.devtools.build.lib.rules.cpp.PrecompiledFiles; import com.google.devtools.build.lib.rules.cpp.UmbrellaHeaderAction; @@ -1152,13 +1152,13 @@ public class CompilationSupport { CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext); CppLinkActionBuilder executableLinkAction = new CppLinkActionBuilder( - ruleContext, - binaryToLink, - toolchain, - fdoSupport, - getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider), - createObjcCppSemantics( - objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null)) + ruleContext, + binaryToLink, + toolchain, + fdoSupport, + getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider), + createObjcCppSemantics( + objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null)) .setMnemonic("ObjcLink") .addActionInputs(bazelBuiltLibraries) .addActionInputs(objcProvider.getCcLibraries()) @@ -1171,7 +1171,7 @@ public class CompilationSupport { .addActionInputs(extraLinkInputs) .addActionInput(inputFileList) .setLinkType(linkType) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .setLinkingMode(LinkingMode.LEGACY_FULLY_STATIC) .addLinkopts(ImmutableList.copyOf(extraLinkArgs)); if (objcConfiguration.generateDsym()) { @@ -1319,19 +1319,19 @@ public class CompilationSupport { .build(); CppLinkAction fullyLinkAction = new CppLinkActionBuilder( - ruleContext, - outputArchive, - ccToolchain, - fdoSupport, - getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider), - createObjcCppSemantics( - objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null)) + ruleContext, + outputArchive, + ccToolchain, + fdoSupport, + getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider), + createObjcCppSemantics( + objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null)) .addActionInputs(objcProvider.getObjcLibraries()) .addActionInputs(objcProvider.getCcLibraries()) .addActionInputs(objcProvider.get(IMPORTED_LIBRARY).toSet()) .setCrosstoolInputs(ccToolchain.getLink()) .setLinkType(LinkTargetType.OBJC_FULLY_LINKED_ARCHIVE) - .setLinkStaticness(LinkStaticness.FULLY_STATIC) + .setLinkingMode(LinkingMode.LEGACY_FULLY_STATIC) .setLibraryIdentifier(libraryIdentifier) .addVariablesExtension(extension) .build(); -- cgit v1.2.3