diff options
author | Chris Parsons <cparsons@google.com> | 2016-06-15 18:57:28 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-06-16 09:01:09 +0000 |
commit | cedd8d18afc42d328153056470024a1bd98c5310 (patch) | |
tree | 765bfe3b32cced6ace3ed15d2c288a59fb580f95 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 94268c80000593d5f226595087f5cdfaab87ddbe (diff) |
Pass toolchain build variables to C++ link actions.
Also add platform sdk versions to the build variables defined by AppleCcToolchain, so that these values may be referenced in crosstool config.
--
MOS_MIGRATED_REVID=124976362
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
3 files changed, 40 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java index 87c4610d17..b1836b4c7e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.DottedVersion; +import com.google.devtools.build.lib.rules.apple.Platform; import com.google.devtools.build.lib.rules.cpp.CcToolchain; import java.util.Map; @@ -29,13 +30,27 @@ public class AppleCcToolchain extends CcToolchain { // TODO(bazel-team): Compute default based on local Xcode instead of hardcoded 7.2. private static final DottedVersion DEFAULT_XCODE_VERSION = DottedVersion.fromString("7.2"); - public static final String XCODE_VERSION_KEY = "xcode_version"; + private static final String XCODE_VERSION_KEY = "xcode_version"; + private static final String IOS_SDK_VERSION_KEY = "ios_sdk_version"; + private static final String MACOSX_SDK_VERSION_KEY = "macosx_sdk_version"; + private static final String TVOS_SDK_VERSION_KEY = "appletvos_sdk_version"; + private static final String WATCHOS_SDK_VERSION_KEY = "watchos_sdk_version"; @Override protected Map<String, String> getBuildVariables(RuleContext ruleContext) { AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); - return ImmutableMap.of( - XCODE_VERSION_KEY, - appleConfiguration.getXcodeVersion().or(DEFAULT_XCODE_VERSION).toString()); + + return ImmutableMap.<String, String>builder() + .put(XCODE_VERSION_KEY, + appleConfiguration.getXcodeVersion().or(DEFAULT_XCODE_VERSION).toString()) + .put(IOS_SDK_VERSION_KEY, + appleConfiguration.getSdkVersionForPlatform(Platform.IOS_SIMULATOR).toString()) + .put(MACOSX_SDK_VERSION_KEY, + appleConfiguration.getSdkVersionForPlatform(Platform.MACOS_X).toString()) + .put(TVOS_SDK_VERSION_KEY, + appleConfiguration.getSdkVersionForPlatform(Platform.TVOS_SIMULATOR).toString()) + .put(WATCHOS_SDK_VERSION_KEY, + appleConfiguration.getSdkVersionForPlatform(Platform.WATCHOS_SIMULATOR).toString()) + .build(); } } 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 3df4a4ea3f..2a53306661 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 @@ -223,6 +223,10 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { linkActionBuilder.setLinkStaticness(linkStaticness); linkActionBuilder.setFake(fake); linkActionBuilder.setFeatureConfiguration(featureConfiguration); + CcToolchainFeatures.Variables.Builder buildVariables = + new CcToolchainFeatures.Variables.Builder(); + buildVariables.addAllVariables(CppHelper.getToolchain(ruleContext).getBuildVariables()); + linkActionBuilder.setBuildVariables(buildVariables.build()); if (CppLinkAction.enableSymbolsCounts(cppConfiguration, fake, linkType)) { linkActionBuilder.setSymbolCountsOutput(ruleContext.getPackageRelativeArtifact( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index 33f894f3b0..7df5db8a40 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -356,7 +356,12 @@ public final class CppModel { return result; } - private void setupBuildVariables( + private CcToolchainFeatures.Variables linkBuildVariables() { + return new CcToolchainFeatures.Variables.Builder() + .addAllVariables(CppHelper.getToolchain(ruleContext).getBuildVariables()).build(); + } + + private void setupCompileBuildVariables( CppCompileActionBuilder builder, boolean usePic, PathFragment ccRelativeName, @@ -523,7 +528,7 @@ public final class CppModel { .setDotdFile(outputName, ".h.d") // If we generate pic actions, we prefer the header actions to use the pic artifacts. .setPicMode(this.getGeneratePicActions()); - setupBuildVariables(builder, this.getGeneratePicActions(), /*ccRelativeName=*/null, + setupCompileBuildVariables(builder, this.getGeneratePicActions(), /*ccRelativeName=*/null, /*autoFdoImportPath=*/null, /*gcnoFile=*/null, /*dwoFile=*/null); semantics.finalizeCompileActionBuilder(ruleContext, builder); CppCompileAction compileAction = builder.build(); @@ -571,7 +576,7 @@ public final class CppModel { enableCoverage ? ruleContext.getRelatedArtifact(outputName, ".pic.gcno") : null; Artifact dwoFile = generateDwo ? getDwoFile(outputFile) : null; - setupBuildVariables(picBuilder, /*usePic=*/ true, ccRelativeName, + setupCompileBuildVariables(picBuilder, /*usePic=*/ true, ccRelativeName, sourceArtifact.getExecPath(), gcnoFile, dwoFile); if (maySaveTemps) { @@ -617,8 +622,8 @@ public final class CppModel { Artifact noPicDwoFile = generateDwo ? getDwoFile(noPicOutputFile) : null; - setupBuildVariables(builder, /*usePic=*/false, ccRelativeName, sourceArtifact.getExecPath(), - gcnoFile, noPicDwoFile); + setupCompileBuildVariables(builder, /*usePic=*/false, ccRelativeName, + sourceArtifact.getExecPath(), gcnoFile, noPicDwoFile); if (maySaveTemps) { result.addTemps( @@ -673,7 +678,7 @@ public final class CppModel { .setDotdFile(outputName, dependencyFileExtension) .setTempOutputFile(tempOutputName); - setupBuildVariables(builder, usePic, ccRelativeName, execPath, /*gcnoFile*/ null, + setupCompileBuildVariables(builder, usePic, ccRelativeName, execPath, /*gcnoFile*/ null, /*dwoFile*/ null); semantics.finalizeCompileActionBuilder(ruleContext, builder); CppCompileAction action = builder.build(); @@ -735,6 +740,7 @@ public final class CppModel { .setLinkType(linkType) .setLinkStaticness(LinkStaticness.FULLY_STATIC) .setFeatureConfiguration(featureConfiguration) + .setBuildVariables(linkBuildVariables()) .build(); env.registerAction(maybePicAction); result.addStaticLibrary(maybePicAction.getOutputLibrary()); @@ -756,6 +762,7 @@ public final class CppModel { .setLinkType(picLinkType) .setLinkStaticness(LinkStaticness.FULLY_STATIC) .setFeatureConfiguration(featureConfiguration) + .setBuildVariables(linkBuildVariables()) .build(); env.registerAction(picAction); result.addPicStaticLibrary(picAction.getOutputLibrary()); @@ -781,7 +788,7 @@ public final class CppModel { sonameLinkopts = ImmutableList.of("-Wl,-soname=" + SolibSymlinkAction.getDynamicLibrarySoname(soImpl.getRootRelativePath(), false)); } - + // Should we also link in any libraries that this library depends on? // That is required on some systems... CppLinkAction action = @@ -797,6 +804,7 @@ public final class CppModel { CppHelper.getToolchain(ruleContext).getDynamicRuntimeLinkMiddleman(), CppHelper.getToolchain(ruleContext).getDynamicRuntimeLinkInputs()) .setFeatureConfiguration(featureConfiguration) + .setBuildVariables(linkBuildVariables()) .build(); env.registerAction(action); @@ -890,7 +898,7 @@ public final class CppModel { dBuilder .setOutputFile(ruleContext.getRelatedArtifact(outputName, picExt + iExt)) .setDotdFile(outputName, picExt + iExt + ".d"); - setupBuildVariables(dBuilder, usePic, ccRelativeName, source.getExecPath(), null, null); + setupCompileBuildVariables(dBuilder, usePic, ccRelativeName, source.getExecPath(), null, null); semantics.finalizeCompileActionBuilder(ruleContext, dBuilder); CppCompileAction dAction = dBuilder.build(); ruleContext.registerAction(dAction); @@ -899,7 +907,7 @@ public final class CppModel { sdBuilder .setOutputFile(ruleContext.getRelatedArtifact(outputName, picExt + ".s")) .setDotdFile(outputName, picExt + ".s.d"); - setupBuildVariables(sdBuilder, usePic, ccRelativeName, source.getExecPath(), null, null); + setupCompileBuildVariables(sdBuilder, usePic, ccRelativeName, source.getExecPath(), null, null); semantics.finalizeCompileActionBuilder(ruleContext, sdBuilder); CppCompileAction sdAction = sdBuilder.build(); ruleContext.registerAction(sdAction); |