From 3f46dd0f6d5a042fc28d265411a6014f666a40c1 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 25 Jul 2018 10:52:12 -0700 Subject: Add new debug_prefix_map_pwd_is_dot CROSSTOOL feature This feature sets `-fdebug_prefix_map=$PWD=.` as an argument to Clang in order to standardize the paths to debug symbols (by making them relative to the exec root). Note that this needs to be implemented inside wrapped_clang instead of as an argument to the action itself for caching purposes, as PWD can change based on the action's executor. PiperOrigin-RevId: 206019016 --- tools/osx/crosstool/CROSSTOOL.tpl | 180 +++++++++++++++++++++++++++++++++++ tools/osx/crosstool/wrapped_clang.cc | 18 ++-- 2 files changed, 192 insertions(+), 6 deletions(-) diff --git a/tools/osx/crosstool/CROSSTOOL.tpl b/tools/osx/crosstool/CROSSTOOL.tpl index 6686ce0e69..0e2964393d 100644 --- a/tools/osx/crosstool/CROSSTOOL.tpl +++ b/tools/osx/crosstool/CROSSTOOL.tpl @@ -200,6 +200,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -1829,6 +1847,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -3474,6 +3510,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -5122,6 +5176,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -6797,6 +6869,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -8442,6 +8532,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -10075,6 +10183,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -11711,6 +11837,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -13374,6 +13518,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } @@ -15008,6 +15170,24 @@ toolchain { expand_if_all_available: "legacy_compile_flags" } } + feature { + name: "debug_prefix_map_pwd_is_dot" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "linkstamp-compile" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "DEBUG_PREFIX_MAP_PWD=." + } + } + } feature { name: "no_dsym_create_zip" } diff --git a/tools/osx/crosstool/wrapped_clang.cc b/tools/osx/crosstool/wrapped_clang.cc index 5f283a37fa..25ead4b994 100644 --- a/tools/osx/crosstool/wrapped_clang.cc +++ b/tools/osx/crosstool/wrapped_clang.cc @@ -177,6 +177,15 @@ int main(int argc, char *argv[]) { std::vector processed_args = {"/usr/bin/xcrun", tool_name}; std::string linked_binary, dsym_path, dsym_bundle_zip, bitcode_symbol_map; + std::string dest_dir; + + std::unique_ptr cwd{getcwd(nullptr, 0), + std::free}; + if (cwd == nullptr) { + std::cerr << "Error determining current working directory\n"; + abort(); + } + for (int i = 1; i < argc; i++) { std::string arg(argv[i]); @@ -196,6 +205,9 @@ int main(int argc, char *argv[]) { std::ofstream bitcode_symbol_map_file(bitcode_symbol_map); arg = bitcode_symbol_map; } + if (SetArgIfFlagPresent(arg, "DEBUG_PREFIX_MAP_PWD", &dest_dir)) { + arg = "-fdebug-prefix-map=" + std::string(cwd.get()) + "=" + dest_dir; + } FindAndReplace("__BAZEL_XCODE_DEVELOPER_DIR__", developer_dir, &arg); FindAndReplace("__BAZEL_XCODE_SDKROOT__", sdk_root, &arg); processed_args.push_back(arg); @@ -240,12 +252,6 @@ int main(int argc, char *argv[]) { RunSubProcess(dsymutil_args); if (dsyms_use_zip_file) { - std::unique_ptr cwd{getcwd(nullptr, 0), - std::free}; - if (cwd == nullptr) { - std::cerr << "Error determining current working directory\n"; - abort(); - } std::vector zip_args = { "/usr/bin/zip", "-q", "-r", std::string(cwd.get()) + "/" + dsym_bundle_zip, "."}; -- cgit v1.2.3