[PATCH] D83154: clang: Add -fcoverage-prefix-map
Petr Hosek via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 16 13:40:56 PDT 2020
phosek added a comment.
In D83154#2277539 <https://reviews.llvm.org/D83154#2277539>, @rnk wrote:
> Yeah, my goal is for the build system to be able to avoid having to embed PWD into the compiler flags. For example, I believe it is a goal of the LLVM gn build system for the build tree to be relocatable. If the compiler command lines need to contain absolute paths to make the paths in the coverage relative, we won't be able to achieve that goal.
>
> Based on all the comments that have gone before, it sounds like we want a `-fprofile-compilation-dir=` flag. Once we have that, would this logic work?
>
> - if profile compilation dir set, absolutize with that as the root
> - if no profile compilation dir, absolutize with CWD
> - apply profile prefix map
>
> Should `-no-canonical-prefixes` also be involved here? Unclear.
I originally considered `-fprofile-compilation-dir=` and perhaps `-ffile-compilation-dir=` to also handle cases like `__FILE__` macro (`-ffile-prefix-map` and `-fmacro-prefix-map` suffer from the same issue as `-fprofile-prefix-map`), but I'm not sure if specifying compilation dir is the right approach. It makes sense for debug info because `-fdebug-compilation-dir` is used directly as `DW_AT_comp_dir` and also because it's a convention for source file paths in debug info to be relative to build directory, but it's not the case for paths in coverage mapping or `__FILE__`.
So what I'm considering now and started prototyping is a `-fsource-dir`flag (or maybe `-fsource-root-dir`, I'm open to suggestions for the name) where the semantics would be that if this flag is set, all source paths will be made relative to this directory. There's an open question whether this should also apply to sources outside of that directory, for example system header paths.
The example use case, assuming source is in `/path/to/source` and build is in `/path/to/build`, would be: `clang -fdebug-compilation-dir . -fsource-dir ../source ../source/dir/file.c`. In this case `__FILE__` would expand to `dir/file.c` and that path would be also stored in coverage mapping.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83154/new/
https://reviews.llvm.org/D83154
More information about the cfe-commits
mailing list