Skip to content

Commit f935ba1

Browse files
ssnlezyang
authored andcommitted
[build] Enable clang-specific warnings only when using clang (#8869)
* Wraps clang only warnings in an if * add back -Wno-missing-field-initializers
1 parent 8e01982 commit f935ba1

File tree

3 files changed

+32
-41
lines changed

3 files changed

+32
-41
lines changed

CMakeLists.txt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -197,23 +197,27 @@ if(NOT MSVC)
197197
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
198198
# Eigen fails to build with some versions, so convert this to a warning
199199
# Details at http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1459
200-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization")
201200
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
202201
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
203202
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-field-initializers")
204203
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-type-limits")
205-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-typedef-redefinition")
206-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
207204
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
208205
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare")
209206
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
210207
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable")
211208
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function")
212-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field")
213209
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-result")
214-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override")
215-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-allocation-unavailable")
216210
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=deprecated-declarations")
211+
# These flags are not available in GCC-4.8.5. Set only when using clang.
212+
# Compared against https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Option-Summary.html
213+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
214+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization")
215+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-typedef-redefinition")
216+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option")
217+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-private-field")
218+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override")
219+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-allocation-unavailable")
220+
endif()
217221
if ((APPLE AND (NOT ("${CLANG_VERSION_STRING}" VERSION_LESS "9.0")))
218222
OR (CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)))
219223
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -faligned-new")

c10/CMakeLists.txt

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
project(c10 CXX C)
22

3+
include(../cmake/Utils.cmake)
4+
35
set(LIB_SOURCES
46
dummy.cpp
57
)
@@ -8,43 +10,13 @@ set(TEST_SOURCES
810
dummy_test.cpp
911
)
1012

11-
if(MSVC)
12-
# TODO Also add some warning options that MSVC can understand
13-
set(WARNING_OPTIONS "")
14-
else()
15-
set(WARNING_OPTIONS
16-
-Wall
17-
-Wextra
18-
-Wold-style-cast
19-
-Wno-missing-braces
20-
-Wcast-align
21-
-Wcast-qual
22-
-Wctor-dtor-privacy
23-
-Wdisabled-optimization
24-
-Wformat=2
25-
-Winit-self
26-
-Wmissing-include-dirs
27-
-Woverloaded-virtual
28-
-Wredundant-decls
29-
-Wshadow
30-
-Wsign-promo
31-
-Wstrict-overflow=5
32-
-fdiagnostics-show-option
33-
-Wconversion
34-
-Wpedantic
35-
-Wno-gnu-zero-variadic-macro-arguments
36-
-Wundef
37-
-Werror
38-
)
39-
endif()
40-
4113
add_library(${PROJECT_NAME} OBJECT ${LIB_SOURCES})
42-
target_compile_options(${PROJECT_NAME} PRIVATE ${WARNING_OPTIONS})
14+
target_enable_style_warnings(${PROJECT_NAME} TRUE)
4315

4416
if(BUILD_TEST)
4517
add_executable(${PROJECT_NAME}_test ${TEST_SOURCES} $<TARGET_OBJECTS:${PROJECT_NAME}>)
4618
add_test(NAME ${PROJECT_NAME}_test COMMAND $<TARGET_FILE:${PROJECT_NAME}_test>)
47-
target_compile_options(${PROJECT_NAME}_test PRIVATE ${WARNING_OPTIONS})
19+
target_enable_style_warnings(${PROJECT_NAME}_test TRUE)
4820
target_link_libraries(${PROJECT_NAME}_test gtest_main)
4921
install(TARGETS ${PROJECT_NAME}_test DESTINATION test)
5022
endif()

cmake/Utils.cmake

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ endfunction(print_target_properties)
255255

256256
###
257257
# Helper function to add style warning options to the given target
258+
# Optionally pass in the second argument ($ARGV1) which will force -Werror if
259+
# it evaluates to true.
258260
function(target_enable_style_warnings TARGET)
259261
if(MSVC)
260262
# TODO Also add some warning options that MSVC can understand
@@ -279,11 +281,24 @@ function(target_enable_style_warnings TARGET)
279281
-fdiagnostics-show-option
280282
-Wconversion
281283
-Wpedantic
282-
-Wno-gnu-zero-variadic-macro-arguments
283284
-Wundef
284285
)
285-
if ($ENV{WERROR})
286-
set(WARNING_OPTIONS "${WARNING_OPTIONS} -Werror")
286+
# -Wno-gnu-zero-variadic-macro-arguments is not available in GCC-4.8.5. Set
287+
# only when using clang.
288+
# Compared against https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Option-Summary.html
289+
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
290+
list(APPEND WARNING_OPTIONS "-Wno-gnu-zero-variadic-macro-arguments")
291+
endif()
292+
set(WERROR $ENV{WERROR})
293+
if (${ARGC} GREATER 1)
294+
# accessing ${ARGV1} is UB when ${ARGC} <= 1
295+
# CMake doesn't do smart AND, so we have to use a nested `if`
296+
if (${ARGV1})
297+
set(WERROR TRUE)
298+
endif()
299+
endif()
300+
if (WERROR)
301+
list(APPEND WARNING_OPTIONS "-Werror")
287302
endif()
288303
endif()
289304
target_compile_options(${TARGET} PRIVATE ${WARNING_OPTIONS})

0 commit comments

Comments
 (0)