Skip to content

Commit

Permalink
[cmake] Fix relative paths in prefix map (#74132)
Browse files Browse the repository at this point in the history
When building debug version of LLVM with
`LLVM_USE_RELATIVE_PATHS_IN_FILES=On` would cause source paths to be
incorrect, and be prefixed by the build directory. This lead to source
locations like the following: `../build/llvm/...`. Such paths do not
exist, and existing debuggers can't adjust their search location because
of the incorrect prefix. Ultimately, this happened because the relative
path creation goes in the wrong direction, from source-dir to build-dir
instead of from build-dir to source-dir.

This patch swaps the directionality of the relative paths so that they
get a proper prefix from the build directory. Given a build dir at
`/build` and a project directory at `/llvm-project`, we get source
locations like: `../llvm-project/llvm/lib/Transforms/...`, which a
debugger can resolve once pointed to the correct project directory.
  • Loading branch information
ilovepi committed Dec 1, 2023
1 parent 5fe741f commit d22944d
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions llvm/cmake/modules/HandleLLVMOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1341,7 +1341,7 @@ if(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO)
else()
set(source_root "${LLVM_MAIN_SRC_DIR}")
endif()
file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}")
file(RELATIVE_PATH relative_root "${CMAKE_BINARY_DIR}" "${source_root}")
append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES)
Expand All @@ -1356,7 +1356,7 @@ if(LLVM_USE_RELATIVE_PATHS_IN_FILES)
else()
set(source_root "${LLVM_MAIN_SRC_DIR}")
endif()
file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}")
file(RELATIVE_PATH relative_root "${CMAKE_BINARY_DIR}" "${source_root}")
append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES)
Expand Down

0 comments on commit d22944d

Please sign in to comment.