Merge pull request #10832 from akallabeth/file-macro-unify

[cmake,gcc,clang] use -fmacro-prefix-map and -ffile-prefix-map
This commit is contained in:
akallabeth 2024-11-08 09:25:16 +01:00 committed by GitHub
commit 0a7c845eec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 20 additions and 24 deletions

View File

@ -239,22 +239,6 @@ if(CMAKE_COMPILER_IS_GNUCC)
endif() endif()
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()
set(THREAD_PREFER_PTHREAD_FLAG TRUE) set(THREAD_PREFER_PTHREAD_FLAG TRUE)
if(NOT IOS) if(NOT IOS)
@ -263,12 +247,6 @@ endif()
# Enable address sanitizer, where supported and when required # Enable address sanitizer, where supported and when required
if(CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GNUCC)
CHECK_C_COMPILER_FLAG ("-fno-omit-frame-pointer" fno-omit-frame-pointer)
if (fno-omit-frame-pointer)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer")
endif()
set(CMAKE_REQUIRED_LINK_OPTIONS_SAVED ${CMAKE_REQUIRED_LINK_OPTIONS}) set(CMAKE_REQUIRED_LINK_OPTIONS_SAVED ${CMAKE_REQUIRED_LINK_OPTIONS})
file(WRITE ${PROJECT_BINARY_DIR}/foo.txt "") file(WRITE ${PROJECT_BINARY_DIR}/foo.txt "")
if(WITH_SANITIZE_ADDRESS) if(WITH_SANITIZE_ADDRESS)

View File

@ -1,5 +1,8 @@
function(CFlagsToVar NAME) function(CFlagsToVar NAME)
set(C_FLAGS ${CMAKE_C_FLAGS}) set(C_FLAGS ${CMAKE_C_FLAGS})
string(REPLACE "${CMAKE_SOURCE_DIR}" "<src dir>" C_FLAGS "${C_FLAGS}")
string(REPLACE "${CMAKE_BINARY_DIR}" "<build dir>" C_FLAGS "${C_FLAGS}")
if (CMAKE_BUILD_TYPE) if (CMAKE_BUILD_TYPE)
string(TOUPPER "${CMAKE_BUILD_TYPE}" CAPS_BUILD_TYPE) string(TOUPPER "${CMAKE_BUILD_TYPE}" CAPS_BUILD_TYPE)
string(APPEND C_FLAGS " ${CMAKE_C_FLAGS_${CAPS_BUILD_TYPE}}") string(APPEND C_FLAGS " ${CMAKE_C_FLAGS_${CAPS_BUILD_TYPE}}")

View File

@ -48,6 +48,7 @@ if (ENABLE_WARNING_VERBOSE)
-Wno-c++98-compat-pedantic -Wno-c++98-compat-pedantic
-Wno-pre-c++17-compat -Wno-pre-c++17-compat
-Wno-exit-time-destructors -Wno-exit-time-destructors
-Wno-gnu-zero-variadic-macro-arguments
) )
endif() endif()
@ -61,6 +62,13 @@ if (ENABLE_WARNING_ERROR)
CheckCXXFlag(-Werror) CheckCXXFlag(-Werror)
endif() endif()
CheckCXXFlag(-fno-omit-frame-pointer)
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 # https://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c
if (WIN32) if (WIN32)
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-DNOMINMAX>) add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-DNOMINMAX>)

View File

@ -43,7 +43,8 @@ if (ENABLE_WARNING_VERBOSE)
-Wno-reserved-identifier -Wno-reserved-identifier
-Wno-covered-switch-default -Wno-covered-switch-default
-Wno-disabled-macro-expansion -Wno-disabled-macro-expansion
-Wno-pre-c11-compat -Wno-pre-c11-compat
-Wno-gnu-zero-variadic-macro-arguments
) )
endif() endif()
@ -52,10 +53,16 @@ if (ENABLE_WARNING_VERBOSE)
endforeach() endforeach()
endif() endif()
if (ENABLE_WARNING_ERROR) if (ENABLE_WARNING_ERROR)
CheckCFlag(-Werror) CheckCFlag(-Werror)
endif() endif()
CheckCFlag(-fno-omit-frame-pointer)
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") set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} CACHE STRING "default CFLAGS")
message("Using CFLAGS ${CMAKE_C_FLAGS}") message("Using CFLAGS ${CMAKE_C_FLAGS}")