diff options
Diffstat (limited to 'src/main/java')
8 files changed, 43 insertions, 42 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 c4a342024f..ef193d0538 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 @@ -287,7 +287,8 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { linkActionBuilder.setLinkStaticness(linkStaticness); linkActionBuilder.setFake(fake); - if (CppLinkAction.enableSymbolsCounts(cppConfiguration, fake, linkType)) { + if (CppLinkAction.enableSymbolsCounts( + cppConfiguration, ccToolchain.supportsGoldLinker(), fake, linkType)) { linkActionBuilder.setSymbolCountsOutput(ruleContext.getBinArtifact( CppLinkAction.symbolCountsFileName(binaryPath))); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index 96681370bd..8fec3dce88 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -139,8 +139,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { .addLinkstamps(ruleContext.getPrerequisites("linkstamp", Mode.TARGET)); Artifact soImplArtifact = null; - boolean supportsDynamicLinker = - ruleContext.getFragment(CppConfiguration.class).supportsDynamicLinker(); + boolean supportsDynamicLinker = ccToolchain.supportsDynamicLinker(); // TODO(djasper): This is hacky. We should actually try to figure out whether we generate // ccOutputs. boolean createDynamicLibrary = diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java index 2e7c6b8299..4ae834e254 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java @@ -297,7 +297,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory { toolchainInfo.getStaticRuntimeLibsLabel()); final NestedSet<Artifact> staticRuntimeLinkInputs; final Artifact staticRuntimeLinkMiddleman; - if (cppConfiguration.supportsEmbeddedRuntimes()) { + if (toolchainInfo.supportsEmbeddedRuntimes()) { staticRuntimeLinkInputs = staticRuntimeLibDep .getProvider(FileProvider.class) .getFilesToBuild(); @@ -325,7 +325,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory { NestedSet<Artifact> dynamicRuntimeLinkSymlinks; List<Artifact> dynamicRuntimeLinkInputs = new ArrayList<>(); Artifact dynamicRuntimeLinkMiddleman; - if (cppConfiguration.supportsEmbeddedRuntimes()) { + if (toolchainInfo.supportsEmbeddedRuntimes()) { NestedSetBuilder<Artifact> dynamicRuntimeLinkSymlinksBuilder = NestedSetBuilder.stableOrder(); for (Artifact artifact : dynamicRuntimeLibDep .getProvider(FileProvider.class).getFilesToBuild()) { 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 72ab48955a..0b4223a843 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 @@ -311,6 +311,36 @@ public final class CcToolchainProvider extends ToolchainInfo { return cppConfiguration == null ? null : cppConfiguration.getCompilationMode(); } + /** + * Returns whether the toolchain supports the gold linker. + */ + public boolean supportsGoldLinker() { + return toolchainInfo.supportsGoldLinker(); + } + + /** + * Returns whether the toolchain supports dynamic linking. + */ + public boolean supportsDynamicLinker() { + return toolchainInfo.supportsDynamicLinker(); + } + + /** + * Returns whether the toolchain supports linking C/C++ runtime libraries + * supplied inside the toolchain distribution. + */ + public boolean supportsEmbeddedRuntimes() { + return toolchainInfo.supportsEmbeddedRuntimes(); + } + + /** + * Returns whether the toolchain supports EXEC_ORIGIN libraries resolution. + */ + public boolean supportsExecOrigin() { + // We're rolling out support for this in the same release that also supports embedded runtimes. + return toolchainInfo.supportsEmbeddedRuntimes(); + } + @Nullable public CppConfiguration getCppConfiguration() { return cppConfiguration; 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 4cd635ff82..efa162908c 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 @@ -620,13 +620,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { } /** - * Returns whether the toolchain supports the gold linker. - */ - public boolean supportsGoldLinker() { - return cppToolchainInfo.supportsGoldLinker(); - } - - /** * Returns whether the toolchain supports the --start-lib/--end-lib options. */ public boolean supportsStartEndLib() { @@ -634,13 +627,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { } /** - * Returns whether the toolchain supports dynamic linking. - */ - public boolean supportsDynamicLinker() { - return cppToolchainInfo.supportsDynamicLinker(); - } - - /** * Returns whether this toolchain supports interface shared objects. * * <p>Should be true if this toolchain generates ELF objects. @@ -650,22 +636,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment { } /** - * Returns whether the toolchain supports linking C/C++ runtime libraries - * supplied inside the toolchain distribution. - */ - public boolean supportsEmbeddedRuntimes() { - return cppToolchainInfo.supportsEmbeddedRuntimes(); - } - - /** - * Returns whether the toolchain supports EXEC_ORIGIN libraries resolution. - */ - public boolean supportsExecOrigin() { - // We're rolling out support for this in the same release that also supports embedded runtimes. - return cppToolchainInfo.supportsEmbeddedRuntimes(); - } - - /** * Returns whether the toolchain supports "Fission" C++ builds, i.e. builds * where compilation partitions object code and debug symbols into separate * output files. 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 63a8b6ce88..609cd94d98 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 @@ -534,13 +534,14 @@ public final class CppLinkAction extends AbstractAction return mandatoryInputs; } - /** - * Determines whether or not this link should output a symbol counts file. - */ + /** Determines whether or not this link should output a symbol counts file. */ public static boolean enableSymbolsCounts( - CppConfiguration cppConfiguration, boolean fake, LinkTargetType linkType) { + CppConfiguration cppConfiguration, + boolean supportsGoldLinker, + boolean fake, + LinkTargetType linkType) { return cppConfiguration.getSymbolCounts() - && cppConfiguration.supportsGoldLinker() + && supportsGoldLinker && linkType == LinkTargetType.EXECUTABLE && !fake; } 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 5c2c2f6063..20432a7cd2 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 @@ -292,7 +292,7 @@ public class CppLinkActionBuilder { this.cppConfiguration = configuration.getFragment(CppConfiguration.class); this.toolchain = toolchain; this.fdoSupport = fdoSupport; - if (cppConfiguration.supportsEmbeddedRuntimes() && toolchain != null) { + if (toolchain.supportsEmbeddedRuntimes() && toolchain != null) { runtimeSolibDir = toolchain.getDynamicRuntimeSolibDir(); } this.featureConfiguration = featureConfiguration; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java index 2e70824d71..b81bf4cf45 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java @@ -230,7 +230,7 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect helper.enableCcNativeLibrariesProvider(); // TODO(dougk): Configure output artifact with action_config // once proto compile action is configurable from the crosstool. - if (!ruleContext.getFragment(CppConfiguration.class).supportsDynamicLinker()) { + if (!ccToolchain(ruleContext).supportsDynamicLinker()) { helper.setCreateDynamicLibrary(false); } TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime(); |