Bazel exports environment variable values to apple toolchains as build
variables.
Once this change is released, client CROSSTOOLs can implement environment variables
in a feature using an env_set.
--
MOS_MIGRATED_REVID=140027562
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 62467d0..2416e0f 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
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.apple.cpp;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AnalysisUtils;
@@ -44,12 +45,29 @@
public static final String SDK_DIR_KEY = "sdk_dir";
public static final String SDK_FRAMEWORK_DIR_KEY = "sdk_framework_dir";
public static final String PLATFORM_DEVELOPER_FRAMEWORK_DIR = "platform_developer_framework_dir";
+
+ @VisibleForTesting
+ public static final String XCODE_VERISON_OVERRIDE_VALUE_KEY = "xcode_version_override_value";
+
+ @VisibleForTesting
+ public static final String APPLE_SDK_VERSION_OVERRIDE_VALUE_KEY =
+ "apple_sdk_version_override_value";
+
+ @VisibleForTesting
+ public static final String APPLE_SDK_PLATFORM_VALUE_KEY = "apple_sdk_platform_value";
@Override
protected Map<String, String> getBuildVariables(RuleContext ruleContext) {
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
+
+ if (!appleConfiguration.getXcodeVersion().isPresent()) {
+ ruleContext.ruleError("Xcode version must be specified to use an Apple CROSSTOOL");
+ }
+
Platform platform = appleConfiguration.getSingleArchPlatform();
+ Map<String, String> appleEnv = getEnvironment(ruleContext);
+
return ImmutableMap.<String, String>builder()
.put(
XCODE_VERSION_KEY,
@@ -76,9 +94,18 @@
.put(
PLATFORM_DEVELOPER_FRAMEWORK_DIR,
AppleToolchain.platformDeveloperFrameworkDir(appleConfiguration))
+ .put(
+ XCODE_VERISON_OVERRIDE_VALUE_KEY,
+ appleEnv.getOrDefault(AppleConfiguration.XCODE_VERSION_ENV_NAME, ""))
+ .put(
+ APPLE_SDK_VERSION_OVERRIDE_VALUE_KEY,
+ appleEnv.getOrDefault(AppleConfiguration.APPLE_SDK_VERSION_ENV_NAME, ""))
+ .put(
+ APPLE_SDK_PLATFORM_VALUE_KEY,
+ appleEnv.getOrDefault(AppleConfiguration.APPLE_SDK_PLATFORM_ENV_NAME, ""))
.build();
}
-
+
@Override
protected NestedSet<Artifact> fullInputsForLink(
RuleContext ruleContext, NestedSet<Artifact> link) {
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
index f3d488f..c5a5629 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariablesTest.java
@@ -57,11 +57,13 @@
return (CppLinkAction) getGeneratingAction(linkerOutput);
}
- private Variables getLinkBuildVariables(ConfiguredTarget target, Link.LinkTargetType type) {
+ /** Returns active build variables for a link action of given type for given target. */
+ protected Variables getLinkBuildVariables(ConfiguredTarget target, Link.LinkTargetType type) {
return getCppLinkAction(target, type).getLinkCommandLine().getBuildVariables();
}
- private List<String> getVariableValue(Variables variables, String variable) throws Exception {
+ /** Returns the value of a given variable in context of the given Variables instance. */
+ protected List<String> getVariableValue(Variables variables, String variable) throws Exception {
FeatureConfiguration mockFeatureConfiguration =
CcToolchainFeaturesTest.buildFeatures(
"feature {",