aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Dmitry Shevchenko <dmishe@google.com>2016-05-10 21:20:56 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-05-11 10:23:44 +0000
commit0a447860fa68bdfefe6d5cd506f0de0562f18955 (patch)
tree1266b408e62e4e2f0237452726977326876e2975 /src/main/java/com/google/devtools
parentfb32cb7b411f8abd1a3a7f1326799fcead0d0546 (diff)
Adds dSYMs from embedded extensions to the outputs of ios_application.
-- MOS_MIGRATED_REVID=121987056
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java8
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;
}