From ebcf4c44a9b1937a2236a41fab5e7a0974285288 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 7 Nov 2024 16:46:17 +0100 Subject: [PATCH] [cmake,gcc,clang] use -fmacro-prefix-map and -ffile-prefix-map Instead of some bash path substitution only working with Makefiles use the compiler options to map source and build directories to some defaults --- CMakeLists.txt | 12 ------------ cmake/CXXCompilerFlags.cmake | 5 +++++ cmake/CompilerFlags.cmake | 6 +++++- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea5a2513d..faaeef6db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,18 +239,6 @@ if(CMAKE_COMPILER_IS_GNUCC) endif() endif() -# When building with Unix Makefiles and doing any release builds -# try to set __FILE__ to relative paths via a make specific macro -if (CMAKE_GENERATOR MATCHES "Unix Makefile*") - if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") - string(TOUPPER ${CMAKE_BUILD_TYPE} UPPER_BUILD_TYPE) - CHECK_C_COMPILER_FLAG (-Wno-builtin-macro-redefined Wno-builtin-macro-redefined) - if(Wno-builtin-macro-redefined) - set(CMAKE_C_FLAGS_${UPPER_BUILD_TYPE} "${CMAKE_C_FLAGS_${UPPER_BUILD_TYPE}} -Wno-builtin-macro-redefined -D__FILE__='\"$(subst ${PROJECT_BINARY_DIR}/,,$(subst ${PROJECT_SOURCE_DIR}/,,$(abspath $<)))\"'") - endif() - endif() -endif() - if(CMAKE_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu") endif() diff --git a/cmake/CXXCompilerFlags.cmake b/cmake/CXXCompilerFlags.cmake index 95bc64cdc..39755a244 100644 --- a/cmake/CXXCompilerFlags.cmake +++ b/cmake/CXXCompilerFlags.cmake @@ -61,6 +61,11 @@ if (ENABLE_WARNING_ERROR) CheckCXXFlag(-Werror) endif() +CheckCXXFlag(-fmacro-prefix-map="${CMAKE_SOURCE_DIR}"="./") +CheckCXXFlag(-fmacro-prefix-map="${CMAKE_BINARY_DIR}"="./build/") +CheckCXXFlag(-ffile-prefix-map="${CMAKE_SOURCE_DIR}"="./") +CheckCXXFlag(-ffile-prefix-map="${CMAKE_BINARY_DIR}"="./build") + # https://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c if (WIN32) add_compile_options($<$:-DNOMINMAX>) diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake index 682aa7dd3..ed553c4b6 100644 --- a/cmake/CompilerFlags.cmake +++ b/cmake/CompilerFlags.cmake @@ -52,10 +52,14 @@ if (ENABLE_WARNING_VERBOSE) endforeach() endif() - if (ENABLE_WARNING_ERROR) CheckCFlag(-Werror) endif() +CheckCFlag(-fmacro-prefix-map="${CMAKE_SOURCE_DIR}"="./") +CheckCFlag(-fmacro-prefix-map="${CMAKE_BINARY_DIR}"="./build/") +CheckCFlag(-ffile-prefix-map="${CMAKE_SOURCE_DIR}"="./") +CheckCFlag(-ffile-prefix-map="${CMAKE_BINARY_DIR}"="./build") + set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "default CFLAGS") message("Using CFLAGS ${CMAKE_C_FLAGS}")