aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-10-30 15:02:17 -0400
committerGravatar John Cater <jcater@google.com>2017-10-31 10:37:29 -0400
commitac94fea7dd2f0ba7bc1ddb3875a71ba5f3ca8cb0 (patch)
tree37001aa2e6572d793683c18b5d6968a9d8f6b7a2 /src/main/java/com
parent8d874b0f8fd8b562945e94a4099cf31687afd9f0 (diff)
Migrate CppConfiguration#supportsGoldLinker, supportsDynamicLinker,
supportsEmbeddedRuntimes, supportsExecOrigin to CcToolchainProvider. PiperOrigin-RevId: 173928009
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java2
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();