You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							166 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							166 lines
						
					
					
						
							3.9 KiB
						
					
					
				| ################################################################################ | |
| # See comments and discussions here: | |
| # http://stackoverflow.com/questions/5088460/flags-to-enable-thorough-and-verbose-g-warnings | |
| ################################################################################ | |
|  | |
| if(TARGET ipc::rigid::warnings) | |
|     return() | |
| endif() | |
|  | |
| set(RIGID_IPC_FLAGS | |
|     -Wall | |
|     -Wextra | |
|     -pedantic | |
| 
 | |
|     # -Wconversion | |
|     #-Wunsafe-loop-optimizations # broken with C++11 loops | |
|     -Wunused | |
| 
 | |
|     -Wno-long-long | |
|     -Wpointer-arith | |
|     -Wformat=2 | |
|     -Wuninitialized | |
|     -Wcast-qual | |
|     # -Wmissing-noreturn | |
|     -Wmissing-format-attribute | |
|     -Wredundant-decls | |
| 
 | |
|     -Werror=implicit | |
|     -Werror=nonnull | |
|     -Werror=init-self | |
|     -Werror=main | |
|     -Werror=missing-braces | |
|     -Werror=sequence-point | |
|     -Werror=return-type | |
|     -Werror=trigraphs | |
|     -Werror=array-bounds | |
|     -Werror=write-strings | |
|     -Werror=address | |
|     -Werror=int-to-pointer-cast | |
|     -Werror=pointer-to-int-cast | |
| 
 | |
|     -Wno-unused-variable | |
|     -Wunused-but-set-variable | |
|     -Wno-unused-parameter | |
| 
 | |
|     #-Weffc++ | |
|     -Wno-old-style-cast | |
|     # -Wno-sign-conversion | |
|     #-Wsign-conversion | |
|  | |
|     # -Wshadow | |
|  | |
|     -Wstrict-null-sentinel | |
|     -Woverloaded-virtual | |
|     -Wsign-promo | |
|     -Wstack-protector | |
|     -Wstrict-aliasing | |
|     -Wstrict-aliasing=2 | |
| 
 | |
|     # Warn whenever a switch statement has an index of enumerated type and | |
|     # lacks a case for one or more of the named codes of that enumeration. | |
|     -Wswitch | |
|     # This is annoying if all cases are already covered. | |
|     # -Wswitch-default | |
|     # This is annoying if there is a default that covers the rest. | |
|     # -Wswitch-enum | |
|     -Wswitch-unreachable | |
|     # -Wcovered-switch-default # Annoying warnings from nlohmann::json | |
|  | |
|     -Wcast-align | |
|     -Wdisabled-optimization | |
|     #-Winline # produces warning on default implicit destructor | |
|     -Winvalid-pch | |
|     # -Wmissing-include-dirs | |
|     -Wpacked | |
|     -Wno-padded | |
|     -Wstrict-overflow | |
|     -Wstrict-overflow=2 | |
| 
 | |
|     -Wctor-dtor-privacy | |
|     -Wlogical-op | |
|     -Wnoexcept | |
|     -Woverloaded-virtual | |
|     # -Wundef | |
|  | |
|     -Wnon-virtual-dtor | |
|     -Wdelete-non-virtual-dtor | |
|     -Werror=non-virtual-dtor | |
|     -Werror=delete-non-virtual-dtor | |
| 
 | |
|     -Wno-sign-compare | |
| 
 | |
|     ########### | |
|     # GCC 6.1 # | |
|     ########### | |
|  | |
|     -Wnull-dereference | |
|     -fdelete-null-pointer-checks | |
|     -Wduplicated-cond | |
|     -Wmisleading-indentation | |
| 
 | |
|     #-Weverything | |
|  | |
|     ########################### | |
|     # Enabled by -Weverything # | |
|     ########################### | |
|  | |
|     #-Wdocumentation | |
|     #-Wdocumentation-unknown-command | |
|     #-Wfloat-equal | |
|  | |
|     #-Wglobal-constructors | |
|     #-Wexit-time-destructors | |
|     #-Wmissing-variable-declarations | |
|     #-Wextra-semi | |
|     #-Wweak-vtables | |
|     #-Wno-source-uses-openmp | |
|     #-Wdeprecated | |
|     #-Wnewline-eof | |
|     #-Wmissing-prototypes | |
|  | |
|     #-Wno-c++98-compat | |
|     #-Wno-c++98-compat-pedantic | |
|  | |
|     ########################### | |
|     # Need to check if those are still valid today | |
|     ########################### | |
|  | |
|     #-Wimplicit-atomic-properties | |
|     #-Wmissing-declarations | |
|     #-Wmissing-prototypes | |
|     #-Wstrict-selector-match | |
|     #-Wundeclared-selector | |
|     #-Wunreachable-code | |
|  | |
|     # Not a warning, but enable link-time-optimization | |
|     # TODO: Check out modern CMake version of setting this flag | |
|     # https://cmake.org/cmake/help/latest/module/CheckIPOSupported.html | |
|     #-flto | |
|  | |
|     # Gives meaningful stack traces | |
|     -fno-omit-frame-pointer | |
|     -fno-optimize-sibling-calls | |
| 
 | |
|     -Wno-pedantic | |
| ) | |
|  | |
| # Flags above don't make sense for MSVC | |
| if(MSVC) | |
|     set(RIGID_IPC_FLAGS) | |
| endif() | |
|  | |
| include(CheckCXXCompilerFlag) | |
|  | |
| add_library(ipc_rigid_warnings INTERFACE) | |
| add_library(ipc::rigid::warnings ALIAS ipc_rigid_warnings) | |
|  | |
| foreach(FLAG IN ITEMS ${RIGID_IPC_FLAGS}) | |
|     string(REPLACE "=" "-" FLAG_VAR "${FLAG}") | |
|     if(NOT DEFINED IS_SUPPORTED_${FLAG_VAR}) | |
|         check_cxx_compiler_flag("${FLAG}" IS_SUPPORTED_${FLAG_VAR}) | |
|     endif() | |
|     if(IS_SUPPORTED_${FLAG_VAR}) | |
|         target_compile_options(ipc_rigid_warnings INTERFACE ${FLAG}) | |
|     endif() | |
| endforeach()
 | |
| 
 |