mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 09:39:43 +01:00
Add REMOVE_ABSOLUTE_PATHS
CMake option
This option is enabled by default and will replace absolute paths of all source directory file paths with relative paths in the compiled binary, if the compiler supports it. Of course, this isn't needed if you compile with all paths removed anyways (e.g. in Release mode). The purpose is to help make builds reproducible and to remove any potentially sensitive information about the user or the user's system from the compiled binary. Both Clang and GCC support -fdebug-prefix-map, -fmacro-prefix-map, and -ffile-prefix-map. In particular, -ffile-prefix-map is just a flag that does both -fdebug-prefix-map and -fmacro-prefix-map. According to https://reproducible-builds.org/docs/build-path/ , -fdebug-prefix-map is available in all GCC versions but only available starting from Clang 3.8, and -fmacro-prefix-map and -ffile-prefix-map are available since GCC 8 and Clang 10. So we check the compiler version and use the available flags depending on if the compiler supports it or not. This does make debugging a bit more annoying, but there are a couple ways to rectify this. Either disable it with -DREMOVE_ABSOLUTE_PATHS=OFF, or add a `.gdbinit` that consists of set substitute-path . ../.. so that `.` is considered to be `../..`. Of course, if you need to, replace `../..` with the actual source directory path (in my case it's `../../..` because I place my build folders in another subdirectory to have multiple build folders in one directory). This doesn't need to be a global `.gdbinit`, it can be in a directory-specific `.gdbinit` (similar to how `.gitignore`s can also be directory-specific). But then you need to add `add-auto-load-safe-path` to your `.gdbinit` to load any directory-specific `.gdbinit`s. The above is for GDB; I don't know what (if anything) needs to be done for LLDB; I don't use LLDB. Fixes #889.
This commit is contained in:
parent
c4301cf4ec
commit
cf4511f5d1
1 changed files with 38 additions and 0 deletions
|
@ -24,6 +24,9 @@ if(OFFICIAL_BUILD AND NOT MAKEANDPLAY)
|
|||
set(GOG ON)
|
||||
endif()
|
||||
|
||||
option(REMOVE_ABSOLUTE_PATHS "If supported by the compiler, replace all absolute paths to source directories compiled into the binary (if any) with relative paths" ON)
|
||||
|
||||
|
||||
# Architecture Flags
|
||||
if(APPLE)
|
||||
# Wow, Apple is a huge jerk these days huh?
|
||||
|
@ -329,6 +332,41 @@ if(MSVC)
|
|||
endif()
|
||||
|
||||
|
||||
if(REMOVE_ABSOLUTE_PATHS)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.8)
|
||||
set(SUPPORTS_DEBUG_PREFIX_MAP TRUE)
|
||||
else()
|
||||
set(SUPPORTS_DEBUG_PREFIX_MAP FALSE)
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 10.0)
|
||||
set(SUPPORTS_FILE_PREFIX_MAP TRUE)
|
||||
else()
|
||||
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
|
||||
endif()
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(SUPPORTS_DEBUG_PREFIX_MAP TRUE)
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0)
|
||||
set(SUPPORTS_FILE_PREFIX_MAP TRUE)
|
||||
else()
|
||||
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
|
||||
endif()
|
||||
else()
|
||||
set(SUPPORTS_DEBUG_PREFIX_MAP FALSE)
|
||||
set(SUPPORTS_FILE_PREFIX_MAP FALSE)
|
||||
endif()
|
||||
|
||||
get_filename_component(REPO_DIR ../ ABSOLUTE)
|
||||
|
||||
# Remove absolute source paths from compiled binary
|
||||
if(SUPPORTS_FILE_PREFIX_MAP)
|
||||
list(APPEND GLOBAL_COMPILE_FLAGS -ffile-prefix-map=${REPO_DIR}=.)
|
||||
elseif(SUPPORTS_DEBUG_PREFIX_MAP)
|
||||
list(APPEND GLOBAL_COMPILE_FLAGS -fdebug-prefix-map=${REPO_DIR}=.)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
target_compile_options(VVVVVV PRIVATE ${GLOBAL_COMPILE_FLAGS})
|
||||
|
||||
foreach(static_library IN LISTS STATIC_LIBRARIES)
|
||||
|
|
Loading…
Reference in a new issue