diff options
author | Dmitry Shevchenko <dmishe@google.com> | 2016-05-02 20:37:12 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-05-03 08:37:50 +0000 |
commit | 81a1605ac079e0570ba5747346360dafbb3907ea (patch) | |
tree | 49e5af5a81ca579b8c799493a00e03274e1ea1d5 | |
parent | 90ec7cf18820c3ead4ce9523da3116a3f3505b3b (diff) |
Adds a new flag for generation of dSYMs for all apple rules.
* This flag forces -g and enables dSYM bundle actions.
* All instances of breakpad generation are now gated by the old --objc_generate_debug_symbols option.
--
MOS_MIGRATED_REVID=121304681
7 files changed, 58 insertions, 16 deletions
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 9b8add01e9..442a847494 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 @@ -224,7 +224,8 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory builder.addDepObjcProviders(createSkylarkObjcProviders(ruleContext)); - if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols()) { + if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols() + || ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) { builder.addDebugArtifacts(DsymOutputType.APP); } 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 1b84341fec..e2d0a0bd10 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 @@ -545,7 +545,7 @@ public final class CompilationSupport { .add("-enable-objc-interop") .add(objcConfiguration.getSwiftCoptsForCompilationMode()); - if (objcConfiguration.generateDebugSymbols()) { + if (objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym()) { commandLine.add("-g"); } @@ -627,7 +627,7 @@ public final class CompilationSupport { .add("-target").add(swiftTarget(appleConfiguration)) .add(objcConfiguration.getSwiftCoptsForCompilationMode()); - if (objcConfiguration.generateDebugSymbols()) { + if (objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym()) { commandLine.add("-g"); } @@ -797,9 +797,13 @@ public final class CompilationSupport { DsymOutputType dsymOutputType) { Optional<Artifact> dsymBundleZip; Optional<Artifact> linkmap; - if (objcConfiguration.generateDebugSymbols()) { + if (objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym()) { registerDsymActions(dsymOutputType); dsymBundleZip = Optional.of(intermediateArtifacts.tempDsymBundleZip(dsymOutputType)); + + if (objcConfiguration.generateDebugSymbols()) { + registerBreakpadAction(intermediateArtifacts.dsymSymbol(dsymOutputType)); + } } else { dsymBundleZip = Optional.absent(); } @@ -1346,6 +1350,10 @@ public final class CompilationSupport { .addOutput(debugSymbolFile) .build(ruleContext)); + return this; + } + + private void registerBreakpadAction(Artifact debugSymbolFile) { Artifact dumpsyms = ruleContext.getPrerequisiteArtifact("$dumpsyms", Mode.HOST); Artifact breakpadFile = intermediateArtifacts.breakpadSym(); ruleContext.registerAction(ObjcRuleClasses.spawnOnDarwinActionBuilder() @@ -1360,7 +1368,6 @@ public final class CompilationSupport { ShellUtils.shellEscape(breakpadFile.getExecPathString()))) .addOutput(breakpadFile) .build(ruleContext)); - return this; } private PathFragment removeSuffix(PathFragment path, String suffix) { @@ -1433,7 +1440,7 @@ public final class CompilationSupport { builder.add("-miphoneos-version-min=" + objcConfiguration.getMinimumOs()); } - if (objcConfiguration.generateDebugSymbols()) { + if (objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym()) { builder.add("-g"); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java index 397ae0341e..007ba4d547 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java @@ -54,10 +54,13 @@ public class ObjcCommandLineOptions extends FragmentOptions { + "on the machine the simulator will be run on.") public String iosSimulatorDevice; - @Option(name = "objc_generate_debug_symbols", - defaultValue = "false", - category = "flags", - help = "Specifies whether to generate debug symbol(.dSYM) file.") + // TODO(b/28110492): Deprecate this. + @Option( + name = "objc_generate_debug_symbols", + defaultValue = "false", + category = "flags", + help = "Specifies whether to generate debug symbol(.dSYM) file." + ) public boolean generateDebugSymbols; @Option(name = "objc_generate_linkmap", @@ -128,6 +131,14 @@ public class ObjcCommandLineOptions extends FragmentOptions { ) public boolean enableBinaryStripping; + @Option( + name = "apple_generate_dsym", + defaultValue = "false", + category = "flags", + help = "Whether to generate debug symbol(.dSYM) file(s)." + ) + public boolean appleGenerateDsym; + // This option exists because two configurations are not allowed to have the same cache key // (partially derived from options). Since we have multiple transitions (see // getPotentialSplitTransitions below) that may result in the same configuration values at runtime diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index 33b652a288..5f832ebc27 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -660,9 +660,12 @@ public final class ObjcCommon { if (dsymOutputType != null) { objcProvider - .add(BREAKPAD_FILE, intermediateArtifacts.breakpadSym()) .add(DEBUG_SYMBOLS, intermediateArtifacts.dsymSymbol(dsymOutputType)) .add(DEBUG_SYMBOLS_PLIST, intermediateArtifacts.dsymPlist(dsymOutputType)); + + if (ObjcRuleClasses.objcConfiguration(context).generateDebugSymbols()) { + objcProvider.add(BREAKPAD_FILE, intermediateArtifacts.breakpadSym()); + } } return new ObjcCommon(objcProvider.build(), compilationArtifacts); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java index 8398638ea0..7337ad82c2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java @@ -59,6 +59,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { private final DottedVersion iosSimulatorVersion; private final String iosSimulatorDevice; private final boolean generateDebugSymbols; + private final boolean generateDsym; private final boolean generateLinkmap; private final boolean runMemleaks; private final ImmutableList<String> copts; @@ -86,6 +87,7 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { this.iosSimulatorVersion = Preconditions.checkNotNull(objcOptions.iosSimulatorVersion, "iosSimulatorVersion"); this.generateDebugSymbols = objcOptions.generateDebugSymbols; + this.generateDsym = objcOptions.appleGenerateDsym; this.generateLinkmap = objcOptions.generateLinkmap; this.runMemleaks = objcOptions.runMemleaks; this.copts = ImmutableList.copyOf(objcOptions.copts); @@ -127,10 +129,20 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { return iosSimulatorVersion; } + /** + * Returns whether dSYM + breakpad generation is enabled. + */ public boolean generateDebugSymbols() { return generateDebugSymbols; } + /** + * Returns whether dSYM generation is enabled. + */ + public boolean generateDsym() { + return generateDsym; + } + public boolean generateLinkmap() { return generateLinkmap; } 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 1d8bf7c210..9c2e330a26 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 @@ -622,8 +622,8 @@ public final class ReleaseBundlingSupport { filesToBuild.add(linkmapFile); } - if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols()) { - filesToBuild.addAll(getBreakpadFiles().values()); + if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols() + || ObjcRuleClasses.objcConfiguration(ruleContext).generateDsym()) { filesToBuild.addAll(getDsymFiles(dsymOutputType).values()); // TODO(bazel-team): Remove the 'if' when the objc_binary rule does not generate a bundle any @@ -641,8 +641,15 @@ public final class ReleaseBundlingSupport { if (linkedBinary == LinkedBinary.LOCAL_AND_DEPENDENCIES) { debugSymbolBuilder .add(intermediateArtifacts.dsymPlist(dsymOutputType)) - .add(intermediateArtifacts.dsymSymbol(dsymOutputType)) - .add(intermediateArtifacts.breakpadSym()); + .add(intermediateArtifacts.dsymSymbol(dsymOutputType)); + } + } + + if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols()) { + filesToBuild.addAll(getBreakpadFiles().values()); + + if (linkedBinary == LinkedBinary.LOCAL_AND_DEPENDENCIES) { + debugSymbolBuilder.add(intermediateArtifacts.breakpadSym()); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java index e50f2da56e..aa6a1ec8ad 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java @@ -268,7 +268,8 @@ public final class XcodeSupport { this.appleCpus = multiCpus; } this.minimumOs = objcConfiguration.getMinimumOs().toString(); - this.generateDebugSymbols = objcConfiguration.generateDebugSymbols(); + this.generateDebugSymbols = + objcConfiguration.generateDebugSymbols() || objcConfiguration.generateDsym(); } @Override |