From 91bccedc3225a32db8bb3ca714163f3575c7306c Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 18 Jun 2020 07:08:06 +0800 Subject: [PATCH] cmake: use add_compile_options() instead of appending compile flags to CMAKE_C_FLAGS, use add_compile_options(), as COMPILE_OPTIONS is a list, it'd simpler to append options to it and to access it in a structured way. Signed-off-by: Kefu Chai --- CMakeLists.txt | 3 +- cmake/modules/Distutils.cmake | 2 +- cmake/modules/SIMDExt.cmake | 3 +- src/CMakeLists.txt | 89 +++++++++++++++++++++-------------- src/osd/CMakeLists.txt | 6 +-- 5 files changed, 59 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 714fa08a3d7ec..d2d8197c0e2db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -552,8 +552,7 @@ endif() if(sanitizers) find_package(Sanitizers REQUIRED ${sanitizers}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Sanitizers_COMPILE_OPTIONS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Sanitizers_COMPILE_OPTIONS}") + add_compile_options(${Sanitizers_COMPILE_OPTIONS}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${Sanitizers_COMPILE_OPTIONS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${Sanitizers_COMPILE_OPTIONS}") endif() diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake index 5fe929499d3cd..8092e58379c58 100644 --- a/cmake/modules/Distutils.cmake +++ b/cmake/modules/Distutils.cmake @@ -49,7 +49,7 @@ function(distutils_add_cython_module target name src) string(STRIP "${CMAKE_CXX_COMPILER_ARG1}" cxx_compiler_arg1) # Note: no quotes, otherwise distutils will execute "/usr/bin/ccache gcc" # CMake's implicit conversion between strings and lists is wonderful, isn't it? - string(REPLACE " " ";" cflags ${CMAKE_C_FLAGS}) + set(cflags ${COMPILE_OPTIONS}) list(APPEND cflags -iquote${CMAKE_SOURCE_DIR}/src/include -w) # This little bit of magic wipes out __Pyx_check_single_interpreter() # Note: this is reproduced in distutils_install_cython_module diff --git a/cmake/modules/SIMDExt.cmake b/cmake/modules/SIMDExt.cmake index 2c36ac3736dcf..72f86e33b94a4 100644 --- a/cmake/modules/SIMDExt.cmake +++ b/cmake/modules/SIMDExt.cmake @@ -90,8 +90,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64|(powerpc|ppc)64le") CHECK_C_COMPILER_FLAG("-maltivec" HAS_ALTIVEC) if(HAS_ALTIVEC) message(STATUS " HAS_ALTIVEC yes") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maltivec") - set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -maltivec") + add_compile_options(-maltivec) endif() CHECK_C_COMPILER_FLAG("-mcpu=power8" HAVE_POWER8) if(HAVE_POWER8) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ac80deb8641e8..b3c3e0bb8dbec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,38 +29,43 @@ if(LINUX) add_definitions("-D_GNU_SOURCE") endif() -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -fsigned-char") +add_compile_options( + -Wall + -fno-strict-aliasing + -fsigned-char) if(NOT MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wtype-limits -Wignored-qualifiers") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Werror=format-security") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winit-self -Wno-unknown-pragmas") - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-ignored-qualifiers") + add_compile_options( + -Wtype-limits + -Wignored-qualifiers + -Wpointer-arith + -Werror=format-security + -Winit-self + -Wno-unknown-pragmas) + add_compile_options($<$:-Wnon-virtual-dtor>) + add_compile_options($<$:-Wno-ignored-qualifiers>) endif() -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-1024") +add_compile_options($<$:-ftemplate-depth-1024>) CHECK_CXX_COMPILER_FLAG("-Wpessimizing-move" COMPILER_SUPPORTS_PESSIMIZING_MOVE) if(COMPILER_SUPPORTS_PESSIMIZING_MOVE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpessimizing-move") + add_compile_options($<$:-Wpessimizing-move>) endif() CHECK_CXX_COMPILER_FLAG("-Wredundant-move" COMPILER_SUPPORTS_REDUNDANT_MOVE) if(COMPILER_SUPPORTS_REDUNDANT_MOVE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wredundant-move") + add_compile_options($<$:-Wredundant-move>) endif() if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) if(MINGW) # The MINGW headers are missing some "const" qualifiers. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpermissive") + add_compile_options($<$,$>:-fpermissive>) else() string(APPEND CMAKE_EXE_LINKER_FLAGS " -rdynamic") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-null-sentinel -Woverloaded-virtual") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-new-ttp-matching") + add_compile_options($<$:-Wstrict-null-sentinel>) + add_compile_options($<$:-Woverloaded-virtual>) + add_compile_options($<$:-fno-new-ttp-matching>) # cmake does not add '-pie' for executables even if # CMAKE_POSITION_INDEPENDENT_CODE is TRUE. if(EXE_LINKER_USE_PIE) @@ -71,14 +76,18 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_EXPORTS_C_FLAG}") string(APPEND CMAKE_LINKER_FLAGS " -rdynamic -export-dynamic ${CMAKE_EXE_EXPORTS_C_FLAG}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override -Wno-mismatched-tags") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-address-of-packed-member") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-local-typedef") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-varargs") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-designator") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces -Wno-parentheses -Wno-deprecated-register") + add_compile_options($<$:-Wno-inconsistent-missing-override>) + add_compile_options($<$:-Wno-mismatched-tags>) + add_compile_options($<$:-Wno-unused-private-field>) + add_compile_options($<$:-Wno-address-of-packed-member>) + add_compile_options( + -Wno-unused-function + -Wno-unused-local-typedef + -Wno-varargs + -Wno-gnu-designator + -Wno-missing-braces + -Wno-parentheses + -Wno-deprecated-register) if(FREEBSD) # Need to use the GNU binutils linker to get versioning right. string(APPEND CMAKE_EXE_LINKER_FLAGS " -fuse-ld=/usr/local/bin/ld -Wno-unused-command-line-argument") @@ -88,7 +97,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL Clang) string(APPEND CMAKE_SHARED_LINKER_FLAGS " -undefined dynamic_lookup") endif() endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}") if(NOT CMAKE_BUILD_TYPE) if(EXISTS "${CMAKE_SOURCE_DIR}/.git") @@ -101,7 +109,7 @@ if(NOT CMAKE_BUILD_TYPE) endif() if(WITH_CEPH_DEBUG_MUTEX OR CMAKE_BUILD_TYPE STREQUAL Debug) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCEPH_DEBUG_MUTEX") + add_compile_options($<$:-DCEPH_DEBUG_MUTEX>) endif() include(CheckCCompilerFlag) @@ -115,14 +123,13 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) endif() CHECK_C_COMPILER_FLAG(-fstack-protector-strong HAS_STACK_PROTECT) if (HAS_STACK_PROTECT) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") + add_compile_options(-fstack-protector-strong) endif() endif(CMAKE_CXX_COMPILER_ID STREQUAL GNU) CHECK_C_COMPILER_FLAG("-D_GLIBCXX_ASSERTIONS" HAS_GLIBCXX_ASSERTIONS) if(HAS_GLIBCXX_ASSERTIONS AND CMAKE_BUILD_TYPE STREQUAL Debug) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_ASSERTIONS") + add_compile_options($<$:-D_GLIBCXX_ASSERTIONS>) endif() include(SIMDExt) @@ -171,8 +178,7 @@ set(DIAGNOSTICS_COLOR "auto" CACHE STRING "Used if the C/C++ compiler supports the -fdiagnostics-color option. May have one of three values -- 'auto' (default), 'always', or 'never'. If set to 'always' and the compiler supports the option, 'make [...] | less -R' will make visible diagnostics colorization of compiler output.") if(COMPILER_SUPPORTS_DIAGNOSTICS_COLOR) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=${DIAGNOSTICS_COLOR}") + add_compile_options(-fdiagnostics-color=${DIAGNOSTICS_COLOR}) endif() set(EXTRALIBS ${CMAKE_DL_LIBS}) @@ -188,9 +194,11 @@ if(${ENABLE_COVERAGE}) find_program(HAVE_GCOV gcov) if(NOT HAVE_GCOV) message(FATAL_ERROR "Coverage Enabled but gcov Not Found") - endif(NOT HAVE_GCOV) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") + endif() + add_compile_options( + -fprofile-arcs + -ftest-coverage + -O0) list(APPEND EXTRALIBS gcov) endif(${ENABLE_COVERAGE}) @@ -246,13 +254,22 @@ endif() # sort out which allocator to use if(ALLOCATOR STREQUAL "tcmalloc") set(ALLOC_LIBS gperftools::tcmalloc) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") + add_compile_options($<$:-fno-builtin-malloc>) + add_compile_options($<$:-fno-builtin-calloc>) + add_compile_options($<$:-fno-builtin-realloc>) + add_compile_options($<$:-fno-builtin-free>) elseif(ALLOCATOR STREQUAL "tcmalloc_minimal") set(ALLOC_LIBS gperftools::tcmalloc_minimal) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") + add_compile_options($<$:-fno-builtin-malloc>) + add_compile_options($<$:-fno-builtin-calloc>) + add_compile_options($<$:-fno-builtin-realloc>) + add_compile_options($<$:-fno-builtin-free>) elseif(ALLOCATOR STREQUAL "jemalloc") set(ALLOC_LIBS JeMalloc::JeMalloc) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free") + add_compile_options($<$:-fno-builtin-malloc>) + add_compile_options($<$:-fno-builtin-calloc>) + add_compile_options($<$:-fno-builtin-realloc>) + add_compile_options($<$:-fno-builtin-free>) endif() if (WITH_BLKIN) diff --git a/src/osd/CMakeLists.txt b/src/osd/CMakeLists.txt index 32ac7f8e63843..c5f2804a5f4a2 100644 --- a/src/osd/CMakeLists.txt +++ b/src/osd/CMakeLists.txt @@ -3,9 +3,9 @@ set(osdc_osd_srcs ${CMAKE_SOURCE_DIR}/src/osdc/Striper.cc) if(WITH_OSD_INSTRUMENT_FUNCTIONS AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) - set(GCC_C_FLAGS "-finstrument-functions") - set(GCC_C_FLAGS "${GCC_C_FLAGS} -finstrument-functions-exclude-function-list=_mm_loadu_si128,_mm_cmpeq_epi32,_mm_movemask_epi8") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_C_FLAGS}") + add_compile_options( + -finstrument-functions + -finstrument-functions-exclude-function-list=_mm_loadu_si128,_mm_cmpeq_epi32,_mm_movemask_epi8) set(osd_cyg_functions_src ${CMAKE_SOURCE_DIR}/src/tracing/cyg_profile_functions.c) endif() -- 2.39.5