diff options
author | Chris Parsons <cparsons@google.com> | 2016-08-29 18:47:20 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-08-30 08:33:58 +0000 |
commit | 21d1277801416a0ccd820b804cab3b3b87dee175 (patch) | |
tree | 0bc4b87b023636c24ce0ad0ba8fcc356d7a65fae /src/main/java/com/google/devtools | |
parent | ee015d6df41eb1184aefe5cb3deeca6ca7053a97 (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
Diffstat (limited to 'src/main/java/com/google/devtools')
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 = |