diff options
author | Googler <noreply@google.com> | 2018-07-25 10:52:12 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-25 10:53:50 -0700 |
commit | 3f46dd0f6d5a042fc28d265411a6014f666a40c1 (patch) | |
tree | 036accce85c29f38563dbcdbd4fdc5d2d7a5214a /tools/osx/crosstool/wrapped_clang.cc | |
parent | 24d3a01b53a603059091a690e0bddb20ef5fbc98 (diff) |
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
Diffstat (limited to 'tools/osx/crosstool/wrapped_clang.cc')
-rw-r--r-- | tools/osx/crosstool/wrapped_clang.cc | 18 |
1 files changed, 12 insertions, 6 deletions
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<std::string> 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<char, decltype(std::free) *> 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<char, decltype(std::free) *> cwd{getcwd(nullptr, 0), - std::free}; - if (cwd == nullptr) { - std::cerr << "Error determining current working directory\n"; - abort(); - } std::vector<std::string> zip_args = { "/usr/bin/zip", "-q", "-r", std::string(cwd.get()) + "/" + dsym_bundle_zip, "."}; |