aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-10-16 11:25:18 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-10-16 17:48:57 +0200
commit22670a4e5abb879ebd5e41294f6aa0960346f4cf (patch)
treedc27a2a43eec21fea912a57d1a1d6ba0783a51ae /src/main
parent95e41675f94bff0dcec027b5516ae07a045dfbfa (diff)
Export apple_host_system_env and target_apple_env through apple_common (as opposed to only through ctx.fragments.apple)
Progress towards #3424. RELNOTES: None. PiperOrigin-RevId: 172299240
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java90
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/README.md1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java3
15 files changed, 164 insertions, 94 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 752bf64e48..cc77b96018 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -233,62 +233,74 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
* Returns a map of environment variables (derived from configuration) that should be propagated
* for actions pertaining to the given apple platform. Keys are variable names and values are
* their corresponding values.
+ *
+ * @deprecated use {@link #appleTargetPlatformEnv(ApplePlatform, DottedVersion) instead)}.
*/
+ @Deprecated
@SkylarkCallable(
- name = "target_apple_env",
- doc = "Returns a <code>dict</code> of environment variables that should be set for actions "
- + "that build targets of the given Apple platform type. For example, this dictionary "
- + "contains variables that denote the platform name and SDK version with which to "
- + "build. The keys are variable names and the values are their corresponding values.")
+ name = "target_apple_env",
+ doc =
+ "Returns a <code>dict</code> of environment variables that should be set for actions "
+ + "that build targets of the given Apple platform type. For example, this dictionary "
+ + "contains variables that denote the platform name and SDK version with which to "
+ + "build. The keys are variable names and the values are their corresponding values."
+ )
+ // Bug tracking the removal of this method: https://github.com/bazelbuild/bazel/issues/3424
public ImmutableMap<String, String> getTargetAppleEnvironment(ApplePlatform platform) {
- ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.builder();
- mapBuilder.putAll(appleTargetPlatformEnv(platform));
- return mapBuilder.build();
+ return appleTargetPlatformEnv(platform, getSdkVersionForPlatform(platform));
+ }
+
+ /**
+ * Returns a map of environment variables (derived from configuration) that should be propagated
+ * for actions pertaining to building applications for apple platforms. These environment
+ * variables are needed to use apple toolkits. Keys are variable names and values are their
+ * corresponding values.
+ */
+ public static ImmutableMap <String, String> appleTargetPlatformEnv(
+ ApplePlatform platform, DottedVersion sdkVersion) {
+ ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
+
+ builder
+ .put(AppleConfiguration.APPLE_SDK_VERSION_ENV_NAME,
+ sdkVersion.toStringWithMinimumComponents(2))
+ .put(AppleConfiguration.APPLE_SDK_PLATFORM_ENV_NAME,
+ platform.getNameInPlist());
+
+ return builder.build();
}
/**
* Returns a map of environment variables that should be propagated for actions that build on an
* apple host system. These environment variables are needed by the apple toolchain. Keys are
* variable names and values are their corresponding values.
+ *
+ * @deprecated use {@link #getXcodeVersionEnv(DottedVersion)} instead}.
*/
@SkylarkCallable(
- name = "apple_host_system_env",
- doc = "Returns a <a href='dict.html'>dict</a> of environment variables that should be set "
- + "for actions that need to run build tools on an Apple host system, such as the version "
- + "of Xcode that should be used. The keys are variable names and the values are their "
- + "corresponding values.")
+ name = "apple_host_system_env",
+ doc =
+ "Returns a <a href='dict.html'>dict</a> of environment variables that should be set "
+ + "for actions that need to run build tools on an Apple host system, such as the "
+ + "version of Xcode that should be used. The keys are variable names and the values "
+ + "are their corresponding values."
+ )
+ @Deprecated
+ // Bug tracking the removal of this method: https://github.com/bazelbuild/bazel/issues/3424
public ImmutableMap<String, String> getAppleHostSystemEnv() {
- if (xcodeVersion != null) {
- return getXcodeVersionEnv(xcodeVersion);
- } else {
- return ImmutableMap.of();
- }
+ return getXcodeVersionEnv(xcodeVersion);
}
/**
- * Returns a map of environment variables that should be propagated for actions that require
- * a version of xcode to be explicitly declared. Keys are variable names and values are their
- * corresponding values.
- */
- public ImmutableMap<String, String> getXcodeVersionEnv(DottedVersion xcodeVersion) {
- return ImmutableMap.of(AppleConfiguration.XCODE_VERSION_ENV_NAME, xcodeVersion.toString());
- }
-
- /**
- * Returns a map of environment variables (derived from configuration) that should be propagated
- * for actions pertaining to building applications for apple platforms. These environment
- * variables are needed to use apple toolkits. Keys are variable names and values are their
+ * Returns a map of environment variables that should be propagated for actions that require a
+ * version of xcode to be explicitly declared. Keys are variable names and values are their
* corresponding values.
*/
- public Map<String, String> appleTargetPlatformEnv(ApplePlatform platform) {
- ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
-
- String sdkVersion = getSdkVersionForPlatform(platform).toStringWithMinimumComponents(2);
- builder
- .put(AppleConfiguration.APPLE_SDK_VERSION_ENV_NAME, sdkVersion)
- .put(AppleConfiguration.APPLE_SDK_PLATFORM_ENV_NAME, platform.getNameInPlist());
-
- return builder.build();
+ public static ImmutableMap<String, String> getXcodeVersionEnv(DottedVersion xcodeVersion) {
+ if (xcodeVersion != null) {
+ return ImmutableMap.of(AppleConfiguration.XCODE_VERSION_ENV_NAME, xcodeVersion.toString());
+ } else {
+ return ImmutableMap.of();
+ }
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
index 9749a9eb80..7444c45bc0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfig.java
@@ -45,6 +45,7 @@ import javax.annotation.Nullable;
* Implementation for the {@code xcode_config} rule.
*/
public class XcodeConfig implements RuleConfiguredTargetFactory {
+
private static ImmutableList<XcodeVersionRuleData> getAvailableVersions(
ConfigurationEnvironment env, Rule xcodeConfigTarget)
throws InvalidConfigurationException, InterruptedException {
@@ -92,6 +93,7 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
* An exception that signals that an Xcode config setup was invalid.
*/
public static class XcodeConfigException extends Exception {
+
XcodeConfigException(String reason) {
super(reason);
}
@@ -149,18 +151,17 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
.addNativeDeclaredProvider(xcodeVersionProperties)
.build();
}
-
+
/**
* Uses the {@link AppleCommandLineOptions#xcodeVersion} and {@link
* AppleCommandLineOptions#xcodeVersionConfig} command line options to determine and return the
* effective xcode version and its properties.
*
- * @param requireDefinedVersions whether the version config requires an explicitly defined version
* @param xcodeVersionOverrideFlag the value of the {@code --xcode_version} command line flag
* @param xcodeVersions the Xcode versions listed in the {@code xcode_config} rule
* @param defaultVersion the default Xcode version in the {@code xcode_config} rule.
- * @throws XcodeConfigException if the options given (or configuration targets) were
- * malformed and thus the xcode version could not be determined
+ * @throws XcodeConfigException if the options given (or configuration targets) were malformed and
+ * thus the xcode version could not be determined
*/
static XcodeVersionProperties resolveXcodeVersion(
String xcodeVersionOverrideFlag,
@@ -168,9 +169,10 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
XcodeVersionRuleData defaultVersion)
throws XcodeConfigException {
if (defaultVersion != null
- && Iterables.isEmpty(Iterables.filter(
- xcodeVersions,
- ruleData -> ruleData.getLabel().equals(defaultVersion.getLabel())))) {
+ && Iterables.isEmpty(
+ Iterables.filter(
+ xcodeVersions,
+ ruleData -> ruleData.getLabel().equals(defaultVersion.getLabel())))) {
throw new XcodeConfigException(
String.format("default label '%s' must be contained in versions attribute",
defaultVersion.getLabel()));
@@ -246,12 +248,11 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
* Returns a map where keys are "names" of xcode versions as defined by the configuration target,
* and values are the rule data objects which contain information regarding that xcode version.
*
- * @throws XcodeConfigException if there are duplicate aliases (if two xcode versions
- * were registered to the same alias)
+ * @throws XcodeConfigException if there are duplicate aliases (if two xcode versions were
+ * registered to the same alias)
*/
private static Map<String, XcodeVersionRuleData> aliasesToVersionMap(
- Iterable<XcodeVersionRuleData> xcodeVersionRules)
- throws XcodeConfigException {
+ Iterable<XcodeVersionRuleData> xcodeVersionRules) throws XcodeConfigException {
Map<String, XcodeVersionRuleData> aliasesToXcodeRules = Maps.newLinkedHashMap();
for (XcodeVersionRuleData xcodeVersionRule : xcodeVersionRules) {
for (String alias : xcodeVersionRule.getAliases()) {
@@ -271,13 +272,13 @@ public class XcodeConfig implements RuleConfiguredTargetFactory {
}
return aliasesToXcodeRules;
}
-
+
/**
- * Convenience method for throwing an {@link XcodeConfigException} due to presence
- * of duplicate aliases in an {@code xcode_config} target definition.
+ * Convenience method for throwing an {@link XcodeConfigException} due to presence of duplicate
+ * aliases in an {@code xcode_config} target definition.
*/
- private static void configErrorDuplicateAlias(String alias,
- Iterable<XcodeVersionRuleData> xcodeVersionRules) throws XcodeConfigException {
+ private static void configErrorDuplicateAlias(
+ String alias, Iterable<XcodeVersionRuleData> xcodeVersionRules) throws XcodeConfigException {
ImmutableList.Builder<Label> labelsContainingAlias = ImmutableList.builder();
for (XcodeVersionRuleData xcodeVersionRule : xcodeVersionRules) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java
index d711bd4506..913e367cd3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java
@@ -15,6 +15,8 @@ package com.google.devtools.build.lib.rules.apple;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
@@ -115,4 +117,9 @@ public class XcodeConfigProvider extends NativeInfo {
throw new IllegalArgumentException("Unhandled platform: " + platform);
}
}
+
+ public static XcodeConfigProvider fromRuleContext(RuleContext ruleContext) {
+ return ruleContext.getPrerequisite(
+ XcodeConfigRule.XCODE_CONFIG_ATTR_NAME, Mode.TARGET, XcodeConfigProvider.PROVIDER);
+ }
}
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 5c78577ead..a2c6120e45 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
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.XcodeConfig;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.cpp.CcToolchain;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
@@ -120,12 +121,12 @@ public class AppleCcToolchain extends CcToolchain {
private ImmutableMap<String, String> getEnvironmentBuildVariables(RuleContext ruleContext) {
Map<String, String> builder = new LinkedHashMap<>();
CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
- builder.putAll(appleConfiguration.getAppleHostSystemEnv());
+ XcodeConfigProvider xcodeConfig = XcodeConfigProvider.fromRuleContext(ruleContext);
+ builder.putAll(AppleConfiguration.getXcodeVersionEnv(xcodeConfig.getXcodeVersion()));
if (ApplePlatform.isApplePlatform(cppConfiguration.getTargetCpu())) {
- builder.putAll(
- appleConfiguration.appleTargetPlatformEnv(
- ApplePlatform.forTargetCpu(cppConfiguration.getTargetCpu())));
+ ApplePlatform platform = ApplePlatform.forTargetCpu(cppConfiguration.getTargetCpu());
+ builder.putAll(AppleConfiguration.appleTargetPlatformEnv(
+ platform, xcodeConfig.getSdkVersionForPlatform(platform)));
}
return ImmutableMap.copyOf(builder);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
index be4df25559..d61b803e60 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -22,6 +23,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
@@ -286,6 +288,32 @@ public class AppleSkylarkCommon {
return IosDeviceProvider.SKYLARK_CONSTRUCTOR;
}
+ @SkylarkCallable(
+ name = "apple_host_system_env",
+ doc =
+ "Returns a <a href='dict.html'>dict</a> of environment variables that should be set "
+ + "for actions that need to run build tools on an Apple host system, such as the "
+ + " version of Xcode that should be used. The keys are variable names and the values "
+ + " are their corresponding values."
+ )
+ public ImmutableMap<String, String> getAppleHostSystemEnv(XcodeConfigProvider xcodeConfig) {
+ return AppleConfiguration.getXcodeVersionEnv(xcodeConfig.getXcodeVersion());
+ }
+
+ @SkylarkCallable(
+ name = "target_apple_env",
+ doc =
+ "Returns a <code>dict</code> of environment variables that should be set for actions "
+ + "that build targets of the given Apple platform type. For example, this dictionary "
+ + "contains variables that denote the platform name and SDK version with which to "
+ + "build. The keys are variable names and the values are their corresponding values."
+ )
+ public ImmutableMap<String, String> getTargetAppleEnvironment(
+ XcodeConfigProvider xcodeConfig, ApplePlatform platform) {
+ return AppleConfiguration.appleTargetPlatformEnv(
+ platform, xcodeConfig.getSdkVersionForPlatform(platform));
+ }
+
@SkylarkSignature(
name = "new_objc_provider",
objectType = AppleSkylarkCommon.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
index 467c463b9d..97a46368e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -117,7 +118,7 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory {
Artifact outputArtifact =
ObjcRuleClasses.intermediateArtifacts(ruleContext).combinedArchitectureBinary();
- registerActions(ruleContext, appleConfiguration, platform, outputArtifact);
+ registerActions(ruleContext, platform, outputArtifact);
NestedSetBuilder<Artifact> filesToBuild =
NestedSetBuilder.<Artifact>stableOrder().add(outputArtifact);
@@ -147,7 +148,6 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory {
/** Registers the actions that copy the stub binary to the target's output. */
private static void registerActions(
RuleContext ruleContext,
- AppleConfiguration appleConfiguration,
ApplePlatform platform,
Artifact outputBinary)
throws RuleErrorException {
@@ -159,7 +159,8 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory {
.build();
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setExecutable(xcrunwrapper(ruleContext))
.addCommandLine(copyCommandLine)
.setMnemonic("CopyStubExecutable")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
index e28c2bbbea..1943f70c3b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
@@ -37,6 +37,7 @@ import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.HashMap;
@@ -237,7 +238,8 @@ final class BundleSupport {
.compiledStoryboardZip(storyboardInput);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("StoryboardCompile")
.setExecutable(attributes.ibtoolWrapper())
.addCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, storyboardInput))
@@ -285,7 +287,8 @@ final class BundleSupport {
for (Xcdatamodel datamodel : xcdatamodels) {
Artifact outputZip = datamodel.getOutputZip();
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("MomCompile")
.setExecutable(attributes.momcWrapper())
.addOutput(outputZip)
@@ -316,7 +319,8 @@ final class BundleSupport {
FileSystemUtils.replaceExtension(original.getExecPath(), ".nib"));
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("XibCompile")
.setExecutable(attributes.ibtoolWrapper())
.addCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, original))
@@ -332,7 +336,8 @@ final class BundleSupport {
for (Artifact strings : objcProvider.get(ObjcProvider.STRINGS)) {
Artifact bundled = bundling.getIntermediateArtifacts().convertedStringsFile(strings);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("ConvertStringsPlist")
.setExecutable(PathFragment.create("/usr/bin/plutil"))
.addCommandLine(
@@ -414,7 +419,8 @@ final class BundleSupport {
// zip file will be rooted at the bundle root, and we have to prepend the bundle root to each
// entry when merging it with the final .ipa file.
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("AssetCatalogCompile")
.setExecutable(attributes.actoolWrapper())
.addTransitiveInputs(objcProvider.get(ASSET_CATALOG))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 2208b7a0fb..7a9282e7ce 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -74,6 +74,7 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.XcodeConfig;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.cpp.CcToolchain;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
@@ -1127,7 +1128,8 @@ public abstract class CompilationSupport {
ISO_8859_1));
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setMnemonic("DummyPruner")
.setExecutable(pruner)
.addInput(dummyArchive)
@@ -1228,7 +1230,8 @@ public abstract class CompilationSupport {
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcBinarySymbolStrip")
.setExecutable(xcrunwrapper(ruleContext))
.addCommandLine(symbolStripCommandLine(stripArgs, binaryToLink, strippedBinary))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
index 71ae1351a9..e6d502c5f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LegacyCompilationSupport.java
@@ -66,6 +66,7 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.apple.XcodeConfig;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction.DotdFile;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
@@ -398,7 +399,8 @@ public class LegacyCompilationSupport extends CompilationSupport {
// TODO(bazel-team): Remove private headers from inputs once they're added to the provider.
ObjcCompileAction.Builder compileBuilder =
ObjcCompileAction.Builder.createObjcCompileActionBuilderWithAppleEnv(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setDotdPruningPlan(objcConfiguration.getDotdPruningPlan())
.setSourceFile(sourceFile)
.addTransitiveHeaders(objcProvider.get(HEADER))
@@ -483,7 +485,9 @@ public class LegacyCompilationSupport extends CompilationSupport {
.setMnemonics("ObjcCompileActionTemplate", "ObjcCompile")
.setExecutable(xcrunwrapper(ruleContext))
.setCommandLineTemplate(commandLine)
- .setEnvironment(ObjcRuleClasses.appleToolchainEnvironment(appleConfiguration, platform))
+ .setEnvironment(
+ ObjcRuleClasses.appleToolchainEnvironment(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform))
.setExecutionInfo(ObjcRuleClasses.darwinActionExecutionRequirement())
.setOutputPathMapper(COMPILE_ACTION_TEMPLATE_OUTPUT_PATH_MAPPER)
.addCommonTransitiveInputs(objcProvider.get(HEADER))
@@ -507,7 +511,8 @@ public class LegacyCompilationSupport extends CompilationSupport {
Artifact objList = intermediateArtifacts.archiveObjList();
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setExecutable(libtool(ruleContext))
.addCommandLine(
@@ -530,7 +535,8 @@ public class LegacyCompilationSupport extends CompilationSupport {
@Nullable CcToolchainProvider ccToolchain, @Nullable FdoSupportProvider fdoSupport) {
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setExecutable(libtool(ruleContext))
.addCommandLine(
@@ -631,7 +637,8 @@ public class LegacyCompilationSupport extends CompilationSupport {
bitcodeSymbolMap);
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- appleConfiguration, appleConfiguration.getSingleArchPlatform())
+ XcodeConfigProvider.fromRuleContext(ruleContext),
+ appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setShellCommand(ImmutableList.of("/bin/bash", "-c"))
.addCommandLine(new SingleArgCommandLine(commandLine))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
index f18f610b43..13ab3a828c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java
@@ -20,8 +20,8 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
/**
* Support for registering actions using the Apple tool "lipo", which combines artifacts of
@@ -48,7 +48,7 @@ public class LipoSupport {
if (inputBinaries.toList().size() > 1) {
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext.getFragment(AppleConfiguration.class), platform)
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("ObjcCombiningArchitectures")
.addTransitiveInputs(inputBinaries)
.addOutput(outputBinary)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
index bfa06e21f5..cabab193d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
@@ -43,8 +43,8 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
-import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.ApplePlatform;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.cpp.CppCompileAction.DotdFile;
import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
import com.google.devtools.build.lib.rules.cpp.HeaderDiscovery;
@@ -352,12 +352,12 @@ public class ObjcCompileAction extends SpawnAction {
* needed by the apple toolchain.
*/
public static ObjcCompileAction.Builder createObjcCompileActionBuilderWithAppleEnv(
- AppleConfiguration appleConfiguration, ApplePlatform targetPlatform) {
+ XcodeConfigProvider xcodeConfigProvider, ApplePlatform targetPlatform) {
return (Builder)
new ObjcCompileAction.Builder()
.setExecutionInfo(ObjcRuleClasses.darwinActionExecutionRequirement())
.setEnvironment(
- ObjcRuleClasses.appleToolchainEnvironment(appleConfiguration, targetPlatform));
+ ObjcRuleClasses.appleToolchainEnvironment(xcodeConfigProvider, targetPlatform));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 9278b01be3..a28dec5880 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -54,6 +54,7 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.AppleToolchain.RequiresXcodeConfigRule;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.cpp.CcToolchain;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
@@ -175,17 +176,18 @@ public class ObjcRuleClasses {
* which contain information about the target and host architectures.
*/
static SpawnAction.Builder spawnAppleEnvActionBuilder(
- AppleConfiguration appleConfiguration, ApplePlatform targetPlatform) {
+ XcodeConfigProvider xcodeConfigProvider, ApplePlatform targetPlatform) {
return spawnOnDarwinActionBuilder()
- .setEnvironment(appleToolchainEnvironment(appleConfiguration, targetPlatform));
+ .setEnvironment(appleToolchainEnvironment(xcodeConfigProvider, targetPlatform));
}
/** Returns apple environment variables that are typically needed by the apple toolchain. */
static ImmutableMap<String, String> appleToolchainEnvironment(
- AppleConfiguration appleConfiguration, ApplePlatform targetPlatform) {
+ XcodeConfigProvider xcodeConfigProvider, ApplePlatform targetPlatform) {
return ImmutableMap.<String, String>builder()
- .putAll(appleConfiguration.getTargetAppleEnvironment(targetPlatform))
- .putAll(appleConfiguration.getAppleHostSystemEnv())
+ .putAll(AppleConfiguration.appleTargetPlatformEnv(
+ targetPlatform, xcodeConfigProvider.getSdkVersionForPlatform(targetPlatform)))
+ .putAll(AppleConfiguration.getXcodeVersionEnv(xcodeConfigProvider.getXcodeVersion()))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/README.md b/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
index 3f047918ae..1a3fc54a7e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
@@ -31,7 +31,6 @@ skylark, the fragment must be declared in the rule definition:
```
def __impl(ctx):
cpu = ctx.fragments.apple.ios_cpu()
- env = ctx.fragments.apple.target_apple_env(platform)
my_rule = rule(
implementation = __impl
fragments = ['apple']
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
index ff9a318a04..b4ab7f9301 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java
@@ -54,6 +54,7 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.apple.XcodeConfig;
+import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider;
import com.google.devtools.build.lib.rules.objc.BundleSupport.ExtraActoolArgs;
import com.google.devtools.build.lib.rules.objc.Bundling.Builder;
import com.google.devtools.build.lib.shell.ShellUtils;
@@ -370,7 +371,6 @@ public final class ReleaseBundlingSupport {
}
private void registerEnvironmentPlistAction() {
- AppleConfiguration configuration = ruleContext.getFragment(AppleConfiguration.class);
// Generates a .plist that contains environment values (such as the SDK used to build, the Xcode
// version, etc), which are parsed from various .plist files of the OS, namely Xcodes' and
// Platforms' plists.
@@ -381,7 +381,8 @@ public final class ReleaseBundlingSupport {
platform.getLowerCaseNameInPlist(),
XcodeConfig.getSdkVersionForPlatform(ruleContext, platform));
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("EnvironmentPlist")
.setExecutable(attributes.environmentPlist())
.addOutput(getGeneratedEnvironmentPlist())
@@ -472,10 +473,11 @@ public final class ReleaseBundlingSupport {
actionCommandLine += "cd ${t} && /usr/bin/zip -q -r \"${signed_ipa}\" .";
- AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
SpawnAction.Builder processAction =
ObjcRuleClasses.spawnBashOnDarwinActionBuilder(actionCommandLine)
- .setEnvironment(ObjcRuleClasses.appleToolchainEnvironment(appleConfiguration, platform))
+ .setEnvironment(
+ ObjcRuleClasses.appleToolchainEnvironment(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform))
.setMnemonic("ObjcProcessIpa")
.setProgressMessage("Processing iOS IPA: %s", ruleContext.getLabel())
.disableSandboxing()
@@ -1040,7 +1042,8 @@ public final class ReleaseBundlingSupport {
.addExecPath("--scan-executable", combinedArchBinary);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("SwiftStdlibCopy")
.setExecutable(attributes.swiftStdlibToolWrapper())
.addCommandLine(commandLine.build())
@@ -1072,7 +1075,8 @@ public final class ReleaseBundlingSupport {
.addExecPath("--scan-executable", combinedArchBinary);
ruleContext.registerAction(
- ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform)
+ ObjcRuleClasses.spawnAppleEnvActionBuilder(
+ XcodeConfigProvider.fromRuleContext(ruleContext), platform)
.setMnemonic("SwiftCopySwiftSupport")
.setExecutable(attributes.swiftStdlibToolWrapper())
.addCommandLine(commandLine.build())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
index 2fdc017e46..c8e9e6a052 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java
@@ -265,12 +265,11 @@ public class TestSupport {
ruleContext.getPrerequisite(
IosTest.TARGET_DEVICE, Mode.TARGET, IosDeviceProvider.SKYLARK_CONSTRUCTOR);
DottedVersion xcodeVersion = deviceProvider.getXcodeVersion();
- AppleConfiguration configuration = ruleContext.getFragment(AppleConfiguration.class);
ImmutableMap.Builder<String, String> envBuilder = ImmutableMap.builder();
if (xcodeVersion != null) {
- envBuilder.putAll(configuration.getXcodeVersionEnv(xcodeVersion));
+ envBuilder.putAll(AppleConfiguration.getXcodeVersionEnv(xcodeVersion));
}
if (ruleContext.getConfiguration().isCodeCoverageEnabled()) {