aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-06-26 16:46:31 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-06-26 18:43:04 +0200
commitc9ab594c1f9334fa20e70a9ec1bc0414c10d74a6 (patch)
treebafcbff6876a089a2a792a38bc21e318d8540b27 /src
parent192422d2e554d297972c1cdc02127b1ca8be54ab (diff)
Remove usage of --ios_cpu from Bazel.
PiperOrigin-RevId: 160143322
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java37
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java42
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java8
-rwxr-xr-xsrc/test/shell/bazel/apple/bazel_apple_test.sh8
-rwxr-xr-xsrc/test/shell/bazel/apple/bazel_objc_test.sh2
7 files changed, 89 insertions, 22 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index 3e5e1e22f6..951b3670de 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -299,7 +299,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
@Option(
name = "apple_crosstool_transition",
- defaultValue = "false",
+ defaultValue = "true",
optionUsageRestrictions = OptionUsageRestrictions.UNDOCUMENTED,
help = "If true, the apple crosstool is used for all apple rules."
)
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 1ca3eedcb2..860afbca2d 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
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.apple;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
@@ -66,6 +67,12 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
private static final DottedVersion MINIMUM_BITCODE_XCODE_VERSION = DottedVersion.fromString("7");
+ /** Prefix for iOS cpu values. */
+ public static final String IOS_CPU_PREFIX = "ios_";
+
+ /** Default cpu for iOS builds. */
+ @VisibleForTesting static final String DEFAULT_IOS_CPU = "x86_64";
+
@Nullable private final DottedVersion xcodeVersion;
private final DottedVersion iosSdkVersion;
private final DottedVersion iosMinimumOs;
@@ -89,7 +96,9 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
@Nullable private final String xcodeToolchain;
@Nullable private final Label defaultProvisioningProfileLabel;
- AppleConfiguration(AppleCommandLineOptions appleOptions,
+ AppleConfiguration(
+ AppleCommandLineOptions appleOptions,
+ String cpu,
@Nullable DottedVersion xcodeVersion,
DottedVersion iosSdkVersion,
DottedVersion watchosSdkVersion,
@@ -113,7 +122,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
this.macosMinimumOs = Preconditions.checkNotNull(macosMinimumOs, "macOsMinimumOs");
this.xcodeVersion = xcodeVersion;
- this.iosCpu = Preconditions.checkNotNull(appleOptions.iosCpu, "iosCpu");
+ this.iosCpu = iosCpuFromCpu(cpu);
this.appleSplitCpu = Preconditions.checkNotNull(appleOptions.appleSplitCpu, "appleSplitCpu");
this.applePlatformType =
Preconditions.checkNotNull(appleOptions.applePlatformType, "applePlatformType");
@@ -137,6 +146,15 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
this.xcodeToolchain = appleOptions.xcodeToolchain;
}
+ /** Determines cpu value from apple-specific toolchain identifier. */
+ public static String iosCpuFromCpu(String cpu) {
+ if (cpu.startsWith(IOS_CPU_PREFIX)) {
+ return cpu.substring(IOS_CPU_PREFIX.length());
+ } else {
+ return DEFAULT_IOS_CPU;
+ }
+ }
+
/**
* Returns the minimum iOS version supported by binaries and libraries. Any dependencies on newer
* iOS version features or libraries will become weak dependencies which are only loaded if the
@@ -593,6 +611,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
public AppleConfiguration create(ConfigurationEnvironment env, BuildOptions buildOptions)
throws InvalidConfigurationException, InterruptedException {
AppleCommandLineOptions appleOptions = buildOptions.get(AppleCommandLineOptions.class);
+ String cpu = buildOptions.get(BuildConfiguration.Options.class).cpu;
XcodeVersionProperties xcodeVersionProperties = getXcodeVersionProperties(env, appleOptions);
DottedVersion iosSdkVersion = (appleOptions.iosSdkVersion != null)
@@ -612,9 +631,17 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
DottedVersion macosMinimumOsVersion = (appleOptions.macosMinimumOs != null)
? appleOptions.macosMinimumOs : macosSdkVersion;
AppleConfiguration configuration =
- new AppleConfiguration(appleOptions, xcodeVersionProperties.getXcodeVersion().orNull(),
- iosSdkVersion, watchosSdkVersion, watchosMinimumOsVersion,
- tvosSdkVersion, tvosMinimumOsVersion, macosSdkVersion, macosMinimumOsVersion);
+ new AppleConfiguration(
+ appleOptions,
+ cpu,
+ xcodeVersionProperties.getXcodeVersion().orNull(),
+ iosSdkVersion,
+ watchosSdkVersion,
+ watchosMinimumOsVersion,
+ tvosSdkVersion,
+ tvosMinimumOsVersion,
+ macosSdkVersion,
+ macosMinimumOsVersion);
validate(configuration);
return configuration;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
index fc22d886d9..e563db5f9f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleCrosstoolTransition.java
@@ -14,11 +14,13 @@
package com.google.devtools.build.lib.rules.objc;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.PatchTransition;
import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform;
import com.google.devtools.build.lib.rules.cpp.CppOptions;
import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode;
@@ -47,11 +49,13 @@ public class AppleCrosstoolTransition implements PatchTransition {
return buildOptions;
}
- // TODO(b/29355778): Once ios_cpu is retired, introduce another top-level flag (perhaps
- // --apple_cpu) for toolchain selection in top-level consuming rules.
- String cpu = Platform.cpuStringForTarget(
- buildOptions.get(AppleCommandLineOptions.class).applePlatformType,
- buildOptions.get(AppleCommandLineOptions.class).getSingleArchitecture());
+ AppleCommandLineOptions appleOptions = buildOptions.get(AppleCommandLineOptions.class);
+ BuildConfiguration.Options configOptions = buildOptions.get(BuildConfiguration.Options.class);
+
+ String cpu =
+ Platform.cpuStringForTarget(
+ appleOptions.applePlatformType,
+ determineSingleArchitecture(appleOptions, configOptions));
setAppleCrosstoolTransitionConfiguration(buildOptions, result, cpu);
return result;
}
@@ -92,4 +96,32 @@ public class AppleCrosstoolTransition implements PatchTransition {
return (options.get(AppleCommandLineOptions.class).enableAppleCrosstoolTransition
|| options.get(ObjcCommandLineOptions.class).objcCrosstoolMode != ObjcCrosstoolMode.OFF);
}
+
+ /**
+ * Returns the Apple architecture implied by AppleCommandLineOptions and
+ * BuildConfiguration.Options
+ */
+ private String determineSingleArchitecture(
+ AppleCommandLineOptions appleOptions, BuildConfiguration.Options configOptions) {
+ if (!Strings.isNullOrEmpty(appleOptions.appleSplitCpu)) {
+ return appleOptions.appleSplitCpu;
+ }
+ switch (appleOptions.applePlatformType) {
+ case IOS:
+ if (!appleOptions.iosMultiCpus.isEmpty()) {
+ return appleOptions.iosMultiCpus.get(0);
+ } else {
+ return AppleConfiguration.iosCpuFromCpu(configOptions.cpu);
+ }
+ case WATCHOS:
+ return appleOptions.watchosCpus.get(0);
+ case TVOS:
+ return appleOptions.tvosCpus.get(0);
+ case MACOS:
+ return appleOptions.macosCpus.get(0);
+ default:
+ throw new IllegalArgumentException(
+ "Unhandled platform type " + appleOptions.applePlatformType);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
index 8c72933334..732f7bb3c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
@@ -22,6 +22,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider;
@@ -29,6 +30,7 @@ import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.apple.Platform;
@@ -167,11 +169,15 @@ public class MultiArchSplitTransitionProvider implements SplitTransitionProvider
case IOS:
cpus = buildOptions.get(AppleCommandLineOptions.class).iosMultiCpus;
if (cpus.isEmpty()) {
- cpus = ImmutableList.of(buildOptions.get(AppleCommandLineOptions.class).iosCpu);
+ cpus =
+ ImmutableList.of(
+ AppleConfiguration.iosCpuFromCpu(buildOptions.get(Options.class).cpu));
}
configurationDistinguisher = ConfigurationDistinguisher.APPLEBIN_IOS;
- actualMinimumOsVersion = minimumOsVersion.isPresent() ? minimumOsVersion.get()
- : buildOptions.get(AppleCommandLineOptions.class).iosMinimumOs;
+ actualMinimumOsVersion =
+ minimumOsVersion.isPresent()
+ ? minimumOsVersion.get()
+ : buildOptions.get(AppleCommandLineOptions.class).iosMinimumOs;
break;
case WATCHOS:
cpus = buildOptions.get(AppleCommandLineOptions.class).watchosCpus;
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 b5d7dacd89..468ac7528b 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
@@ -44,6 +44,7 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction;
import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -1293,7 +1294,7 @@ public final class ReleaseBundlingSupport {
ImmutableList.Builder<BuildOptions> splitBuildOptions = ImmutableList.builder();
for (String iosCpu : iosMultiCpus) {
BuildOptions splitOptions = buildOptions.clone();
- setArchitectureOptions(splitOptions, buildOptions, iosCpu);
+ setIosArchitectureOptions(splitOptions, buildOptions, iosCpu);
setAdditionalOptions(splitOptions, buildOptions);
splitOptions.get(AppleCommandLineOptions.class).configurationDistinguisher =
getConfigurationDistinguisher();
@@ -1321,10 +1322,11 @@ public final class ReleaseBundlingSupport {
*/
protected void setAdditionalOptions(BuildOptions splitOptions, BuildOptions originalOptions) {}
- private static void setArchitectureOptions(BuildOptions splitOptions,
- BuildOptions originalOptions, String iosCpu) {
+ private static void setIosArchitectureOptions(
+ BuildOptions splitOptions, BuildOptions originalOptions, String iosCpu) {
splitOptions.get(AppleCommandLineOptions.class).applePlatformType = PlatformType.IOS;
splitOptions.get(AppleCommandLineOptions.class).appleSplitCpu = iosCpu;
+ splitOptions.get(Options.class).cpu = AppleConfiguration.IOS_CPU_PREFIX + iosCpu;
splitOptions.get(AppleCommandLineOptions.class).iosCpu = iosCpu;
if (splitOptions.get(ObjcCommandLineOptions.class).enableCcDeps) {
// Only set the (CC-compilation) CPU for dependencies if explicitly required by the user.
diff --git a/src/test/shell/bazel/apple/bazel_apple_test.sh b/src/test/shell/bazel/apple/bazel_apple_test.sh
index 703eabe990..5fbd18933a 100755
--- a/src/test/shell/bazel/apple/bazel_apple_test.sh
+++ b/src/test/shell/bazel/apple/bazel_apple_test.sh
@@ -389,11 +389,11 @@ EOF
--ios_minimum_os=8.0 \
//ios:app_test >$TEST_log 2>&1 || fail "should build"
- otool -lv bazel-bin/ios/app_test_bin \
+ otool -lv bazel-out/ios_x86_64-fastbuild/bin/ios/app_test_bin \
| grep @executable_path/Frameworks -sq \
|| fail "expected test binary to contain @executable_path in LC_RPATH"
- otool -lv bazel-bin/ios/app_test_bin \
+ otool -lv bazel-out/ios_x86_64-fastbuild/bin/ios/app_test_bin \
| grep @loader_path/Frameworks -sq \
|| fail "expected test binary to contain @loader_path in LC_RPATH"
@@ -766,8 +766,8 @@ EOF
bazel build --verbose_failures --xcode_version=$XCODE_VERSION -s \
//ios:bin >$TEST_log 2>&1 || fail "should build"
- expect_log "-Xlinker -add_ast_path -Xlinker bazel-out/darwin_x86_64-fastbuild/genfiles/ios/dep/_objs/ios_dep.swiftmodule"
- expect_log "-Xlinker -add_ast_path -Xlinker bazel-out/darwin_x86_64-fastbuild/genfiles/ios/swift_lib/_objs/ios_swift_lib.swiftmodule"
+ expect_log "-Xlinker -add_ast_path -Xlinker bazel-out/ios_x86_64-fastbuild/genfiles/ios/dep/_objs/ios_dep.swiftmodule"
+ expect_log "-Xlinker -add_ast_path -Xlinker bazel-out/ios_x86_64-fastbuild/genfiles/ios/swift_lib/_objs/ios_swift_lib.swiftmodule"
}
function test_swiftc_script_mode() {
diff --git a/src/test/shell/bazel/apple/bazel_objc_test.sh b/src/test/shell/bazel/apple/bazel_objc_test.sh
index 65cdd02043..955562a492 100755
--- a/src/test/shell/bazel/apple/bazel_objc_test.sh
+++ b/src/test/shell/bazel/apple/bazel_objc_test.sh
@@ -117,7 +117,7 @@ function test_ios_test() {
bazel build --test_output=all --ios_sdk_version=$IOS_SDK_VERSION \
--ios_minimum_os=8.0 \
//ios:PassingXcTest >$TEST_log 2>&1 || fail "should pass"
- ls bazel-bin/ios/PassingXcTest.ipa \
+ ls bazel-out/ios_x86_64-fastbuild/bin/ios/PassingXcTest.ipa \
|| fail "should generate PassingXcTest.ipa"
}