aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-06-15 18:57:28 +0000
committerGravatar Yue Gan <yueg@google.com>2016-06-16 09:01:09 +0000
commitcedd8d18afc42d328153056470024a1bd98c5310 (patch)
tree765bfe3b32cced6ace3ed15d2c288a59fb580f95 /src/main/java/com/google/devtools/build/lib
parent94268c80000593d5f226595087f5cdfaab87ddbe (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java26
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);