aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-11-28 08:23:54 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-28 08:25:25 -0800
commitc478aea4c872b7ce3395746fd86168376f909284 (patch)
treeefdf1dad7feb2d6bdf28b6a4524a703d56ab1967 /src/main/java/com/google/devtools/build/lib/rules/cpp
parent0dcf425c840b9b263951b31a6d48965435b206f1 (diff)
Migrate callsites of CppConfiguation#getCompiler, #getTargetLibc, #getCpu to
CcToolchainProvider. Toolchain information must be removed from CppConfiguration to allow the c++ rules to use hermetic platforms. PiperOrigin-RevId: 177163880
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java9
6 files changed, 35 insertions, 10 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 d31815208a..627428cb30 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
@@ -482,7 +482,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
}
// Support test execution on darwin.
- if (ApplePlatform.isApplePlatform(cppConfiguration.getTargetCpu())
+ if (ApplePlatform.isApplePlatform(ccToolchain.getTargetCpu())
&& TargetUtils.isTestRule(ruleContext.getRule())) {
ruleBuilder.addNativeDeclaredProvider(
new ExecutionInfo(ImmutableMap.of(ExecutionRequirements.REQUIRES_DARWIN, "")));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index efd1adefe2..053e56f930 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -141,8 +141,7 @@ public final class CcCommon {
result = ImmutableList.of();
}
- if (ApplePlatform.isApplePlatform(cppConfiguration.getTargetCpu())
- && result.contains("-static")) {
+ if (ApplePlatform.isApplePlatform(ccToolchain.getTargetCpu()) && result.contains("-static")) {
ruleContext.attributeError(
"linkopts", "Apple builds do not support statically linked binaries");
}
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 f85acefc70..836b0786a7 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
@@ -183,7 +183,6 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
private Artifact convertLLVMRawProfileToIndexed(
Path fdoProfile,
CppToolchainInfo toolchainInfo,
- CppConfiguration cppConfiguration,
RuleContext ruleContext)
throws InterruptedException {
@@ -216,7 +215,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
// TODO(zhayu): find a way to avoid hard-coding cpu architecture here (b/65582760)
String rawProfileFileName = "fdocontrolz_profile.profraw";
- String cpu = cppConfiguration.getTargetCpu();
+ String cpu = toolchainInfo.getTargetCpu();
if (!"k8".equals(cpu)) {
rawProfileFileName = "fdocontrolz_profile-" + cpu + ".profraw";
}
@@ -488,7 +487,7 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
Artifact profileArtifact = null;
if (cppConfiguration.isLLVMOptimizedFdo(toolchainInfo.isLLVMCompiler())) {
profileArtifact =
- convertLLVMRawProfileToIndexed(fdoZip, toolchainInfo, cppConfiguration, ruleContext);
+ convertLLVMRawProfileToIndexed(fdoZip, toolchainInfo, ruleContext);
if (ruleContext.hasErrors()) {
return null;
}
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 7341b84a88..172a8a98e5 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
@@ -468,29 +468,47 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
/**
* Returns the compiler version string (e.g. "gcc-4.1.1").
+ *
+ * <p>Deprecated: Use {@link CcToolchainProvider#getCompiler()}
*/
+ // TODO(b/68038647): Remove once make variables are no longer derived from CppConfiguration.
@SkylarkCallable(name = "compiler", structField = true, doc = "C++ compiler.")
+ @Deprecated
public String getCompiler() {
return cppToolchainInfo.getCompiler();
}
/**
* Returns the libc version string (e.g. "glibc-2.2.2").
+ *
+ * <p>Deprecated: Use {@link CcToolchainProvider#getTargetLibc()}
*/
+ // TODO(b/68038647): Remove once make variables are no longer derived from CppConfiguration.
@SkylarkCallable(name = "libc", structField = true, doc = "libc version string.")
+ @Deprecated
public String getTargetLibc() {
return cppToolchainInfo.getTargetLibc();
}
/**
* Returns the target architecture using blaze-specific constants (e.g. "piii").
+ *
+ * <p>Deprecated: Use {@link CcToolchainProvider#getTargetCpu()}
*/
+ // TODO(b/68038647): Remove once skylark callers are migrated.
@SkylarkCallable(name = "cpu", structField = true, doc = "Target CPU of the C++ toolchain.")
+ @Deprecated
public String getTargetCpu() {
return cppToolchainInfo.getTargetCpu();
}
- /** Unused, for compatibility with things internal to Google. */
+ /**
+ * Unused, for compatibility with things internal to Google.
+ *
+ * <p>Deprecated: Use platforms.
+ */
+ // TODO(b/64384912): Remove once c++ platforms are in use.
+ @Deprecated
public String getTargetOS() {
return cppToolchainInfo.getTargetOS();
}
@@ -1278,7 +1296,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
this::getToolPathFragment,
getTargetLibc(),
getCompiler(),
- getTargetCpu(),
+ desiredCpu,
crosstoolTopPathFragment,
cppToolchainInfo.getAbiGlibcVersion(),
cppToolchainInfo.getAbi(),
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 d02867f28c..a9d05580f5 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
@@ -118,6 +118,7 @@ public final class CppLinkAction extends AbstractAction
private final PathFragment ldExecutable;
private final String hostSystemName;
+ private final String targetCpu;
private final Iterable<Artifact> mandatoryInputs;
@@ -182,6 +183,7 @@ public final class CppLinkAction extends AbstractAction
this.executionRequirements = executionRequirements;
this.ldExecutable = toolchain.getToolPathFragment(Tool.LD);
this.hostSystemName = toolchain.getHostSystemName();
+ this.targetCpu = toolchain.getTargetCpu();
}
private CppConfiguration getCppConfiguration() {
@@ -190,7 +192,7 @@ public final class CppLinkAction extends AbstractAction
@VisibleForTesting
public String getTargetCpu() {
- return getCppConfiguration().getTargetCpu();
+ return targetCpu;
}
public String getHostSystemName() {
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 18bdea04f1..2502dc0d32 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
@@ -21,10 +21,12 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
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.CppConfiguration.FlagList;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
@@ -52,6 +54,7 @@ import java.util.Set;
* <p>This wrapper class is used to re-plumb information so that it's eventually accessed through
* {@link CcToolchainProvider} instead of {@link CppConfiguration}.
*/
+@Immutable
public final class CppToolchainInfo {
private final PathFragment crosstoolTopPathFragment;
@@ -442,7 +445,11 @@ public final class CppToolchainInfo {
return targetLibc;
}
- /** Returns the target architecture using blaze-specific constants (e.g. "piii"). */
+ /**
+ * Returns the target architecture using blaze-specific constants (e.g. "piii").
+ *
+ * <p>Equivalent to {@link BuildConfiguration#getCpu()}
+ */
public String getTargetCpu() {
return targetCpu;
}