diff --git a/cmake/modules/AddCompilerFlags.cmake b/cmake/modules/AddCompilerFlags.cmake --- a/cmake/modules/AddCompilerFlags.cmake +++ b/cmake/modules/AddCompilerFlags.cmake @@ -34,6 +34,16 @@ endforeach() endmacro() +function(add_cxx_compiler_flag_with_fallback TARGET_VAR FLAG FALLBACK) + set(TMP_FLAG ${FLAG}) + CHECK_CXX_COMPILER_FLAG(${TMP_FLAG} FLAG_IS_SUPPORTED) + if(NOT FLAG_IS_SUPPORTED) + set(TMP_FLAG ${FALLBACK}) + endif() + string(APPEND ${TARGET_VAR} "${TMP_FLAG}") + set(${TARGET_VAR} ${${TARGET_VAR}} PARENT_SCOPE) +endfunction() + # Note that CMake does not provide any facility to check that a linker flag is # supported by the compiler, but most linker will just drop any unsupported flag # (eventually with a warning). diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,25 +23,37 @@ # We redefine here the flags to suite our needs, by overriding the built-in # RelWithDebInfo configuration (release with debug info). -# RelWithDebInfo CFLAGS are set to -g -O2 -set(RELWITHDEBINFO_G_C_FLAG "-g") -set(RELWITHDEBINFO_O_C_FLAG "-O2") +# CFLAGS are set to -g -O2 for all the configurations +set(DEFAULT_G_C_FLAG "-g") +set(DEFAULT_O_C_FLAG "-O2") # RelWithDebInfo CXXFLAGS flags are set to -g -O2 set(RELWITHDEBINFO_G_CXX_FLAG "-g") set(RELWITHDEBINFO_O_CXX_FLAG "-O2") -set(CMAKE_C_FLAGS_RELWITHDEBINFO - "${RELWITHDEBINFO_G_C_FLAG} ${RELWITHDEBINFO_O_C_FLAG}") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "${DEFAULT_G_C_FLAG} ${DEFAULT_O_C_FLAG}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${RELWITHDEBINFO_G_CXX_FLAG} ${RELWITHDEBINFO_O_CXX_FLAG}") +# Overrides the flags for the Debug cbuild type +include(AddCompilerFlags) + +# Prefer -g3, defaults to -g if unavailable +add_cxx_compiler_flag_with_fallback(DEBUG_G_CXX_FLAG -g3 -g) + +# Prefer -Og, defaults to -O0 if unavailable +add_cxx_compiler_flag_with_fallback(DEBUG_O_CXX_FLAG -Og -O0) + +set(CMAKE_C_FLAGS_DEBUG "${DEFAULT_G_C_FLAG} ${DEFAULT_O_C_FLAG}") +set(CMAKE_CXX_FLAGS_DEBUG "${DEBUG_G_CXX_FLAG} ${DEBUG_O_CXX_FLAG}") +# Define the debugging symbols DEBUG and DEBUG_LOCKORDER +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -DDEBUG_LOCKORDER") + # Ensure that WINDRES_PREPROC is enabled when using windres. if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") list(APPEND CMAKE_RC_FLAGS "-DWINDRES_PREPROC") endif() # Enable warning -include(AddCompilerFlags) # CMake provides the POSITION_INDEPENDENT_CODE property to set PIC/PIE. # Unfortunately setting the -pie linker flag this way required CMake >= 3.14,