-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
168 lines (158 loc) · 21.9 KB
/
CMakeLists.txt
File metadata and controls
168 lines (158 loc) · 21.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
cmake_minimum_required(VERSION 3.16)
project(ThreadSafeSmartPointers)
set(CMAKE_CXX_STANDARD 20)
option(BUILD_UNIT_TESTS "Build unit tests." NO)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/bin/libs)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/bin/libs)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/bin)
########################################################################################################################
# Unit tests.
########################################################################################################################
IF (BUILD_UNIT_TESTS)
add_subdirectory("tests")
ENDIF ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# using Clang
add_compile_options(
-W -WCFString-literal -WCL4 -WIndependentClass-attribute -WNSObject-attribute -Wabi -Wabsolute-value -Wabstract-final-class
-Wabstract-vbase-init -Waddress -Waddress-of-packed-member -Waddress-of-temporary -Waggregate-return -Wall -Walloca -Walloca-with-align-alignof -Wambiguous-delete
-Wambiguous-ellipsis -Wambiguous-macro -Wambiguous-member-template -Wambiguous-reversed-operator -Wanalyzer-incompatible-plugin -Wanon-enum-enum-conversion
-Wanonymous-pack-parens -Warc -Warc-bridge-casts-disallowed-in-nonarc -Warc-maybe-repeated-use-of-weak -Warc-non-pod-memaccess -Warc-performSelector-leaks
-Warc-repeated-use-of-weak -Warc-retain-cycles -Warc-unsafe-retained-assign -Wargument-outside-range -Warray-bounds -Warray-bounds-pointer-arithmetic -Wasm
-Wasm-operand-widths -Wassign-enum -Wassume -Wat-protocol -Watimport-in-framework-header -Watomic-alignment -Watomic-implicit-seq-cst -Watomic-memory-ordering
-Watomic-properties -Watomic-property-with-user-defined-accessor -Wattribute-packed-for-bitfield -Wattributes -Wauto-disable-vptr-sanitizer -Wauto-import
-Wauto-storage-class -Wauto-var-id -Wavailability -Wavr-rtlib-linking-quirks -Wbackend-plugin -Wbackslash-newline-escape -Wbad-function-cast -Wbinary-literal
-Wbind-to-temporary-copy -Wbinding-in-condition -Wbitfield-constant-conversion -Wbitfield-enum-conversion -Wbitfield-width -Wbitwise-conditional-parentheses
-Wbitwise-op-parentheses -Wblock-capture-autoreleasing -Wbool-conversion -Wbool-conversions -Wbool-operation -Wbraced-scalar-init -Wbridge-cast
-Wbuiltin-assume-aligned-alignment -Wbuiltin-macro-redefined -Wbuiltin-memcpy-chk-size -Wbuiltin-requires-header -Wcall-to-pure-virtual-from-ctor-dtor
-Wcast-align -Wcast-calling-convention -Wcast-of-sel-type -Wcast-qual -Wcast-qual-unrelated -Wchar-align -Wchar-subscripts -Wclang-cl-pch -Wclass-varargs -Wcomma
-Wcomment -Wcomments -Wcompare-distinct-pointer-types -Wcomplex-component-init -Wconcepts-ts-compat -Wconditional-type-mismatch -Wconditional-uninitialized
-Wconfig-macros -Wconstant-conversion -Wconstant-evaluated -Wconstant-logical-operand -Wconstexpr-not-const -Wconsumed -Wconversion -Wconversion-null -Wcoroutine
-Wcoroutine-missing-unhandled-exception -Wcpp -Wcstring-format-directive -Wctad-maybe-unsupported -Wctor-dtor-privacy -Wctu -Wcuda-compat -Wcustom-atomic-properties
-Wdangling -Wdangling-else -Wdangling-field -Wdangling-gsl -Wdangling-initializer-list -Wdarwin-sdk-settings -Wdate-time -Wdealloc-in-category
-Wdebug-compression-unavailable -Wdeclaration-after-statement -Wdefaulted-function-deleted -Wdelegating-ctor-cycles -Wdelete-abstract-non-virtual-dtor
-Wdelete-incomplete -Wdelete-non-abstract-non-virtual-dtor -Wdelete-non-virtual-dtor -Wdeprecated -Wdeprecated-anon-enum-enum-conversion -Wdeprecated-array-compare
-Wdeprecated-attributes -Wdeprecated-comma-subscript -Wdeprecated-copy -Wdeprecated-copy-dtor -Wdeprecated-declarations -Wdeprecated-dynamic-exception-spec
-Wdeprecated-enum-compare -Wdeprecated-enum-compare-conditional -Wdeprecated-enum-enum-conversion -Wdeprecated-enum-float-conversion -Wdeprecated-implementations
-Wdeprecated-increment-bool -Wdeprecated-objc-isa-usage -Wdeprecated-objc-pointer-introspection -Wdeprecated-objc-pointer-introspection-performSelector
-Wdeprecated-register -Wdeprecated-this-capture -Wdeprecated-volatile -Wdeprecated-writable-strings -Wdirect-ivar-access -Wdisabled-macro-expansion
-Wdisabled-optimization -Wdiscard-qual -Wdistributed-object-modifiers -Wdiv-by-zero -Wdivision-by-zero -Wdll-attribute-on-redeclaration
-Wdllexport-explicit-instantiation-decl -Wdllimport-static-field-def -Wdollar-in-identifier-extension
-Wdouble-promotion -Wduplicate-decl-specifier -Wduplicate-enum -Wduplicate-method-arg -Wduplicate-method-match -Wduplicate-protocol -Wdynamic-class-memaccess
-Wdynamic-exception-spec -Weffc++ -Wembedded-directive -Wempty-body -Wempty-decomposition -Wempty-init-stmt -Wempty-translation-unit -Wencode-type -Wendif-labels
-Wenum-compare -Wenum-compare-conditional -Wenum-compare-switch -Wenum-conversion -Wenum-enum-conversion -Wenum-float-conversion -Wenum-too-large -Wexceptions
-Wexpansion-to-defined -Wexplicit-initialize-call -Wexplicit-ownership-type -Wexport-unnamed -Wexport-using-directive -Wextern-c-compat -Wextern-initializer -Wextra
-Wextra-qualification -Wextra-semi -Wextra-semi-stmt -Wextra-tokens -Wfallback -Wfinal-dtor-non-final-class -Wfixed-enum-extension -Wflag-enum -Wflexible-array-extensions
-Wfloat-conversion -Wfloat-equal -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wfor-loop-analysis -Wformat -Wformat-extra-args -Wformat-invalid-specifier
-Wformat-non-iso -Wformat-nonliteral -Wformat-pedantic -Wformat-security -Wformat-type-confusion -Wformat-y2k -Wformat-zero-length -Wformat=2 -Wfortify-source
-Wfour-char-constants -Wframework-include-private-from-public -Wfunction-def-in-objc-container -Wfunction-multiversion -Wfuture-compat -Wgcc-compat -Wglobal-constructors
-Wgnu -Wgnu-alignof-expression -Wgnu-anonymous-struct -Wgnu-array-member-paren-init -Wgnu-auto-type -Wgnu-binary-literal -Wgnu-case-range -Wgnu-complex-integer
-Wgnu-compound-literal-initializer -Wgnu-conditional-omitted-operand -Wgnu-designator -Wgnu-empty-initializer -Wgnu-empty-struct -Wgnu-flexible-array-initializer
-Wgnu-flexible-array-union-member -Wgnu-folding-constant -Wgnu-imaginary-constant -Wgnu-include-next -Wgnu-inline-cpp-without-extern -Wgnu-label-as-value
-Wgnu-redeclared-enum -Wgnu-statement-expression -Wgnu-static-float-init -Wgnu-string-literal-operator-template -Wgnu-union-cast -Wgnu-variable-sized-type-not-at-end
-Wgnu-zero-line-directive -Wgnu-zero-variadic-macro-arguments -Wheader-guard -Wheader-hygiene -Whip-only -Widiomatic-parentheses -Wignored-attributes
-Wignored-optimization-argument -Wignored-pragma-intrinsic -Wignored-pragma-optimize -Wignored-pragmas -Wignored-qualifiers -Wimplicit -Wimplicit-atomic-properties
-Wimplicit-conversion-floating-point-to-bool -Wimplicit-exception-spec-mismatch -Wimplicit-fallthrough -Wimplicit-fallthrough-per-function
-Wimplicit-fixed-point-conversion -Wimplicit-float-conversion -Wimplicit-function-declaration -Wimplicit-int -Wimplicit-int-conversion -Wimplicit-int-float-conversion
-Wimplicit-retain-self -Wimplicitly-unsigned-literal -Wimport -Wimport-preprocessor-directive-pedantic -Winaccessible-base -Winclude-next-absolute-path
-Winclude-next-outside-header -Wincompatible-exception-spec -Wincompatible-function-pointer-types -Wincompatible-library-redeclaration -Wincompatible-ms-struct
-Wincompatible-pointer-types -Wincompatible-pointer-types-discards-qualifiers -Wincompatible-property-type -Wincompatible-sysroot -Wincomplete-framework-module-declaration
-Wincomplete-implementation -Wincomplete-module -Wincomplete-setjmp-declaration -Wincomplete-umbrella -Winconsistent-dllimport -Winconsistent-missing-destructor-override
-Winconsistent-missing-override -Wincrement-bool -Winfinite-recursion -Winit-self -Winitializer-overrides -Winjected-class-name -Winline -Winline-asm -Winline-new-delete
-Winstantiation-after-specialization -Wint-conversion -Wint-conversions -Wint-in-bool-context -Wint-to-pointer-cast -Wint-to-void-pointer-cast -Winteger-overflow
-Winvalid-command-line-argument -Winvalid-constexpr -Winvalid-iboutlet -Winvalid-initializer-from-system-header -Winvalid-ios-deployment-target -Winvalid-no-builtin-names
-Winvalid-noreturn -Winvalid-offsetof -Winvalid-or-nonexistent-directory -Winvalid-partial-specialization -Winvalid-pch -Winvalid-pp-token -Winvalid-source-encoding
-Winvalid-token-paste -Wjump-seh-finally -Wkeyword-compat -Wkeyword-macro -Wknr-promoted-parameter -Wlanguage-extension-token -Wlarge-by-value-copy -Wliblto
-Wliteral-conversion -Wliteral-range -Wlogical-not-parentheses -Wlogical-op-parentheses -Wlong-long -Wloop-analysis -Wmacro-redefined
-Wmain -Wmain-return-type -Wmalformed-warning-check -Wmany-braces-around-scalar-init -Wmax-unsigned-zero -Wmemset-transposed-args -Wmemsize-comparison -Wmethod-signatures
-Wmicrosoft -Wmicrosoft-anon-tag -Wmicrosoft-cast -Wmicrosoft-charize -Wmicrosoft-comment-paste -Wmicrosoft-const-init -Wmicrosoft-cpp-macro
-Wmicrosoft-default-arg-redefinition -Wmicrosoft-drectve-section -Wmicrosoft-end-of-file -Wmicrosoft-enum-forward-reference -Wmicrosoft-enum-value -Wmicrosoft-exception-spec
-Wmicrosoft-exists -Wmicrosoft-explicit-constructor-call -Wmicrosoft-extra-qualification -Wmicrosoft-fixed-enum -Wmicrosoft-flexible-array -Wmicrosoft-goto
-Wmicrosoft-inaccessible-base -Wmicrosoft-include -Wmicrosoft-mutable-reference -Wmicrosoft-pure-definition -Wmicrosoft-redeclare-static -Wmicrosoft-sealed
-Wmicrosoft-template -Wmicrosoft-template-shadow -Wmicrosoft-union-member-reference -Wmicrosoft-unqualified-friend -Wmicrosoft-using-decl -Wmicrosoft-void-pseudo-dtor
-Wmisexpect -Wmisleading-indentation -Wmismatched-new-delete -Wmismatched-parameter-types -Wmismatched-return-types -Wmismatched-tags -Wmissing-braces -Wmissing-constinit
-Wmissing-declarations -Wmissing-exception-spec -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-method-return-type -Wmissing-noescape
-Wmissing-noreturn -Wmissing-prototype-for-cc -Wmissing-selector-name -Wmissing-sysroot -Wmissing-variable-declarations -Rmodule-build -Wmodule-conflict
-Wmodule-file-config-mismatch -Wmodule-file-extension -Rmodule-import -Wmodule-import-in-extern-c -Wmodules-ambiguous-internal-linkage -Wmodules-import-nested-redundant
-Wmost -Wmove -Wmsvc-include -Wmsvc-not-found -Wmultichar -Wmultiple-move-vbase -Wnarrowing -Wnested-anon-types -Wnested-externs -Wnew-returns-null -Wnewline-eof -Wnoderef
-Wnoexcept-type -Wnon-gcc -Wnon-literal-null-conversion -Wnon-modular-include-in-framework-module -Wnon-modular-include-in-module -Wnon-pod-varargs -Wnon-virtual-dtor
-Wnonnull -Wnonportable-cfstrings -Wnonportable-include-path -Wnonportable-system-include-path -Wnonportable-vector-initialization -Wnontrivial-memaccess -Wnsconsumed-mismatch
-Wnsreturns-mismatch -Wnull-arithmetic -Wnull-character -Wnull-conversion -Wnull-dereference -Wnull-pointer-arithmetic -Wnullability -Wnullability-completeness
-Wnullability-completeness-on-arrays -Wnullability-declspec -Wnullability-extension -Wnullability-inferred-on-nested-type -Wnullable-to-nonnull-conversion
-Wobjc-autosynthesis-property-ivar-name-match -Wobjc-bool-constant-conversion -Wobjc-boxing -Wobjc-circular-container -Wobjc-cocoa-api -Wobjc-designated-initializers
-Wobjc-flexible-array -Wobjc-forward-class-redefinition -Wobjc-interface-ivars -Wobjc-literal-compare -Wobjc-literal-conversion -Wobjc-macro-redefinition -Wobjc-messaging-id
-Wobjc-method-access -Wobjc-missing-property-synthesis -Wobjc-missing-super-calls -Wobjc-multiple-method-names -Wobjc-noncopy-retain-block-property
-Wobjc-nonunified-exceptions -Wobjc-property-assign-on-object-type -Wobjc-property-implementation -Wobjc-property-implicit-mismatch -Wobjc-property-matches-cocoa-ownership-rule
-Wobjc-property-no-attribute -Wobjc-property-synthesis -Wobjc-protocol-method-implementation -Wobjc-protocol-property-synthesis -Wobjc-protocol-qualifiers
-Wobjc-readonly-with-setter-property -Wobjc-redundant-api-use -Wobjc-redundant-literal-use -Wobjc-root-class -Wobjc-signed-char-bool
-Wobjc-signed-char-bool-implicit-float-conversion -Wobjc-signed-char-bool-implicit-int-conversion -Wobjc-string-compare -Wobjc-string-concatenation -Wobjc-unsafe-perform-selector
-Wodr -Wold-style-cast -Wold-style-definition -Wopencl-unsupported-rgba -Wopenmp -Wopenmp-clauses -Wopenmp-loop-form -Wopenmp-mapping -Wopenmp-target -Woption-ignored
-Wordered-compare-function-pointers -Wout-of-line-declaration -Wout-of-scope-function -Wover-aligned -Woverflow -Woverlength-strings -Woverloaded-shift-op-parentheses
-Woverloaded-virtual -Woverride-init -Woverride-module -Woverriding-method-mismatch -Woverriding-t-option -Wpacked -Wparentheses -Wparentheses-equality -Wpartial-availability
-Rpass -Rpass-analysis -Wpass-failed -Rpass-missed -Wpch-date-time -Wpedantic -Wpedantic-core-features -Wpessimizing-move -Wpointer-arith -Wpointer-bool-conversion -Wpointer-compare
-Wpointer-integer-compare -Wpointer-sign -Wpointer-to-int-cast -Wpointer-to-int-cast -Wpointer-type-mismatch -Wpoison-system-directories -Wpotentially-evaluated-expression
-Wpragma-clang-attribute -Wpragma-once-outside-header -Wpragma-pack -Wpragma-pack-suspicious-include -Wpragma-system-header-outside-header -Wpragmas
-Wpredefined-identifier-outside-function -Wprivate-extern -Wprivate-header -Wprivate-module -Wprofile-instr-missing -Wprofile-instr-out-of-date -Wprofile-instr-unprofiled
-Wproperty-access-dot-syntax -Wproperty-attribute-mismatch -Wprotocol -Wprotocol-property-synthesis-ambiguity -Wqualified-void-return-type -Wquoted-include-in-framework-header
-Wrange-loop-analysis -Wrange-loop-bind-reference -Wrange-loop-construct -Wreadonly-iboutlet-property -Wreceiver-expr -Wreceiver-forward-class -Wredeclared-class-member
-Wredundant-decls -Wredundant-move -Wredundant-parens -Wregister -Wreinterpret-base-class -Rremark-backend-plugin -Wreorder -Wreorder-ctor -Wreorder-init-list
-Wrequires-expression -Wrequires-super-attribute -Wreserved-id-macro -Wreserved-user-defined-literal -Wretained-language-linkage -Wreturn-stack-address -Wreturn-std-move
-Wreturn-std-move-in-c++11 -Wreturn-type -Wreturn-type-c-linkage -Rsanitize-address -Wsection -Wselector -Wselector-type-mismatch -Wself-assign -Wself-assign-field
-Wself-assign-overloaded -Wself-move -Wsemicolon-before-method-body -Wsentinel -Wsequence-point -Wserialized-diagnostics -Wshadow -Wshadow-all -Wshadow-field
-Wshadow-field-in-constructor -Wshadow-field-in-constructor-modified -Wshadow-ivar -Wshadow-uncaptured-local -Wshift-count-negative -Wshift-count-overflow
-Wshift-negative-value -Wshift-op-parentheses -Wshift-overflow -Wshift-sign-overflow -Wshorten-64-to-32 -Wsign-compare -Wsign-conversion -Wsign-promo -Wsigned-enum-bitfield
-Wsigned-unsigned-wchar -Wsizeof-array-argument -Wsizeof-array-decay -Wsizeof-array-div -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wslash-u-filename
-Wsometimes-uninitialized -Wsource-uses-openmp -Wspir-compat -Wstack-exhausted -Wstack-protector -Wstack-protector -Wstatic-float-init -Wstatic-in-inline
-Wstatic-inline-explicit-instantiation -Wstatic-local-in-inline -Wstatic-self-init -Wstdlibcxx-not-found -Wstrict-aliasing -Wstrict-aliasing=0 -Wstrict-aliasing=1
-Wstrict-aliasing=2 -Wstrict-overflow -Wstrict-overflow=0 -Wstrict-overflow=1 -Wstrict-overflow=2 -Wstrict-overflow=3 -Wstrict-overflow=4 -Wstrict-overflow=5 -Wstrict-prototypes
-Wstrict-prototypes -Wstrict-selector-match -Wstring-compare -Wstring-conversion -Wstring-plus-char -Wstring-plus-int -Wstrlcpy-strlcat-size -Wstrncat-size
-Wsuper-class-method-mismatch -Wsuspicious-bzero -Wsuspicious-memaccess -Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum -Wsync-fetch-and-nand-semantics-changed
-Wsynth -Wtautological-bitwise-compare -Wtautological-compare -Wtautological-constant-compare -Wtautological-constant-in-range-compare
-Wtautological-constant-out-of-range-compare -Wtautological-objc-bool-compare -Wtautological-overlap-compare -Wtautological-pointer-compare -Wtautological-type-limit-compare
-Wtautological-undefined-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wtentative-definition-incomplete-type -Wthread-safety
-Wthread-safety-analysis -Wthread-safety-attributes -Wthread-safety-beta -Wthread-safety-negative -Wthread-safety-precise -Wthread-safety-reference -Wthread-safety-verbose
-Wtrigraphs -Wtype-limits -Wtype-safety -Wtypedef-redefinition -Wtypename-missing -Wunable-to-open-stats-file -Wunavailable-declarations -Wundeclared-selector -Wundef
-Wundefined-bool-conversion -Wundefined-func-template -Wundefined-inline -Wundefined-internal -Wundefined-internal-type -Wundefined-reinterpret-cast -Wundefined-var-template
-Wunderaligned-exception-object -Wunevaluated-expression -Wunguarded-availability -Wunguarded-availability-new -Wunicode -Wunicode-homoglyph -Wunicode-whitespace
-Wunicode-zero-width -Wuninitialized -Wunknown-argument -Wunknown-attributes -Wunknown-cuda-version -Wunknown-escape-sequence -Wunknown-pragmas -Wunknown-sanitizers
-Wunknown-warning-option -Wunnamed-type-template-args -Wunneeded-internal-declaration -Wunneeded-member-function -Wunreachable-code -Wunreachable-code-aggressive
-Wunreachable-code-break -Wunreachable-code-loop-increment -Wunreachable-code-return -Wunsequenced -Wunsupported-abs -Wunsupported-availability-guard -Wunsupported-cb
-Wunsupported-dll-base-class-template -Wunsupported-friend -Wunsupported-gpopt -Wunsupported-nan -Wunsupported-target-opt -Wunsupported-visibility
-Wunusable-partial-specialization -Wunused -Wunused-argument -Wunused-command-line-argument -Wunused-comparison -Wunused-const-variable -Wunused-exception-parameter
-Wunused-function -Wunused-getter-return-value -Wunused-label -Wunused-lambda-capture -Wunused-local-typedef -Wunused-local-typedefs -Wunused-macros
-Wunused-member-function -Wunused-parameter -Wunused-private-field -Wunused-property-ivar -Wunused-result -Wunused-template -Wunused-value -Wunused-variable
-Wunused-volatile-lvalue -Wused-but-marked-unused -Wuser-defined-literals -Wuser-defined-warnings -Wvarargs -Wvariadic-macros -Wvec-elem-size -Wvector-conversion
-Wvector-conversions -Wvexing-parse -Wvisibility -Wvla -Wvla-extension -Wvoid-ptr-dereference -Wvolatile-register-var -Wweak-template-vtables -Wweak-vtables -Wwritable-strings
-Wwrite-strings -Wxor-used-as-pow -Wzero-as-null-pointer-constant -Wzero-length-array -Wswitch-default -fpermissive -fverbose-asm -pedantic
-Waddress -Wall -Wbool-operation -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion -Wenum-compare -Werror -Wextra -Wfloat-equal -Wformat
-Winit-self -Wint-in-bool-context -Wlogical-not-parentheses -Wmain -Wmemset-transposed-args -Wmisleading-indentation -Wnarrowing -Wnonnull -Wparentheses -Wpessimizing-move
-Wpointer-arith -Wreorder -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1
-Wstrict-overflow=5 -Wswitch -Wswitch-enum -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-function -Wunused-label
-Wunused-value -Wunused-variable -Wvolatile-register-var -Wwrite-strings
)
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-o3")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# using GCC
# lots of warnings and all warnings as errors
add_compile_options(
-finstrument-functions -fpermissive -fverbose-asm -pedantic -Waddress -Wall -Warray-bounds=1 -Wbool-compare -Wbool-operation
-Wcast-align -Wcast-qual -Wcatch-value -Wchar-subscripts -Wcomment -Wconversion -Wenum-compare -Werror -Wextra -Wfloat-equal -Wformat
-Winit-self -Wint-in-bool-context -Wlogical-not-parentheses -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation
-Wmissing-attributes -Wmultistatement-macros -Wnarrowing -Wnonnull -Wnonnull-compare -Wopenmp-simd -Wparentheses -Wpessimizing-move -Wpointer-arith -Wreorder -Wrestrict
-Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wsizeof-pointer-div -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-overflow=1 -Wstrict-overflow=5 -Wswitch
-Wswitch-enum -Wtautological-compare -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-function -Wunused-label -Wunused-value -Wunused-variable
-Wvolatile-register-var -Wwrite-strings -fcoroutines
# -switch-default
)
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-o3")
elseif ("CMAKE_CXX_COMPILER_ID" STREQUAL "MSVC")
# using Visual Studio C++
# warning level 4 and all warnings as errors
add_compile_options(/W4 /WX)
endif ()
########################################################################################################################
# Main sources.
########################################################################################################################
add_subdirectory("include")