diff --git a/CMakeLists.txt b/CMakeLists.txt index f6b078e25..1f34e5146 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,9 @@ set(WITH_BLOCKS_RUNTIME "" CACHE PATH "Path to blocks runtime") include(DispatchAppleOptions) +include(DispatchCompilerWarnings) +dispatch_common_warnings() + option(ENABLE_DISPATCH_INIT_CONSTRUCTOR "enable libdispatch_init as a constructor" ON) set(USE_LIBDISPATCH_INIT_CONSTRUCTOR ${ENABLE_DISPATCH_INIT_CONSTRUCTOR}) diff --git a/cmake/modules/DispatchCompilerWarnings.cmake b/cmake/modules/DispatchCompilerWarnings.cmake new file mode 100644 index 000000000..2ae27cdc0 --- /dev/null +++ b/cmake/modules/DispatchCompilerWarnings.cmake @@ -0,0 +1,90 @@ + +if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") + # TODO: someone needs to provide the msvc equivalent warning flags + macro(dispatch_common_warnings) + endmacro() +else() + macro(dispatch_common_warnings) + add_compile_options(-Werror) + add_compile_options(-Wall) + add_compile_options(-Wextra) + add_compile_options(-Wno-unknown-warning-option) + add_compile_options(-Wno-trigraphs) + add_compile_options(-Wmissing-field-initializers) + add_compile_options(-Wmissing-prototypes) + add_compile_options(-Wdocumentation) + add_compile_options(-Wunreachable-code) + add_compile_options(-Wmissing-braces) + add_compile_options(-Wparentheses) + add_compile_options(-Wswitch) + add_compile_options(-Wunused-function) + add_compile_options(-Wunused-label) + add_compile_options(-Wunused-parameter) + add_compile_options(-Wunused-variable) + add_compile_options(-Wunused-value) + add_compile_options(-Wempty-body) + add_compile_options(-Wuninitialized) + add_compile_options(-Wunknown-pragmas) + add_compile_options(-Wshadow) + add_compile_options(-Wno-four-char-constants) + add_compile_options(-Wconversion) + add_compile_options(-Wconstant-conversion) + add_compile_options(-Wint-conversion) + add_compile_options(-Wbool-conversion) + add_compile_options(-Wenum-conversion) + add_compile_options(-Wassign-enum) + add_compile_options(-Wsign-compare) + add_compile_options(-Wshorten-64-to-32) + add_compile_options(-Wpointer-sign) + add_compile_options(-Wnewline-eof) + add_compile_options(-Wdeprecated-declarations) + add_compile_options(-Wsign-conversion) + add_compile_options(-Winfinite-recursion) + add_compile_options(-Warray-bounds-pointer-arithmetic) + add_compile_options(-Watomic-properties) + add_compile_options(-Wcomma) + add_compile_options(-Wconditional-uninitialized) + add_compile_options(-Wcovered-switch-default) + add_compile_options(-Wdate-time) + add_compile_options(-Wdeprecated) + add_compile_options(-Wdouble-promotion) + add_compile_options(-Wduplicate-enum) + add_compile_options(-Wexpansion-to-defined) + add_compile_options(-Wfloat-equal) + add_compile_options(-Widiomatic-parentheses) + add_compile_options(-Wignored-qualifiers) + add_compile_options(-Wimplicit-fallthrough) + add_compile_options(-Wnullable-to-nonnull-conversion) + add_compile_options(-Wobjc-interface-ivars) + add_compile_options(-Wover-aligned) + add_compile_options(-Wpacked) + add_compile_options(-Wpointer-arith) + add_compile_options(-Wselector) + add_compile_options(-Wstatic-in-inline) + add_compile_options(-Wsuper-class-method-mismatch) + add_compile_options(-Wswitch-enum) + add_compile_options(-Wtautological-compare) + add_compile_options(-Wunguarded-availability) + add_compile_options(-Wunused) + add_compile_options(-Wno-disabled-macro-expansion) + add_compile_options(-Wno-pedantic) + add_compile_options(-Wno-bad-function-cast) + add_compile_options(-Wno-c++-compat) + add_compile_options(-Wno-c++98-compat) + add_compile_options(-Wno-c++98-compat-pedantic) + add_compile_options(-Wno-cast-align) + add_compile_options(-Wno-cast-qual) + add_compile_options(-Wno-documentation-unknown-command) + add_compile_options(-Wno-format-nonliteral) + add_compile_options(-Wno-missing-variable-declarations) + add_compile_options(-Wno-old-style-cast) + add_compile_options(-Wno-padded) + add_compile_options(-Wno-reserved-id-macro) + add_compile_options(-Wno-shift-sign-overflow) + add_compile_options(-Wno-undef) + add_compile_options(-Wno-unreachable-code-aggressive) + add_compile_options(-Wno-unused-macros) + add_compile_options(-Wno-used-but-marked-unused) + add_compile_options(-Wno-vla) + endmacro() +endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3ecd0690c..0f8628f72 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -59,7 +59,7 @@ if(ENABLE_SWIFT) endif() function(add_unit_test name) - set(options DISABLED_TEST) + set(options DISABLED_TEST;NO_BSD_OVERLAY) set(single_value_args) set(multiple_value_args SOURCES) cmake_parse_arguments(AUT "${options}" "${single_value_args}" "${multiple_value_args}" ${ARGN}) @@ -84,7 +84,7 @@ function(add_unit_test name) SYSTEM BEFORE PRIVATE "${WITH_BLOCKS_RUNTIME}") endif() - if(BSD_OVERLAY_FOUND) + if(BSD_OVERLAY_FOUND AND NOT AUT_NO_BSD_OVERLAY) target_compile_options(${name} PRIVATE ${BSD_OVERLAY_CFLAGS}) @@ -96,7 +96,7 @@ function(add_unit_test name) if(WITH_BLOCKS_RUNTIME) target_link_libraries(${name} PRIVATE BlocksRuntime) endif() - if(BSD_OVERLAY_FOUND) + if(BSD_OVERLAY_FOUND AND NOT AUT_NO_BSD_OVERLAY) target_link_libraries(${name} PRIVATE ${BSD_OVERLAY_LDFLAGS}) @@ -122,10 +122,10 @@ function(add_unit_test name) endif() endfunction() +# Tests that reliably pass on all platforms set(DISPATCH_C_TESTS apply api - c99 debug queue_finalizer group @@ -143,11 +143,9 @@ set(DISPATCH_C_TESTS data io_net select) -set(DISPATCH_CPP_TESTS - plusplus) -# Tests that usually pass, but occasionally fail -# and are therefore not suitable for general CI usage. +# Tests that usually pass, but occasionally fail. +# Excluded by default for purposes of Swift CI if(EXTENDED_TEST_SUITE) list(APPEND DISPATCH_C_TESTS priority @@ -165,7 +163,7 @@ if(EXTENDED_TEST_SUITE) target_compile_options(dispatch_priority2 PRIVATE -DUSE_SET_TARGET_QUEUE=1) endif() -# Tests for platform-specific functionality +# add C tests for platform-specific functionality when applicable if(CMAKE_SYSTEM_NAME STREQUAL Darwin) list(APPEND DISPATCH_C_TESTS deadname @@ -179,11 +177,10 @@ foreach(test ${DISPATCH_C_TESTS}) SOURCES dispatch_${test}.c) endforeach() -foreach(test ${DISPATCH_CPP_TESTS}) - add_unit_test(dispatch_${test} - SOURCES - dispatch_${test}.cpp) -endforeach() + +# test dispatch API for various C/CXX language variants +add_unit_test(dispatch_c99 NO_BSD_OVERLAY SOURCES dispatch_c99.c) +add_unit_test(dispatch_plusplus SOURCES dispatch_plusplus.cpp) # test-specific link options target_link_libraries(dispatch_group PRIVATE m)