From 0d7e758c91eadead5cfb3a67da5b95ec6d07773c Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 22 Jun 2018 14:07:55 +0200 Subject: [PATCH 1/4] CMake: Tweaks to removal of strict flags Silences the following strict flags from external libraries: - -Wclass-memaccess - -Wswitch - -Wtype-limits - -Wint-in-bool-context Needed to tweak macro a bit, since the old logic was wrong: we can not use CXX flags for C compiler, need way more strict separation between what goes where. --- CMakeLists.txt | 17 ++++++++++++----- build_files/cmake/macros.cmake | 8 ++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 603eb38f92e..d7a00abd090 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -854,6 +854,7 @@ set(CXX_WARNINGS) # for gcc -Wno-blah-blah set(CC_REMOVE_STRICT_FLAGS) +set(CXX_REMOVE_STRICT_FLAGS) # libraries to link the binary with passed to target_link_libraries() # known as LLIBS to scons @@ -1483,6 +1484,12 @@ if(CMAKE_COMPILER_IS_GNUCC) ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations) ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter) ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function) + ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_TYPE_LIMITS -Wno-type-limits) + ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_IN_BOOL_CONTEXT -Wno-int-in-bool-context) + ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_FORMAT -Wno-format) + ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_SWITCH -Wno-switch) + + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CLASS_MEMACCESS -Wno-class-memaccess) if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0")) ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_IMPLICIT_FALLTHROUGH -Wno-implicit-fallthrough) @@ -1530,11 +1537,11 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef) ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn) - ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field) - ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing) - ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor) - ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros) - ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros) + ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder) elseif(CMAKE_C_COMPILER_ID MATCHES "Intel") diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 38e738522c6..1e6e4779224 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1048,6 +1048,12 @@ macro(add_cc_flag set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") endmacro() +macro(add_cxx_flag + flag) + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") +endmacro() + macro(remove_strict_flags) if(CMAKE_COMPILER_IS_GNUCC) @@ -1071,6 +1077,7 @@ macro(remove_strict_flags) # negate flags implied by '-Wall' add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") + add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() if(CMAKE_C_COMPILER_ID MATCHES "Clang") @@ -1083,6 +1090,7 @@ macro(remove_strict_flags) # negate flags implied by '-Wall' add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") + add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() if(MSVC) From 38247fc80b8c6af4e68d0c0809eb6af0c0a65ea4 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 22 Jun 2018 14:17:55 +0200 Subject: [PATCH 2/4] CMake: Cleanup, rename CC_REMOVE_STRICT_FLAGS to C_REMOVE_STRICT_FLAGS --- CMakeLists.txt | 40 +++++++++++++++++----------------- build_files/cmake/macros.cmake | 6 ++--- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d7a00abd090..d1b35b1c562 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -853,7 +853,7 @@ set(C_WARNINGS) set(CXX_WARNINGS) # for gcc -Wno-blah-blah -set(CC_REMOVE_STRICT_FLAGS) +set(C_REMOVE_STRICT_FLAGS) set(CXX_REMOVE_STRICT_FLAGS) # libraries to link the binary with passed to target_link_libraries() @@ -1481,22 +1481,22 @@ if(CMAKE_COMPILER_IS_GNUCC) endif() # flags to undo strict flags - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_TYPE_LIMITS -Wno-type-limits) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_IN_BOOL_CONTEXT -Wno-int-in-bool-context) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_FORMAT -Wno-format) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_SWITCH -Wno-switch) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_TYPE_LIMITS -Wno-type-limits) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_IN_BOOL_CONTEXT -Wno-int-in-bool-context) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_FORMAT -Wno-format) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_SWITCH -Wno-switch) ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CLASS_MEMACCESS -Wno-class-memaccess) if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "7.0")) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_IMPLICIT_FALLTHROUGH -Wno-implicit-fallthrough) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_IMPLICIT_FALLTHROUGH -Wno-implicit-fallthrough) endif() if(NOT APPLE) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable) endif() elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") @@ -1525,17 +1525,17 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS -Wunused-macros) # flags to undo strict flags - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS -Wno-unused-macros) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS -Wno-unused-macros) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef) - ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef) + ADD_CHECK_C_COMPILER_FLAG(C_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn) ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field) ADD_CHECK_CXX_COMPILER_FLAG(CXX_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 1e6e4779224..e77d096c145 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1076,7 +1076,7 @@ macro(remove_strict_flags) ) # negate flags implied by '-Wall' - add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") + add_cc_flag("${C_REMOVE_STRICT_FLAGS}") add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() @@ -1089,7 +1089,7 @@ macro(remove_strict_flags) ) # negate flags implied by '-Wall' - add_cc_flag("${CC_REMOVE_STRICT_FLAGS}") + add_cc_flag("${C_REMOVE_STRICT_FLAGS}") add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() @@ -1130,7 +1130,7 @@ macro(remove_strict_flags_file set_source_files_properties(${_SOURCE} PROPERTIES - COMPILE_FLAGS "${CC_REMOVE_STRICT_FLAGS}" + COMPILE_FLAGS "${C_REMOVE_STRICT_FLAGS}" ) endif() From ec27776d8e44137333468e24ab0606d17ad87bfe Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 22 Jun 2018 14:29:13 +0200 Subject: [PATCH 3/4] CMake: Cleanup, add_cc_flag -> add_c_flag --- build_files/cmake/macros.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index e77d096c145..b487eb4f61b 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1041,7 +1041,7 @@ macro(remove_cc_flag endmacro() -macro(add_cc_flag +macro(add_c_flag flag) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") @@ -1076,7 +1076,7 @@ macro(remove_strict_flags) ) # negate flags implied by '-Wall' - add_cc_flag("${C_REMOVE_STRICT_FLAGS}") + add_c_flag("${C_REMOVE_STRICT_FLAGS}") add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() @@ -1089,7 +1089,7 @@ macro(remove_strict_flags) ) # negate flags implied by '-Wall' - add_cc_flag("${C_REMOVE_STRICT_FLAGS}") + add_c_flag("${C_REMOVE_STRICT_FLAGS}") add_cxx_flag("${CXX_REMOVE_STRICT_FLAGS}") endif() From 6cd0484de8c765e5ce0f2072c7b10af0794ce7f8 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 22 Jun 2018 14:40:00 +0200 Subject: [PATCH 4/4] CMake: Make language explicit for per-file strict flags removal --- build_files/cmake/macros.cmake | 25 +++++++++++++------ intern/audaspace/CMakeLists.txt | 2 +- source/blender/blenkernel/CMakeLists.txt | 2 +- source/blender/imbuf/CMakeLists.txt | 2 +- source/gameengine/VideoTexture/CMakeLists.txt | 2 +- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index b487eb4f61b..d265b8ffad2 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1120,28 +1120,39 @@ endmacro() # note, we can only append flags on a single file so we need to negate the options. # at the moment we cant shut up ffmpeg deprecations, so use this, but will # probably add more removals here. -macro(remove_strict_flags_file +macro(remove_strict_c_flags_file filenames) - foreach(_SOURCE ${ARGV}) - if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) - set_source_files_properties(${_SOURCE} PROPERTIES COMPILE_FLAGS "${C_REMOVE_STRICT_FLAGS}" ) endif() - if(MSVC) # TODO endif() - endforeach() - unset(_SOURCE) +endmacro() +macro(remove_strict_cxx_flags_file + filenames) + remove_strict_c_flags_file(${filenames} ${ARHV}) + foreach(_SOURCE ${ARGV}) + if(CMAKE_COMPILER_IS_GNUCC OR + (CMAKE_C_COMPILER_ID MATCHES "Clang")) + set_source_files_properties(${_SOURCE} + PROPERTIES + COMPILE_FLAGS "${C_REMOVE_STRICT_FLAGS}" + ) + endif() + if(MSVC) + # TODO + endif() + endforeach() + unset(_SOURCE) endmacro() # External libs may need 'signed char' to be default. diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt index e3c1e81dc06..93dd4d6ac10 100644 --- a/intern/audaspace/CMakeLists.txt +++ b/intern/audaspace/CMakeLists.txt @@ -243,7 +243,7 @@ if(WITH_CODEC_FFMPEG) ffmpeg/AUD_FFMPEGWriter.h ) - remove_strict_flags_file( + remove_strict_cxx_flags_file( ffmpeg/AUD_FFMPEGFactory.cpp ffmpeg/AUD_FFMPEGReader.cpp ffmpeg/AUD_FFMPEGWriter.cpp diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index c2b2fc4f869..45f2ac083dd 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -409,7 +409,7 @@ if(WITH_CODEC_FFMPEG) ) add_definitions(-DWITH_FFMPEG) - remove_strict_flags_file( + remove_strict_c_flags_file( intern/writeffmpeg.c ) endif() diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt index 44ff53cc020..8d932c5e79d 100644 --- a/source/blender/imbuf/CMakeLists.txt +++ b/source/blender/imbuf/CMakeLists.txt @@ -139,7 +139,7 @@ if(WITH_CODEC_FFMPEG) ) add_definitions(-DWITH_FFMPEG) - remove_strict_flags_file( + remove_strict_c_flags_file( intern/indexer.c intern/util.c intern/anim_movie.c diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt index 1eb09b02e05..50e25c456e5 100644 --- a/source/gameengine/VideoTexture/CMakeLists.txt +++ b/source/gameengine/VideoTexture/CMakeLists.txt @@ -105,7 +105,7 @@ if(WITH_CODEC_FFMPEG) ) add_definitions(-DWITH_FFMPEG) - remove_strict_flags_file( + remove_strict_cxx_flags_file( VideoFFmpeg.cpp VideoDeckLink DeckLink