Skip to content

Commit

Permalink
Some improvements for clang
Browse files Browse the repository at this point in the history
  • Loading branch information
flamewing committed Dec 5, 2021
1 parent dcfa784 commit 83ddc58
Showing 1 changed file with 142 additions and 124 deletions.
266 changes: 142 additions & 124 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." TRUE)

if(APPLE)
set(UseLibCxxDefault TRUE)
else()
set(UseLibCxxDefault FALSE)
endif()
option(UseLibCxx "Compile using libc++" UseLibCxxDefault)

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
if(DEFINED ENV{MSYSTEM_PREFIX})
set(CMAKE_INSTALL_PREFIX "$ENV{MSYSTEM_PREFIX}" CACHE PATH "Default install prefix" FORCE)
Expand All @@ -29,12 +36,18 @@ function(add_compile_options_safe FLAG)
endif(CXX_COMPILER_SUPPORTS_${FLAG_NO_SIGNS})
endfunction()

if(UseLibCxx AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message(FATAL_ERROR "You can only use libc++ with clang" )
endif()

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
if (${FORCE_COLORED_OUTPUT})
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-fcolor-diagnostics -fansi-escape-codes)
add_link_options(-fcolor-diagnostics -fansi-escape-codes)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
add_compile_options(-fdiagnostics-color=always)
else()
add_compile_options(-fcolor-diagnostics)
add_link_options(-fdiagnostics-color=always)
endif()
endif()
if (WARNINGS_ARE_ERRORS)
Expand All @@ -45,127 +58,132 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options_safe(-Og)
add_compile_options_safe(-g3)
endif()
add_compile_options("-Wall")
add_compile_options("-Wextra")
add_compile_options("-pedantic")
add_compile_options("-Wc++14-compat")
add_compile_options("-Wc++17-compat")
add_compile_options_safe("-Wc++20-compat")
add_compile_options_safe("-Wc++14-compat-pedantic")
add_compile_options_safe("-Wc++17-compat-pedantic")
add_compile_options_safe("-Wc++20-compat-pedantic")
add_compile_options_safe("-Walloc-zero")
add_compile_options("-Walloca")
add_compile_options_safe("-Wanalyzer-too-complex")
add_compile_options_safe("-Warith-conversion")
add_compile_options_safe("-Warray-bounds-pointer-arithmetic")
add_compile_options_safe("-Wassign-enum")
add_compile_options_safe("-Wbad-function-cast")
add_compile_options_safe("-Wbitwise-op-parentheses")
add_compile_options_safe("-Wbraced-scalar-init")
add_compile_options_safe("-Wbridge-cast")
add_compile_options("-Wcast-align")
add_compile_options_safe("-Wcast-align=strict")
add_compile_options("-Wcast-qual")
add_compile_options_safe("-Wchar-subscripts")
add_compile_options_safe("-Wcomma")
add_compile_options_safe("-Wcomma-subscript")
add_compile_options_safe("-Wcomment")
add_compile_options_safe("-Wconditionally-supported")
add_compile_options_safe("-Wcovered-switch-default")
add_compile_options("-Wctor-dtor-privacy")
add_compile_options("-Wdate-time")
add_compile_options_safe("-Wdeprecated-copy")
add_compile_options_safe("-Wdeprecated-copy-dtor")
add_compile_options_safe("-Wdeprecated-dynamic-exception-spec")
add_compile_options("-Wdisabled-optimization")
add_compile_options("-Wdouble-promotion")
add_compile_options_safe("-Wduplicated-branches")
add_compile_options_safe("-Wduplicated-cond")
add_compile_options_safe("-Wempty-init-stmt")
add_compile_options("-Wextra-semi")
add_compile_options_safe("-Wfor-loop-analysis")
add_compile_options("-Wformat-nonliteral")
add_compile_options("-Wformat-security")
add_compile_options_safe("-Wformat-signedness")
add_compile_options("-Wformat-y2k")
add_compile_options_safe("-Wfour-char-constants")
add_compile_options_safe("-Wgcc-compat")
add_compile_options_safe("-Wheader-hygiene")
add_compile_options_safe("-Widiomatic-parentheses")
add_compile_options_safe("-Wint-in-bool-context")
add_compile_options("-Winvalid-pch")
add_compile_options_safe("-Wlogical-op")
add_compile_options_safe("-Wlogical-op-parentheses")
add_compile_options_safe("-Wmany-braces-around-scalar-init")
add_compile_options_safe("-Wmisleading-indentation")
add_compile_options_safe("-Wmismatched-tags")
# add_compile_options("-Wmissing-braces")
add_compile_options("-Wmissing-include-dirs")
add_compile_options_safe("-Wmove")
add_compile_options("-Wmultichar")
add_compile_options_safe("-Wnoexcept")
add_compile_options("-Wnon-virtual-dtor")
add_compile_options("-Wnull-dereference")
add_compile_options("-Wold-style-cast")
add_compile_options_safe("-Wover-aligned")
add_compile_options("-Woverloaded-virtual")
add_compile_options("-Wpacked")
add_compile_options("-Wredundant-decls")
add_compile_options_safe("-Wredundant-tags")
add_compile_options("-Wregister")
add_compile_options_safe("-Wshadow=compatible-local")
add_compile_options_safe("-Wshadow=local")
add_compile_options_safe("-Wshadow-field")
add_compile_options_safe("-Wshadow-field-in-constructor")
add_compile_options_safe("-Wshadow-field-in-constructor-modified")
add_compile_options_safe("-Wshadow-ivar")
add_compile_options_safe("-Wshadow-uncaptured-local")
# add_compile_options("-Wsign-promo")
add_compile_options("-Wstack-protector")
add_compile_options_safe("-Wstrict-null-sentinel")
add_compile_options_safe("-Wstring-conversion")
add_compile_options_safe("-Wstring-plus-char")
add_compile_options_safe("-Wsuggest-attribute=cold")
add_compile_options_safe("-Wsuggest-attribute=const")
add_compile_options_safe("-Wsuggest-attribute=format")
add_compile_options_safe("-Wsuggest-attribute=malloc")
add_compile_options_safe("-Wsuggest-attribute=noreturn")
add_compile_options_safe("-Wsuggest-attribute=pure")
add_compile_options_safe("-Wsuggest-final-methods")
add_compile_options_safe("-Wsuggest-final-types")
add_compile_options_safe("-Wsuggest-destructor-override")
add_compile_options_safe("-Wsuggest-override")
# add_compile_options("-Wswitch-default")
add_compile_options("-Wswitch-enum")
add_compile_options("-Wsynth")
add_compile_options_safe("-Wtrampolines")
add_compile_options("-Wundef")
add_compile_options_safe("-Wunused-label")
add_compile_options_safe("-Wunused-lambda-capture")
add_compile_options_safe("-Wunused-local-typedef")
add_compile_options("-Wunused-macros")
add_compile_options_safe("-Wuseless-cast")
add_compile_options_safe("-Wvector-conversion")
add_compile_options_safe("-Wvector-operation-performance")
add_compile_options_safe("-Wvirtual-inheritance")
add_compile_options_safe("-Wvolatile")
add_compile_options("-Wzero-as-null-pointer-constant")
add_compile_options_safe("-Warray-bounds=2")
add_compile_options_safe("-Wattribute-alias=2")
add_compile_options_safe("-Wcatch-value=3")
add_compile_options_safe("-Wformat-overflow=2")
add_compile_options_safe("-Wformat-truncation=2")
add_compile_options_safe("-Wformat=2")
add_compile_options("-Wimplicit-fallthrough")
add_compile_options_safe("-Wimplicit-fallthrough=3")
add_compile_options_safe("-Wplacement-new=2")
add_compile_options_safe("-Wshift-overflow=2")
add_compile_options_safe("-Wstrict-aliasing=3")
add_compile_options("-Wstrict-overflow=2")
add_compile_options_safe("-Wstringop-overflow=4")
add_compile_options("-Wunused-const-variable")
add_compile_options_safe("-Wunused-const-variable=1")
if(UseLibCxx)
add_compile_options(-stdlib=libc++)
add_link_options(-stdlib=libc++ -lc++)
# add_link_options("-lc++abi")
endif()
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-pedantic)
add_compile_options(-Wc++14-compat)
add_compile_options(-Wc++17-compat)
add_compile_options_safe(-Wc++20-compat)
add_compile_options_safe(-Wc++14-compat-pedantic)
add_compile_options_safe(-Wc++17-compat-pedantic)
add_compile_options_safe(-Wc++20-compat-pedantic)
add_compile_options_safe(-Walloc-zero)
add_compile_options(-Walloca)
add_compile_options_safe(-Wanalyzer-too-complex)
add_compile_options_safe(-Warith-conversion)
add_compile_options_safe(-Warray-bounds-pointer-arithmetic)
add_compile_options_safe(-Wassign-enum)
add_compile_options_safe(-Wbad-function-cast)
add_compile_options_safe(-Wbitwise-op-parentheses)
add_compile_options_safe(-Wbraced-scalar-init)
add_compile_options_safe(-Wbridge-cast)
add_compile_options(-Wcast-align)
add_compile_options_safe(-Wcast-align=strict)
add_compile_options(-Wcast-qual)
add_compile_options_safe(-Wchar-subscripts)
add_compile_options_safe(-Wcomma)
add_compile_options_safe(-Wcomma-subscript)
add_compile_options_safe(-Wcomment)
add_compile_options_safe(-Wconditionally-supported)
add_compile_options_safe(-Wcovered-switch-default)
add_compile_options(-Wctor-dtor-privacy)
add_compile_options(-Wdate-time)
add_compile_options_safe(-Wdeprecated-copy)
add_compile_options_safe(-Wdeprecated-copy-dtor)
add_compile_options_safe(-Wdeprecated-dynamic-exception-spec)
add_compile_options(-Wdisabled-optimization)
add_compile_options(-Wdouble-promotion)
add_compile_options_safe(-Wduplicated-branches)
add_compile_options_safe(-Wduplicated-cond)
add_compile_options_safe(-Wempty-init-stmt)
add_compile_options(-Wextra-semi)
add_compile_options_safe(-Wfor-loop-analysis)
add_compile_options(-Wformat-nonliteral)
add_compile_options(-Wformat-security)
add_compile_options_safe(-Wformat-signedness)
add_compile_options(-Wformat-y2k)
add_compile_options_safe(-Wfour-char-constants)
add_compile_options_safe(-Wgcc-compat)
add_compile_options_safe(-Wheader-hygiene)
add_compile_options_safe(-Widiomatic-parentheses)
add_compile_options_safe(-Wint-in-bool-context)
add_compile_options(-Winvalid-pch)
add_compile_options_safe(-Wlogical-op)
add_compile_options_safe(-Wlogical-op-parentheses)
add_compile_options_safe(-Wmany-braces-around-scalar-init)
add_compile_options_safe(-Wmisleading-indentation)
add_compile_options_safe(-Wmismatched-tags)
# add_compile_options(-Wmissing-braces)
add_compile_options(-Wmissing-include-dirs)
add_compile_options_safe(-Wmove)
add_compile_options(-Wmultichar)
add_compile_options_safe(-Wnoexcept)
add_compile_options(-Wnon-virtual-dtor)
add_compile_options(-Wnull-dereference)
add_compile_options(-Wold-style-cast)
add_compile_options_safe(-Wover-aligned)
add_compile_options(-Woverloaded-virtual)
add_compile_options(-Wpacked)
add_compile_options(-Wredundant-decls)
add_compile_options_safe(-Wredundant-tags)
add_compile_options(-Wregister)
add_compile_options_safe(-Wshadow=compatible-local)
add_compile_options_safe(-Wshadow=local)
add_compile_options_safe(-Wshadow-field)
add_compile_options_safe(-Wshadow-field-in-constructor)
add_compile_options_safe(-Wshadow-field-in-constructor-modified)
add_compile_options_safe(-Wshadow-ivar)
add_compile_options_safe(-Wshadow-uncaptured-local)
# add_compile_options(-Wsign-promo)
add_compile_options(-Wstack-protector)
add_compile_options_safe(-Wstrict-null-sentinel)
add_compile_options_safe(-Wstring-conversion)
add_compile_options_safe(-Wstring-plus-char)
add_compile_options_safe(-Wsuggest-attribute=cold)
add_compile_options_safe(-Wsuggest-attribute=const)
add_compile_options_safe(-Wsuggest-attribute=format)
add_compile_options_safe(-Wsuggest-attribute=malloc)
add_compile_options_safe(-Wsuggest-attribute=noreturn)
add_compile_options_safe(-Wsuggest-attribute=pure)
add_compile_options_safe(-Wsuggest-final-methods)
add_compile_options_safe(-Wsuggest-final-types)
add_compile_options_safe(-Wsuggest-destructor-override)
add_compile_options_safe(-Wsuggest-override)
# add_compile_options(-Wswitch-default)
add_compile_options(-Wswitch-enum)
add_compile_options(-Wsynth)
add_compile_options_safe(-Wtrampolines)
add_compile_options(-Wundef)
add_compile_options_safe(-Wunused-label)
add_compile_options_safe(-Wunused-lambda-capture)
add_compile_options_safe(-Wunused-local-typedef)
add_compile_options(-Wunused-macros)
add_compile_options_safe(-Wuseless-cast)
add_compile_options_safe(-Wvector-conversion)
add_compile_options_safe(-Wvector-operation-performance)
add_compile_options_safe(-Wvirtual-inheritance)
add_compile_options_safe(-Wvolatile)
add_compile_options(-Wzero-as-null-pointer-constant)
add_compile_options_safe(-Warray-bounds=2)
add_compile_options_safe(-Wattribute-alias=2)
add_compile_options_safe(-Wcatch-value=3)
add_compile_options_safe(-Wformat-overflow=2)
add_compile_options_safe(-Wformat-truncation=2)
add_compile_options_safe(-Wformat=2)
add_compile_options(-Wimplicit-fallthrough)
add_compile_options_safe(-Wimplicit-fallthrough=3)
add_compile_options_safe(-Wplacement-new=2)
add_compile_options_safe(-Wshift-overflow=2)
add_compile_options_safe(-Wstrict-aliasing=3)
add_compile_options(-Wstrict-overflow=2)
add_compile_options_safe(-Wstringop-overflow=4)
add_compile_options(-Wunused-const-variable)
add_compile_options_safe(-Wunused-const-variable=1)
elseif (MSVC)
if (WARNINGS_ARE_ERRORS)
add_compile_options("/WX")
Expand Down

0 comments on commit 83ddc58

Please sign in to comment.