aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2018-05-07 23:52:02 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-07 23:53:03 -0700
commit0c5cc1b0253b57c4d04e324fc36536c094a77a6f (patch)
tree27d38f58f416b1b59247d2c26d8e64c144299870
parenta590dd10f0a3cdb1c42a6e8d2735cde37b5594bc (diff)
Rename LinkStaticness to LinkingMode and unify with the other LinkingMode.
RELNOTES: None. PiperOrigin-RevId: 195777400
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingOutputs.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LibrariesToLinkCollector.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/Link.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/LinkingMode.java46
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java34
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java21
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java11
17 files changed, 176 insertions, 194 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 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<Artifact> filesToBuild,
Iterable<Artifact> 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<TransitiveInfoCollection, Runfiles> 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<String> 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.<String>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<String> 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> 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;
@@ -95,38 +95,37 @@ public class CcLinkingOutputs {
}
/**
+ * Returns the shared libraries that are linked against and therefore also need to be in the
+ * runfiles.
+ */
+ public Iterable<Artifact> getLibrariesForRunfiles(boolean linkingStatically) {
+ List<LibraryToLink> 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.
*
* <p>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']}.
+ * <p>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
- * <code>true</code> for binaries that are linked in fully static or mostly static mode.
+ * @param linkingStatically whether to prefer static over dynamic libraries. Should be <code>true
+ * </code> 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<LibraryToLink> getPreferredLibraries(
- boolean linkingStatically, boolean preferPic) {
+ public List<LibraryToLink> 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<Artifact> getLibrariesForRunfiles(boolean linkingStatically) {
- List<LibraryToLink> 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.<String>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.<String>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.<String>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<Linkstamp> linkstamps;
final ImmutableList<String> 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<Linkstamp> linkstamps,
ImmutableList<String> 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<String> additionalLinkstampDefines = ImmutableList.of();
private final List<String> 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<Artifact, Artifact> 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<LibraryToLink> 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<String> 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<Artifact> buildInfoHeaderArtifacts;
private final Iterable<Artifact> linkerInputArtifacts;
private final LinkTargetType linkTargetType;
- private final LinkStaticness linkStaticness;
+ private final Link.LinkingMode linkingMode;
private final ImmutableList<String> linkopts;
@Nullable private final PathFragment toolchainLibrariesSolibDir;
private final boolean nativeDeps;
@@ -66,7 +65,7 @@ public final class LinkCommandLine extends CommandLine {
ImmutableList<Artifact> buildInfoHeaderArtifacts,
Iterable<Artifact> linkerInputArtifacts,
LinkTargetType linkTargetType,
- LinkStaticness linkStaticness,
+ Link.LinkingMode linkingMode,
ImmutableList<String> 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<Artifact> buildInfoHeaderArtifacts = ImmutableList.of();
private Iterable<Artifact> linkerInputArtifacts = ImmutableList.of();
@Nullable private LinkTargetType linkTargetType;
- private LinkStaticness linkStaticness = LinkStaticness.FULLY_STATIC;
+ private Link.LinkingMode linkingMode = Link.LinkingMode.LEGACY_FULLY_STATIC;
private ImmutableList<String> 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}.
- *
- * <p>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();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 0d50d72362..5ab844b922 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -298,7 +298,7 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
assertThat(cppLinkInfo.getLinkTargetType())
.isEqualTo(action.getLinkCommandLine().getLinkTargetType().name());
assertThat(cppLinkInfo.getLinkStaticness())
- .isEqualTo(action.getLinkCommandLine().getLinkStaticness().name());
+ .isEqualTo(action.getLinkCommandLine().getLinkingMode().name());
Iterable<String> linkstamps = Artifact.asExecPaths(action.getLinkstampObjects());
assertThat(cppLinkInfo.getLinkStampList()).containsExactlyElementsIn(linkstamps);
Iterable<String> buildInfoHeaderArtifacts =
@@ -331,7 +331,7 @@ public class CcLibraryConfiguredTargetTest extends BuildViewTestCase {
assertThat(cppLinkInfo.getLinkTargetType())
.isEqualTo(action.getLinkCommandLine().getLinkTargetType().name());
assertThat(cppLinkInfo.getLinkStaticness())
- .isEqualTo(action.getLinkCommandLine().getLinkStaticness().name());
+ .isEqualTo(action.getLinkCommandLine().getLinkingMode().name());
Iterable<String> linkstamps = Artifact.asExecPaths(action.getLinkstampObjects());
assertThat(cppLinkInfo.getLinkStampList()).containsExactlyElementsIn(linkstamps);
Iterable<String> buildInfoHeaderArtifacts =
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
index 5d00bf5c12..42673d9fa5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
@@ -48,7 +48,6 @@ import com.google.devtools.build.lib.packages.util.MockCcSupport;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariableValue;
import com.google.devtools.build.lib.rules.cpp.CppActionConfigs.CppPlatform;
-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;
@@ -329,7 +328,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
} else {
builder.setLinkType(LinkTargetType.EXECUTABLE);
}
- builder.setLinkStaticness(LinkStaticness.DYNAMIC);
+ builder.setLinkingMode(Link.LinkingMode.DYNAMIC);
builder.setNativeDeps(attributesToFlip.contains(NonStaticAttributes.NATIVE_DEPS));
builder.setUseTestOnlyFlags(
attributesToFlip.contains(NonStaticAttributes.USE_TEST_ONLY_FLAGS));
@@ -507,10 +506,10 @@ public class CppLinkActionTest extends BuildViewTestCase {
.addLibraries(NestedSetBuilder.wrap(Order.LINK_ORDER, libraryInputs))
.setLinkType(type)
.setCrosstoolInputs(NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER))
- .setLinkStaticness(
+ .setLinkingMode(
type.linkerOrArchiver() == LinkerOrArchiver.ARCHIVER
- ? LinkStaticness.FULLY_STATIC
- : LinkStaticness.MOSTLY_STATIC);
+ ? Link.LinkingMode.LEGACY_FULLY_STATIC
+ : Link.LinkingMode.STATIC);
return builder;
}
@@ -627,7 +626,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
public void testStaticLinkWithDynamicIsError() throws Exception {
CppLinkActionBuilder builder =
createLinkBuilder(LinkTargetType.STATIC_LIBRARY)
- .setLinkStaticness(LinkStaticness.DYNAMIC)
+ .setLinkingMode(Link.LinkingMode.DYNAMIC)
.setLibraryIdentifier("foo");
assertError("static library link must be static", builder);
@@ -637,7 +636,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
public void testStaticLinkWithSymbolsCountOutputIsError() throws Exception {
CppLinkActionBuilder builder =
createLinkBuilder(LinkTargetType.STATIC_LIBRARY)
- .setLinkStaticness(LinkStaticness.FULLY_STATIC)
+ .setLinkingMode(Link.LinkingMode.LEGACY_FULLY_STATIC)
.setLibraryIdentifier("foo")
.setSymbolCountsOutput(scratchArtifact("dummySymbolCounts"));
@@ -648,7 +647,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
public void testStaticLinkWithNativeDepsIsError() throws Exception {
CppLinkActionBuilder builder =
createLinkBuilder(LinkTargetType.STATIC_LIBRARY)
- .setLinkStaticness(LinkStaticness.FULLY_STATIC)
+ .setLinkingMode(Link.LinkingMode.LEGACY_FULLY_STATIC)
.setLibraryIdentifier("foo")
.setNativeDeps(true);
@@ -659,7 +658,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
public void testStaticLinkWithWholeArchiveIsError() throws Exception {
CppLinkActionBuilder builder =
createLinkBuilder(LinkTargetType.STATIC_LIBRARY)
- .setLinkStaticness(LinkStaticness.FULLY_STATIC)
+ .setLinkingMode(Link.LinkingMode.LEGACY_FULLY_STATIC)
.setLibraryIdentifier("foo")
.setWholeArchive(true);
@@ -845,7 +844,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
ImmutableList.of(),
ImmutableList.of(),
getMockFeatureConfiguration())
- .setLinkStaticness(LinkStaticness.MOSTLY_STATIC)
+ .setLinkingMode(Link.LinkingMode.STATIC)
.addLinkopts(ImmutableList.of("-pie", "-other", "-pie"))
.setLibraryIdentifier("foo")
.build();
@@ -865,7 +864,7 @@ public class CppLinkActionTest extends BuildViewTestCase {
ImmutableList.of(),
ImmutableList.of(),
getMockFeatureConfiguration())
- .setLinkStaticness(LinkStaticness.MOSTLY_STATIC)
+ .setLinkingMode(Link.LinkingMode.STATIC)
.addLinkopts(ImmutableList.of("-pie", "-other", "-pie"))
.build();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
index 131bc9ce13..ee07c85aa1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoaderTest.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.packages.util.MockCcSupport;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
+import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.testutil.TestConstants;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -536,7 +537,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
// (but test each mode at least once.)
assertThat(
ccProviderA.configureAllLegacyLinkOptions(
- CompilationMode.FASTBUILD, LipoMode.OFF, LinkingMode.FULLY_STATIC))
+ CompilationMode.FASTBUILD, LipoMode.OFF, LinkingMode.LEGACY_FULLY_STATIC))
.containsExactly(
"linker-flag-A-1",
"linker-flag-A-2",
@@ -553,14 +554,14 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
.inOrder();
assertThat(
ccProviderA.configureAllLegacyLinkOptions(
- CompilationMode.OPT, LipoMode.OFF, LinkingMode.FULLY_STATIC))
+ CompilationMode.OPT, LipoMode.OFF, LinkingMode.LEGACY_FULLY_STATIC))
.containsExactly(
"linker-flag-A-1", "linker-flag-A-2", "fully-static-flag-A-1", "fully-static-flag-A-2")
.inOrder();
assertThat(
ccProviderA.configureAllLegacyLinkOptions(
- CompilationMode.OPT, LipoMode.BINARY, LinkingMode.FULLY_STATIC))
+ CompilationMode.OPT, LipoMode.BINARY, LinkingMode.LEGACY_FULLY_STATIC))
.containsExactly(
"linker-flag-A-1", "linker-flag-A-2", "fully-static-flag-A-1", "fully-static-flag-A-2")
.inOrder();
@@ -629,7 +630,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
assertThat(CppHelper.getDynamicLinkOptions(toolchainC, ccProviderC, true)).isEmpty();
assertThat(
ccProviderC.configureAllLegacyLinkOptions(
- CompilationMode.FASTBUILD, LipoMode.OFF, LinkingMode.FULLY_STATIC))
+ CompilationMode.FASTBUILD, LipoMode.OFF, LinkingMode.LEGACY_FULLY_STATIC))
.isEmpty();
assertThat(
ccProviderC.configureAllLegacyLinkOptions(
@@ -637,7 +638,7 @@ public class CrosstoolConfigurationLoaderTest extends AnalysisTestCase {
.isEmpty();
assertThat(
ccProviderC.configureAllLegacyLinkOptions(
- CompilationMode.OPT, LipoMode.OFF, LinkingMode.FULLY_STATIC))
+ CompilationMode.OPT, LipoMode.OFF, LinkingMode.LEGACY_FULLY_STATIC))
.isEmpty();
assertThat(ccProviderC.getObjCopyOptionsForEmbedding()).isEmpty();
assertThat(ccProviderC.getLdOptionsForEmbedding()).isEmpty();