diff options
author | 2016-05-10 21:20:56 +0000 | |
---|---|---|
committer | 2016-05-11 10:23:44 +0000 | |
commit | 0a447860fa68bdfefe6d5cd506f0de0562f18955 (patch) | |
tree | 1266b408e62e4e2f0237452726977326876e2975 /src/main/java/com | |
parent | fb32cb7b411f8abd1a3a7f1326799fcead0d0546 (diff) |
Adds dSYMs from embedded extensions to the outputs of ios_application.
--
MOS_MIGRATED_REVID=121987056
Diffstat (limited to 'src/main/java/com')
5 files changed, 44 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java index 869c5dc554..4471e6bdab 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java @@ -64,14 +64,18 @@ public class IosExtension extends ReleaseBundlingTargetFactory { } @Override - protected ObjcProvider exposedObjcProvider(RuleContext ruleContext) throws InterruptedException { - // Nest this target's bundle under final IPA - return new ObjcProvider.Builder() - .add(MERGE_ZIP, ruleContext.getImplicitOutputArtifact(ReleaseBundlingSupport.IPA)) - .build(); + protected ObjcProvider exposedObjcProvider( + RuleContext ruleContext, ReleaseBundlingSupport releaseBundlingSupport) + throws InterruptedException { + ObjcProvider.Builder builder = + new ObjcProvider.Builder() + // Nest this target's bundle under final IPA + .add(MERGE_ZIP, ruleContext.getImplicitOutputArtifact(ReleaseBundlingSupport.IPA)); + + releaseBundlingSupport.addExportedDebugArtifacts(builder, DsymOutputType.APP); + return builder.build(); } - /** * Overrides (if necessary) any flag-set minimum iOS version for extensions only with given * minimum OS version. diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java index f15daf3bc0..610382ecb7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java @@ -108,7 +108,9 @@ public class IosFramework extends ReleaseBundlingTargetFactory { } @Override - protected ObjcProvider exposedObjcProvider(RuleContext ruleContext) throws InterruptedException { + protected ObjcProvider exposedObjcProvider( + RuleContext ruleContext, ReleaseBundlingSupport releaseBundlingSupport) + throws InterruptedException { // Assemble framework binary and headers in the label-scoped location, so that it's possible to // pass -F X.framework to the compiler and -framework X to the linker. This mimics usage of // frameworks when built from Xcode. diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index 94013e3f1d..8705e5728f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java @@ -253,6 +253,12 @@ public final class ObjcProvider extends SkylarkClassObject implements Transitive new Key<>(STABLE_ORDER, "debug_symbols_plist", Artifact.class); /** + * Debug artifacts that should be exported by the top-level target. + */ + public static final Key<Artifact> EXPORTED_DEBUG_ARTIFACTS = + new Key<>(STABLE_ORDER, "exported_debug_artifacts", Artifact.class); + + /** * Generated breakpad file containing debug information used by the breakpad crash reporting * system. */ 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 24461598da..27f7762ade 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 @@ -654,12 +654,30 @@ public final class ReleaseBundlingSupport { } } - filesToBuild.add(releaseBundling.getIpaArtifact()) - .addTransitive(debugSymbolBuilder.build()); + filesToBuild + .add(releaseBundling.getIpaArtifact()) + .addTransitive(debugSymbolBuilder.build()) + .addTransitive(objcProvider.get(ObjcProvider.EXPORTED_DEBUG_ARTIFACTS)); + return this; } /** + * Adds dSYM artifacts (plist, arch-speficic binaries) to the {@link ObjcProvider} for export. + */ + public void addExportedDebugArtifacts( + ObjcProvider.Builder objcBuilder, DsymOutputType dsymOutputType) { + if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols() + || ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) { + objcBuilder + .addAll(ObjcProvider.EXPORTED_DEBUG_ARTIFACTS, getDsymFiles(dsymOutputType).values()) + .add( + ObjcProvider.EXPORTED_DEBUG_ARTIFACTS, + intermediateArtifacts.dsymPlist(dsymOutputType)); + } + } + + /** * Creates the {@link XcTestAppProvider} that can be used if this application is used as an * {@code xctest_app}. */ 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 196e241b80..ce6970d1c8 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 @@ -99,7 +99,7 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg InstrumentedFilesProvider.class, InstrumentedFilesCollector.forward(ruleContext, "binary")); - ObjcProvider exposedObjcProvider = exposedObjcProvider(ruleContext); + ObjcProvider exposedObjcProvider = exposedObjcProvider(ruleContext, releaseBundlingSupport); if (exposedObjcProvider != null) { targetBuilder.addProvider(ObjcProvider.class, exposedObjcProvider); } @@ -140,10 +140,12 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg /** * Returns an exposed {@code ObjcProvider} object. - * @throws InterruptedException + * @throws InterruptedException */ @Nullable - protected ObjcProvider exposedObjcProvider(RuleContext ruleContext) throws InterruptedException { + protected ObjcProvider exposedObjcProvider( + RuleContext ruleContext, ReleaseBundlingSupport releaseBundlingSupport) + throws InterruptedException { return null; } |