Automated rollback of commit d6b7a8dbcd307ae93be9f4e7b5e90d32febdd4d5. *** Reason for rollback *** Keeping -fdebug-prefix-map until we have a better understanding of DBGVersion 2 issues. PiperOrigin-RevId: 186337767
diff --git a/src/TulsiGenerator/BazelBuildSettingsFeatures.swift b/src/TulsiGenerator/BazelBuildSettingsFeatures.swift index 53f2438..32834b4 100644 --- a/src/TulsiGenerator/BazelBuildSettingsFeatures.swift +++ b/src/TulsiGenerator/BazelBuildSettingsFeatures.swift
@@ -13,6 +13,6 @@ // limitations under the License. let bazelBuildSettingsFeatures = [ - // Export dSYMs to allow us to establish source maps that can handle multiple potential paths. - "TULSI_ALL_DSYM", + // For non-distributed builds. + "TULSI_DEBUG_PREFIX_MAP", ]
diff --git a/src/TulsiGenerator/Scripts/bazel_build.py b/src/TulsiGenerator/Scripts/bazel_build.py index 38b1cf2..4c6e2b3 100755 --- a/src/TulsiGenerator/Scripts/bazel_build.py +++ b/src/TulsiGenerator/Scripts/bazel_build.py
@@ -188,7 +188,7 @@ # The build configurations handled by this parser. KNOWN_CONFIGS = ['Debug', 'Release', 'Fastbuild'] - def __init__(self, sdk_version, platform_name, arch): + def __init__(self, sdk_version, platform_name, arch, main_group_path): self.targets = [] self.startup_options = collections.defaultdict(list) self.build_options = collections.defaultdict( @@ -213,6 +213,18 @@ ], }) + # Options specific to debugger integration in Xcode. + xcode_version_major = int(os.environ['XCODE_VERSION_MAJOR']) + if xcode_version_major < 800: + xcode_lldb_options = [ + '--copt=-Xclang', '--copt=-fdebug-compilation-dir', + '--copt=-Xclang', '--copt=%s' % main_group_path, + '--objccopt=-Xclang', '--objccopt=-fdebug-compilation-dir', + '--objccopt=-Xclang', '--objccopt=%s' % main_group_path, + ] + self.build_options['Debug'].extend(xcode_lldb_options) + self.build_options['Release'].extend(xcode_lldb_options) + self.sdk_version = sdk_version self.platform_name = platform_name @@ -497,6 +509,8 @@ self.generate_dsym = (os.environ.get('TULSI_ALL_DSYM', 'NO') == 'YES' or os.environ.get('TULSI_MUST_USE_DSYM', 'NO') == 'YES') + self.use_debug_prefix_map = os.environ.get('TULSI_DEBUG_PREFIX_MAP', + 'NO') == 'YES' self.extra_remap_path = os.environ.get('TULSI_EXTRA_REMAP_PATH', '') self.remap_dotted_paths = os.environ.get('TULSI_REMAP_DOTTED_PATHS', 'NO') == 'YES' @@ -541,11 +555,6 @@ self.xcode_version_major = int(os.environ['XCODE_VERSION_MAJOR']) self.xcode_version_minor = int(os.environ['XCODE_VERSION_MINOR']) - # Warn if the user is on an unsupported version of Xcode. - if self.xcode_version_major < 800: - _PrintXcodeWarning('Tulsi debugging is no longer supported for Xcode 7.') - _PrintXcodeWarning('Use Tulsi 0.4.185727384.20180214 for Xcode < 8.') - # Path where Xcode expects the artifacts to be written to. This is not the # codesigning_path as device vs simulator builds have different signing # requirements, so Xcode expects different paths to be signed. This is @@ -602,7 +611,8 @@ parser = _OptionsParser(self.sdk_version, self.platform_name, - self.arch) + self.arch, + self.main_group_path) timer = Timer('Parsing options', 'parsing_options').Start() message, exit_code = parser.ParseOptions(args[1:]) timer.End() @@ -614,6 +624,27 @@ self.bazel_bin_path = os.path.abspath(parser.bazel_bin_path) self.bazel_executable = parser.bazel_executable + # Use -fdebug-prefix-map to have debug symbols match Xcode-visible sources. + # + # NOTE: Use of -fdebug-prefix-map leads to producing binaries that cannot be + # reused across multiple machines by a distributed build system, unless the + # absolute paths to files visible to Xcode match perfectly between all of + # those machines. + # + # For this reason, -fdebug-prefix-map is provided as a default for non- + # distributed purposes. + if self.use_debug_prefix_map: + # Add the debug source maps now that we have bazel_executable. + source_maps = self._ExtractTargetSourceMaps() + + prefix_maps = [] + for source_map in source_maps: + prefix_maps.append('--copt=-fdebug-prefix-map=%s=%s' % + source_map) + + # Extend our list of build options with maps just prior to building. + parser.build_options[_OptionsParser.ALL_CONFIGS].extend(prefix_maps) + self.build_path = os.path.join(self.bazel_bin_path, os.environ.get('TULSI_BUILD_PATH', '')) @@ -710,7 +741,7 @@ # correction applies to debug prefix maps as well. if self.xcode_version_major >= 800: timer = Timer('Updating .lldbinit', 'updating_lldbinit').Start() - clear_source_map = self.generate_dsym + clear_source_map = self.generate_dsym or self.use_debug_prefix_map exit_code = self._UpdateLLDBInit(clear_source_map) timer.End() if exit_code: