aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-08-29 18:47:20 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-08-30 08:33:58 +0000
commit21d1277801416a0ccd820b804cab3b3b87dee175 (patch)
tree0bc4b87b023636c24ce0ad0ba8fcc356d7a65fae
parentee015d6df41eb1184aefe5cb3deeca6ca7053a97 (diff)
apple_binary propagates appropriate dSYM information, and apple_watch2_extension generates a dSYM bundle when --apple_generate_dsym is specified.
-- MOS_MIGRATED_REVID=131617351
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1Extension.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java6
10 files changed, 56 insertions, 53 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index 26defe3dc9..b5855192c3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -175,7 +175,7 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
CompilationArtifacts compilationArtifacts =
CompilationSupport.compilationArtifacts(ruleContext, intermediateArtifacts);
- return new ObjcCommon.Builder(ruleContext, buildConfiguration)
+ ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext, buildConfiguration)
.setCompilationAttributes(
CompilationAttributes.Builder.fromRuleContext(ruleContext).build())
.setCompilationArtifacts(compilationArtifacts)
@@ -189,8 +189,12 @@ public class AppleBinary implements RuleConfiguredTargetFactory {
.setIntermediateArtifacts(intermediateArtifacts)
.setAlwayslink(false)
// TODO(b/29152500): Enable module map generation.
- .setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary())
- .build();
+ .setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary());
+
+ if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) {
+ commonBuilder.addDebugArtifacts(DsymOutputType.APP);
+ }
+ return commonBuilder.build();
}
private <T> List<T> nullToEmptyList(List<T> inputList) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1Extension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1Extension.java
index e43ca738d2..aae8f949f8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1Extension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1Extension.java
@@ -56,7 +56,6 @@ public class AppleWatch1Extension implements RuleConfiguredTargetFactory {
public ConfiguredTarget create(RuleContext ruleContext)
throws InterruptedException, RuleErrorException {
ObjcProvider.Builder extensionObjcProviderBuilder = new ObjcProvider.Builder();
- ObjcProvider.Builder exposedObjcProviderBuilder = new ObjcProvider.Builder();
XcodeProvider.Builder applicationXcodeProviderBuilder = new XcodeProvider.Builder();
XcodeProvider.Builder extensionXcodeProviderBuilder = new XcodeProvider.Builder();
NestedSetBuilder<Artifact> applicationFilesToBuild = NestedSetBuilder.stableOrder();
@@ -66,8 +65,7 @@ public class AppleWatch1Extension implements RuleConfiguredTargetFactory {
createWatchApplicationBundle(
ruleContext,
applicationXcodeProviderBuilder,
- applicationFilesToBuild,
- exposedObjcProviderBuilder);
+ applicationFilesToBuild);
// 2. Build watch extension bundle.
createWatchExtensionBundle(ruleContext, extensionXcodeProviderBuilder,
@@ -84,7 +82,7 @@ public class AppleWatch1Extension implements RuleConfiguredTargetFactory {
InstrumentedFilesCollector.forward(ruleContext, "binary"));
// 4. Exposed {@ObjcProvider} for bundling into final IPA.
- exposeObjcProvider(ruleContext, targetBuilder, exposedObjcProviderBuilder);
+ exposeObjcProvider(ruleContext, targetBuilder, extensionObjcProviderBuilder);
return targetBuilder.build();
}
@@ -141,13 +139,11 @@ public class AppleWatch1Extension implements RuleConfiguredTargetFactory {
* @param ruleContext rule context in which to create the bundle
* @param xcodeProviderBuilder {@link XcodeProvider.Builder} for the application
* @param filesToBuild the list to contain the files to be built for this bundle
- * @param exposedObjcProviderBuilder {@link ObjcProvider.Builder} exposed to the parent target
*/
private void createWatchApplicationBundle(
RuleContext ruleContext,
XcodeProvider.Builder xcodeProviderBuilder,
- NestedSetBuilder<Artifact> filesToBuild,
- ObjcProvider.Builder exposedObjcProviderBuilder)
+ NestedSetBuilder<Artifact> filesToBuild)
throws InterruptedException {
new WatchApplicationSupport(
ruleContext,
@@ -160,8 +156,7 @@ public class AppleWatch1Extension implements RuleConfiguredTargetFactory {
.createBundleAndXcodeproj(
xcodeProviderBuilder,
ImmutableList.<Artifact>of(),
- filesToBuild,
- exposedObjcProviderBuilder);
+ filesToBuild);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java
index d208062813..2bfbdc22b6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java
@@ -49,20 +49,19 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory {
validateAttributes(ruleContext);
ObjcProvider.Builder exposedObjcProviderBuilder = new ObjcProvider.Builder();
- NestedSetBuilder<Artifact> applicationFilesToBuild = NestedSetBuilder.stableOrder();
+ NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder();
// 1. Build watch extension bundle.
- createWatchExtensionBundle(ruleContext);
+ createWatchExtensionBundle(ruleContext, filesToBuild, exposedObjcProviderBuilder);
// 2. Build watch application bundle, which will contain the extension bundle.
createWatchApplicationBundle(
ruleContext,
watchExtensionIpaArtifact(ruleContext),
- applicationFilesToBuild,
- exposedObjcProviderBuilder);
+ filesToBuild);
RuleConfiguredTargetBuilder targetBuilder =
- ObjcRuleClasses.ruleConfiguredTarget(ruleContext, applicationFilesToBuild.build())
+ ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
.addProvider(
InstrumentedFilesProvider.class,
InstrumentedFilesCollector.forward(ruleContext, "binary"));
@@ -83,12 +82,15 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory {
*
* @param ruleContext rule context in which to create the bundle
*/
- private void createWatchExtensionBundle(RuleContext ruleContext) throws InterruptedException {
+ private void createWatchExtensionBundle(RuleContext ruleContext,
+ NestedSetBuilder<Artifact> filesToBuild,
+ ObjcProvider.Builder exposedObjcProviderBuilder) throws InterruptedException {
new Watch2ExtensionSupport(
ruleContext,
ObjcRuleClasses.intermediateArtifacts(ruleContext),
watchExtensionBundleName(ruleContext))
- .createBundle(watchExtensionIpaArtifact(ruleContext));
+ .createBundle(watchExtensionIpaArtifact(ruleContext), filesToBuild,
+ exposedObjcProviderBuilder);
}
/**
@@ -105,8 +107,7 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory {
private void createWatchApplicationBundle(
RuleContext ruleContext,
Artifact extensionIpa,
- NestedSetBuilder<Artifact> filesToBuild,
- ObjcProvider.Builder exposedObjcProviderBuilder)
+ NestedSetBuilder<Artifact> filesToBuild)
throws InterruptedException {
new WatchApplicationSupport(
ruleContext,
@@ -118,7 +119,7 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory {
watchApplicationBundleName(ruleContext),
watchApplicationIpaArtifact(ruleContext),
watchApplicationBundleName(ruleContext))
- .createBundle(ImmutableList.of(extensionIpa), filesToBuild, exposedObjcProviderBuilder);
+ .createBundle(ImmutableList.of(extensionIpa), filesToBuild);
}
/** Returns the {@Artifact} containing final watch application bundle. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index 85a7e67383..1381bb98b9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -137,7 +137,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
releaseBundlingSupport
.registerActions(DsymOutputType.APP)
.addXcodeSettings(xcodeProviderBuilder)
- .addFilesToBuild(filesToBuild, DsymOutputType.APP)
+ .addFilesToBuild(filesToBuild, Optional.of(DsymOutputType.APP))
.validateResources()
.validateAttributes();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index 6b01623337..0579bd7273 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -173,7 +173,7 @@ public final class IosTest implements RuleConfiguredTargetFactory {
appleConfiguration.getMultiArchPlatform(PlatformType.IOS))
.registerActions(DsymOutputType.TEST)
.addXcodeSettings(xcodeProviderBuilder)
- .addFilesToBuild(filesToBuild, DsymOutputType.TEST)
+ .addFilesToBuild(filesToBuild, Optional.of(DsymOutputType.TEST))
.validateResources()
.validateAttributes();
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 c60ecdeb5b..8613ef69b1 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
@@ -27,6 +27,7 @@ import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -615,20 +616,23 @@ public final class ReleaseBundlingSupport {
*
* @param filesToBuild a collection of files to be built, where new artifacts to be built are
* going to be placed
- * @param dsymOutputType the file type of the dSYM bundle to be built
+ * @param dsymOutputType the file type of the dSYM bundle to be built, or absent if no
+ * dSYM should be built for this bundle. A dSYM bundle will only be created if both this
+ * is present and the configuration values dictate dSYM is enabled
*
* @return this application support
*/
ReleaseBundlingSupport addFilesToBuild(
- NestedSetBuilder<Artifact> filesToBuild, DsymOutputType dsymOutputType) {
+ NestedSetBuilder<Artifact> filesToBuild, Optional<DsymOutputType> dsymOutputType) {
NestedSetBuilder<Artifact> debugSymbolBuilder = NestedSetBuilder.<Artifact>stableOrder();
for (Artifact linkmapFile : getLinkmapFiles().values()) {
filesToBuild.add(linkmapFile);
}
- if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) {
- filesToBuild.addAll(getDsymFiles(dsymOutputType).values());
+ if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()
+ && dsymOutputType.isPresent()) {
+ filesToBuild.addAll(getDsymFiles(dsymOutputType.get()).values());
// TODO(bazel-team): Remove the 'if' when the objc_binary rule does not generate a bundle any
// more. The reason this 'if' is here is because the plist is obtained from the ObjcProvider.
@@ -639,13 +643,13 @@ public final class ReleaseBundlingSupport {
// only get called by *_application rules, with the plist configured in the provider.
Artifact cpuPlist = getAnyCpuSpecificDsymPlist();
if (cpuPlist != null) {
- filesToBuild.add(intermediateArtifacts.dsymPlist(dsymOutputType));
+ filesToBuild.add(intermediateArtifacts.dsymPlist(dsymOutputType.get()));
}
if (linkedBinary == LinkedBinary.LOCAL_AND_DEPENDENCIES) {
debugSymbolBuilder
- .add(intermediateArtifacts.dsymPlist(dsymOutputType))
- .add(intermediateArtifacts.dsymSymbol(dsymOutputType));
+ .add(intermediateArtifacts.dsymPlist(dsymOutputType.get()))
+ .add(intermediateArtifacts.dsymSymbol(dsymOutputType.get()));
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
index 539957a986..54ba369ca0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.objc;
+import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -29,7 +30,6 @@ import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.LinkedBinary;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
-
import javax.annotation.Nullable;
/**
@@ -79,7 +79,7 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg
releaseBundlingSupport
.registerActions(DsymOutputType.APP)
.addXcodeSettings(xcodeProviderBuilder)
- .addFilesToBuild(filesToBuild, DsymOutputType.APP)
+ .addFilesToBuild(filesToBuild, Optional.of(DsymOutputType.APP))
.validateResources()
.validateAttributes();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
index bf247c6fb7..e3b96a46ee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
@@ -31,6 +31,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.WatchExte
import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -39,6 +40,7 @@ import com.google.devtools.build.lib.actions.Artifact;
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.FileWriteAction;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.LinkedBinary;
@@ -80,7 +82,9 @@ public class Watch2ExtensionSupport {
* @param ipaArtifact an .ipa artifact containing to extension bundle; this is the output artifact
* of the bundling
*/
- void createBundle(Artifact ipaArtifact) throws InterruptedException {
+ void createBundle(Artifact ipaArtifact,
+ NestedSetBuilder<Artifact> extensionFilesToBuild,
+ ObjcProvider.Builder exposedObjcProviderBuilder) throws InterruptedException {
ObjcProvider.Builder releaseBundlingObjcProviderBuilder = new ObjcProvider.Builder();
releaseBundlingObjcProviderBuilder.addTransitiveAndPropagate(attributes.binaryDependencies());
releaseBundlingObjcProviderBuilder
@@ -138,8 +142,10 @@ public class Watch2ExtensionSupport {
releaseBundlingSupport
.registerActions(DsymOutputType.APP)
+ .addFilesToBuild(extensionFilesToBuild, Optional.of(DsymOutputType.APP))
.validateResources()
- .validateAttributes();
+ .validateAttributes()
+ .addExportedDebugArtifacts(exposedObjcProviderBuilder, DsymOutputType.APP);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
index bfb9729332..9153ace1f7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
@@ -108,13 +108,10 @@ final class WatchApplicationSupport {
* @param innerBundleZips any zip files to be unzipped and merged into the application bundle
* @param filesToBuild files to build for the rule; the watchOS application .ipa is added to this
* set
- * @param exposedObjcProviderBuilder provider builder which watch application bundle outputs are
- * added to (for later consumption by depending rules)
*/
void createBundle(
Iterable<Artifact> innerBundleZips,
- NestedSetBuilder<Artifact> filesToBuild,
- ObjcProvider.Builder exposedObjcProviderBuilder)
+ NestedSetBuilder<Artifact> filesToBuild)
throws InterruptedException {
ObjcProvider objcProvider = objcProvider(innerBundleZips);
@@ -122,8 +119,7 @@ final class WatchApplicationSupport {
createBundle(
Optional.<XcodeProvider.Builder>absent(),
objcProvider,
- filesToBuild,
- exposedObjcProviderBuilder);
+ filesToBuild);
}
/**
@@ -134,19 +130,16 @@ final class WatchApplicationSupport {
* @param innerBundleZips any zip files to be unzipped and merged into the application bundle
* @param filesToBuild files to build for the rule; the watchOS application .ipa is added to this
* set
- * @param exposedObjcProviderBuilder provider builder which watch application bundle outputs are
- * added to (for later consumption by depending rules)
*/
void createBundleAndXcodeproj(
XcodeProvider.Builder xcodeProviderBuilder,
Iterable<Artifact> innerBundleZips,
- NestedSetBuilder<Artifact> filesToBuild,
- ObjcProvider.Builder exposedObjcProviderBuilder)
+ NestedSetBuilder<Artifact> filesToBuild)
throws InterruptedException {
ObjcProvider objcProvider = objcProvider(innerBundleZips);
createBundle(
- Optional.of(xcodeProviderBuilder), objcProvider, filesToBuild, exposedObjcProviderBuilder);
+ Optional.of(xcodeProviderBuilder), objcProvider, filesToBuild);
// Add common watch settings.
WatchUtils.addXcodeSettings(ruleContext, xcodeProviderBuilder);
@@ -171,8 +164,7 @@ final class WatchApplicationSupport {
private void createBundle(
Optional<XcodeProvider.Builder> xcodeProviderBuilder,
ObjcProvider depsObjcProvider,
- NestedSetBuilder<Artifact> filesToBuild,
- ObjcProvider.Builder exposedObjcProviderBuilder)
+ NestedSetBuilder<Artifact> filesToBuild)
throws InterruptedException {
registerActions();
@@ -216,10 +208,9 @@ final class WatchApplicationSupport {
}
releaseBundlingSupport
- .addFilesToBuild(filesToBuild, DsymOutputType.APP)
+ .addFilesToBuild(filesToBuild, Optional.<DsymOutputType>absent())
.validateResources()
- .validateAttributes()
- .addExportedDebugArtifacts(exposedObjcProviderBuilder, DsymOutputType.APP);
+ .validateAttributes();
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
index bc7096ff45..a9730002fa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
@@ -33,6 +33,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.WatchExte
import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -154,9 +155,10 @@ public class WatchExtensionSupport {
}
releaseBundlingSupport
- .addFilesToBuild(filesToBuild, DsymOutputType.APP)
+ .addFilesToBuild(filesToBuild, Optional.of(DsymOutputType.APP))
.validateResources()
- .validateAttributes();
+ .validateAttributes()
+ .addExportedDebugArtifacts(objcProviderBuilder, DsymOutputType.APP);
if (WatchUtils.isBuildingForWatchOS1Version(watchOSVersion)) {
XcodeSupport xcodeSupport =