diff options
author | 2017-11-28 08:23:54 -0800 | |
---|---|---|
committer | 2017-11-28 08:25:25 -0800 | |
commit | c478aea4c872b7ce3395746fd86168376f909284 (patch) | |
tree | efdf1dad7feb2d6bdf28b6a4524a703d56ab1967 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | 0dcf425c840b9b263951b31a6d48965435b206f1 (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')
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; } |