aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-06-15 19:32:34 +0000
committerGravatar Yue Gan <yueg@google.com>2016-06-16 09:01:54 +0000
commitf6a45fda097fcdae4704915c530403a90e9d6745 (patch)
tree54e74a970f2245fdc4517e5a2cc0cb2f9ee43c0e /src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
parent19f2238b608d7ebba182a2bdd405e4696975f733 (diff)
Support for platform_type="watchos" on apple_binary.
This builds all dependencies linked against watch SDKs instead of iOS SDKs, and builds for the architectures specified in --watchos_multi_cpus RELNOTES: apple_binary supports a new platform_type attribute, which, if set to "watchos", will build dependencies for Apple's watchOS2. -- MOS_MIGRATED_REVID=124980029
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java67
1 files changed, 42 insertions, 25 deletions
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 995a65d502..8e1fb4b147 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
@@ -64,7 +64,6 @@ import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext;
import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
@@ -81,6 +80,7 @@ import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.Platform;
+import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs;
@@ -131,7 +131,7 @@ public final class CompilationSupport {
// These are added by Xcode when building, because the simulator is built on OSX
// frameworks so we aim compile to match the OSX objc runtime.
@VisibleForTesting
- static final ImmutableList<String> IOS_SIMULATOR_COMPILE_FLAGS =
+ static final ImmutableList<String> SIMULATOR_COMPILE_FLAGS =
ImmutableList.of(
"-fexceptions", "-fasm-blocks", "-fobjc-abi-version=2", "-fobjc-legacy-dispatch");
@@ -567,7 +567,7 @@ public final class CompilationSupport {
// TODO(bazel-team): Remote private headers from inputs once they're added to the provider.
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcCompile")
.setExecutable(xcrunwrapper(ruleContext))
.setCommandLine(commandLine.build())
@@ -696,7 +696,7 @@ public final class CompilationSupport {
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("SwiftCompile")
.setExecutable(xcrunwrapper(ruleContext))
.setCommandLine(commandLine.build())
@@ -766,7 +766,7 @@ public final class CompilationSupport {
commandLine.add(commonFrameworkFlags(objcProvider, appleConfiguration));
ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("SwiftModuleMerge")
.setExecutable(xcrunwrapper(ruleContext))
.setCommandLine(commandLine.build())
@@ -780,13 +780,12 @@ public final class CompilationSupport {
private void registerArchiveActions(ImmutableList.Builder<Artifact> objFiles, Artifact archive) {
for (Action action :
- archiveActions(ruleContext, objFiles.build(), archive, intermediateArtifacts.objList())) {
+ archiveActions(objFiles.build(), archive, intermediateArtifacts.objList())) {
ruleContext.registerAction(action);
}
}
private Iterable<Action> archiveActions(
- ActionConstructionContext context,
Iterable<Artifact> objFiles,
Artifact archive,
Artifact objList) {
@@ -794,13 +793,13 @@ public final class CompilationSupport {
ImmutableList.Builder<Action> actions = new ImmutableList.Builder<>();
actions.add(new FileWriteAction(
- context.getActionOwner(),
+ ruleContext.getActionOwner(),
objList,
Artifact.joinExecPaths("\n", objFiles),
/*makeExecutable=*/ false));
actions.add(ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setExecutable(libtool(ruleContext))
.setCommandLine(new CustomCommandLine.Builder()
@@ -813,7 +812,7 @@ public final class CompilationSupport {
.addInputs(objFiles)
.addInput(objList)
.addOutput(archive)
- .build(context));
+ .build(ruleContext));
return actions.build();
}
@@ -831,7 +830,7 @@ public final class CompilationSupport {
ImmutableList<Artifact> objcLibraries = objcLibraries(objcProvider);
ImmutableList<Artifact> ccLibraries = ccLibraries(objcProvider);
ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setExecutable(libtool(ruleContext))
.setCommandLine(new CustomCommandLine.Builder()
@@ -1033,7 +1032,7 @@ public final class CompilationSupport {
linkmap);
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcLink")
.setShellCommand(ImmutableList.of("/bin/bash", "-c"))
.setCommandLine(new SingleArgCommandLine(commandLine))
@@ -1067,7 +1066,7 @@ public final class CompilationSupport {
ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("ObjcBinarySymbolStrip")
.setExecutable(xcrunwrapper(ruleContext))
.setCommandLine(symbolStripCommandLine(stripArgs, binaryToLink, strippedBinary))
@@ -1337,7 +1336,7 @@ public final class CompilationSupport {
commandLine,
ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1));
ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(
- ruleContext, appleConfiguration.getSingleArchPlatform())
+ appleConfiguration, appleConfiguration.getSingleArchPlatform())
.setMnemonic("DummyPruner")
.setExecutable(pruner)
.addInput(dummyArchive)
@@ -1561,17 +1560,29 @@ public final class CompilationSupport {
/**
* Returns a list of clang flags used for all link and compile actions executed through clang.
*/
- private static List<String> commonLinkAndCompileFlagsForClang(
+ private List<String> commonLinkAndCompileFlagsForClang(
ObjcProvider provider, ObjcConfiguration objcConfiguration,
AppleConfiguration appleConfiguration) {
ImmutableList.Builder<String> builder = new ImmutableList.Builder<>();
Platform platform = appleConfiguration.getSingleArchPlatform();
- if (platform == Platform.IOS_SIMULATOR) {
- builder.add("-mios-simulator-version-min=" + objcConfiguration.getMinimumOs());
- } else {
- builder.add("-miphoneos-version-min=" + objcConfiguration.getMinimumOs());
+ switch (platform) {
+ case IOS_SIMULATOR:
+ builder.add("-mios-simulator-version-min=" + objcConfiguration.getMinimumOs());
+ break;
+ case IOS_DEVICE:
+ builder.add("-miphoneos-version-min=" + objcConfiguration.getMinimumOs());
+ break;
+ case WATCHOS_SIMULATOR:
+ builder.add("-mwatchos-simulator-version-min="
+ + appleConfiguration.getSdkVersionForPlatform(platform));
+ break;
+ case WATCHOS_DEVICE:
+ builder.add("-mwatchos-version-min="
+ + appleConfiguration.getSdkVersionForPlatform(platform));
+ break;
+ default:
+ throw new IllegalArgumentException("Unhandled platform " + platform);
}
-
if (objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym()) {
builder.add("-g");
}
@@ -1589,7 +1600,8 @@ public final class CompilationSupport {
*/
static Iterable<String> commonFrameworkFlags(
ObjcProvider provider, AppleConfiguration appleConfiguration) {
- return Interspersing.beforeEach("-F", commonFrameworkNames(provider, appleConfiguration));
+ return Interspersing.beforeEach("-F",
+ commonFrameworkNames(provider, appleConfiguration));
}
/**
@@ -1599,10 +1611,13 @@ public final class CompilationSupport {
ObjcProvider provider, AppleConfiguration appleConfiguration) {
Platform platform = appleConfiguration.getSingleArchPlatform();
- return new ImmutableList.Builder<String>()
- .add(AppleToolchain.sdkFrameworkDir(platform, appleConfiguration))
+ ImmutableList.Builder<String> frameworkNames = new ImmutableList.Builder<String>()
+ .add(AppleToolchain.sdkFrameworkDir(platform, appleConfiguration));
+ if (platform.getType() == PlatformType.IOS) {
// As of sdk8.1, XCTest is in a base Framework dir
- .add(AppleToolchain.platformDeveloperFrameworkDir(appleConfiguration))
+ frameworkNames.add(AppleToolchain.platformDeveloperFrameworkDir(appleConfiguration));
+ }
+ return frameworkNames
// Add custom (non-SDK) framework search paths. For each framework foo/bar.framework,
// include "foo" as a search path.
.addAll(PathFragment.safePathStrings(uniqueParentDirectories(provider.get(FRAMEWORK_DIR))))
@@ -1627,9 +1642,11 @@ public final class CompilationSupport {
AppleConfiguration configuration) {
switch (configuration.getSingleArchPlatform()) {
case IOS_DEVICE:
+ case WATCHOS_DEVICE:
return ImmutableList.of();
case IOS_SIMULATOR:
- return IOS_SIMULATOR_COMPILE_FLAGS;
+ case WATCHOS_SIMULATOR:
+ return SIMULATOR_COMPILE_FLAGS;
default:
throw new AssertionError();
}