qmcpack/external_codes/boost_multi/multi/test/CMakeLists.txt

911 lines
40 KiB
CMake

# Copyright 2018-2024 Alfredo A. Correa
# Copyright 2024 Matt Borland
# Distributed under the Boost Software License, Version 1.0.
# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.16)
if (DEFINED BOOST_SUPERPROJECT_VERSION AND NOT DEFINED BOOST_MULTI_STANDALONE AND BUILD_TESTING)
include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST)
if(HAVE_BOOST_TEST)
boost_test_jamfile(FILE Jamfile LINK_LIBRARIES Boost::multi Boost::unit_test_framework Boost::multi_array Boost::iterator)
endif()
else()
enable_testing()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(Boost COMPONENTS unit_test_framework) # tests require Boost.Test `sudo apt install libboost-test-dev`
if(ENABLE_CUDA)
enable_language(CUDA)
set(CMAKE_CUDA_EXTENSIONS OFF)
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES native)
endif()
endif()
find_package(TBB)
enable_testing()
include(CTest)
set(WARNS
$<$<COMPILE_LANG_AND_ID:CUDA,NVIDIA>:
-Xcompiler=-Werror,-Wall,-Wextra,-Wcast-align,-Wcast-qual,-Wdouble-promotion,-Wduplicated-branches,-Wduplicated-cond,-Wformat-truncation,-Wformat=2,-Wlogical-op,-Wmisleading-indentation,-Wno-missing-include-dirs,-Wnon-virtual-dtor,-Wno-missing-declarations,-Wnon-virtual-dtor,-Wnull-dereference,-Woverloaded-virtual,-Wpointer-arith,-Wno-redundant-decls,-Wno-shadow,-Wno-switch-enum,-Wno-unknown-pragmas,-Wtrampolines,-Wuninitialized,-Wunused,-Wunused-but-set-variable,-Wunused-result,-Wno-zero-as-null-pointer-constant
#--expt-relaxed-constexpr --extended-lambda
--Werror=cross-execution-space-call -Xcudafe=--display_error_number -Xcudafe=--diag_error=incompatible_assignment_operands -Xcudafe=--diag_error=returning_ptr_to_local_variable -Xcudafe=--diag_error=subscript_out_of_range -Xcudafe=--diag_error=used_before_set -Xcudafe=--diag_error=undefined_preproc_id -Xcudafe=--diag_error=implicit_func_decl -Xcudafe=--diag_error=implicit_return_from_non_void_function -Xcudafe=--diag_error=missing_type_specifier
>
$<$<AND:$<CXX_COMPILER_ID:GNU>,$<NOT:$<CUDA_COMPILER_ID:NVIDIA>>,$<NOT:$<CUDA_COMPILER_ID:Clang>>>: -Werror # -Wno-unknown-warning (activates -Wunknown-pragmas)
# -WNSObject-attribute # (gcc 12, not in 11)
# -Wabi=13 -Wabi-tag # (maybe important when linking with very old libraries)
-Waddress
#-Waddress-of-packed-member # (gcc 11, not in gcc 8)
-Wno-aggregate-return # (disallow return classes or structs, seems a C-compatibility warning)
-Waggressive-loop-optimizations
-Waligned-new=all # (gcc 12, not in 11)
# -Walloc-size-larger-than=<bytes> # (gcc 12, not in 11)
-Walloc-zero # -Walloc-size-larger-than=<bytes>
-Walloca # -Walloca-larger-than=<number>
# -Warith-conversion # (gcc 11, not in gcc 9)
-Warray-bounds # -Warray-bounds=<0,2>
# -Warray-compare # (gcc 12, not in gcc 9)
# -Warray-parameter #=<0,2> # (gcc 11, not in gcc 10)
#-Wattribute-alias #=<0,2> # (gcc 12, not in 11, not in 7)
#-Wattribute-warning # (gcc 9, not in 8)
-Wattributes
-Wbool-compare -Wbool-operation
# -Wbidi-chars -Wbidi-chars=any # (gcc 12, not in 11)
-Wbuiltin-declaration-mismatch -Wbuiltin-macro-redefined
#-Wc++-compat
-Wc++0x-compat -Wc++11-compat -Wc++14-compat -Wc++17-compat
# -Wc++17-extensions # (gcc 12, not in 9)
-Wc++1z-compat
# -Wc++20-compat -Wc++20-extensions -Wc++23-extensions -Wc++2a-compat # (gcc 11, not in gcc 9)
#-Wcannot-profile # (gcc 9, not in gcc 8)
#-Wcast-align=strict -Wcast-function-type # (gcc 8, not in gcc 7)
-Wcast-qual
#-Wcatch-value #=<0, 3> # (gcc 8, not in gcc 7)
-Wchar-subscripts
#-Wclass-conversion # (gcc 11, not in 8)
#-Wclass-memaccess # (gcc 12, not in 11, not in 7)
-Wclobbered
# -Wcomma-subscript # (gcc 12, not in 11)
-Wcomment # (same as -Wcomments)
-Wconditionally-supported
-Wconversion -Wconversion-null
-Wcoverage-mismatch -Wcpp
# -Wctad-maybe-unsupported # (gcc 12, not in 9)
-Wctor-dtor-privacy
-Wdangling-else
# -Wdangling-pointer # (gcc 12, not in 11)
# -Wdangling-reference # (gcc 13, not in 12)
-Wdate-time
-Wdelete-incomplete -Wdelete-non-virtual-dtor
-Wdeprecated
#-Wdeprecated-copy -Wdeprecated-copy-dtor # (gcc 11, not in gcc 8)
-Wdeprecated-declarations
# -Wdeprecated-enum-enum-conversion -Wdeprecated-enum-float-conversion # (gcc 11, not in gcc 10)
-Wdisabled-optimization
-Wdiv-by-zero -Wdouble-promotion
-Wduplicated-branches -Wduplicated-cond
# -Weffc++ # (doesn't allow some advanced techniques, such as CRTP)
-Wempty-body -Wendif-labels
-Wenum-compare
# -Wenum-conversion # (gcc 11, not in 10)
-Wexpansion-to-defined
# -Wexceptions # (gcc 11, not in 10)
# -Wextra-semi # (gcc 8, not in 7)
-Wfloat-conversion -Wfloat-equal
-Wformat=2
-Wformat-contains-nul # (gcc 12, not in 11)
# -Wformat-diag # (gcc 10, not in 9)
-Wformat-extra-args -Wformat-nonliteral
-Wformat-overflow=1
-Wformat-security -Wformat-signedness -Wformat-truncation -Wformat-y2k -Wformat-zero-length
-Wframe-address # -Wframe-larger-than=<byte-size>
-Wfree-nonheap-object -Whsa
# -Wif-not-aligned # (gcc 8, not in 7)
-Wignored-attributes # -Wignored-qualifiers
-Wno-ignored-qualifiers
-Wimplicit-fallthrough #=3 # -Wimplicit-fallthrough=<0,5>
# -Winaccessible-base # (gcc 12, not in 11)
# -Winfinite-recursion # (gcc 12, not in 9)
-Winherited-variadic-ctor
#-Winit-list-lifetime # (gcc 12, not in 11)
-Winit-self
-Wno-inline # not all inline attempts can be successful
-Wint-in-bool-context -Wint-to-pointer-cast
# -Winterference-size # (gcc 12, not in 11)
# -Winvalid-imported-macros # (gcc 11, not in gcc 10)
-Winvalid-memory-model -Winvalid-offsetof -Winvalid-pch
# -Wlarger-than=<byte-size> # (disallow large objects types? in executable)
-Wliteral-suffix
-Wlogical-not-parentheses -Wlogical-op
# -Wlong-long # (C++98 warning)
-Wlto-type-mismatch -Wmain -Wmaybe-uninitialized
-Wmemset-elt-size -Wmemset-transposed-args
-Wmisleading-indentation
# -Wmismatched-dealloc -Wmismatched-new-delete # (gcc 11, not in gcc 10)
# -Wmismatched-tags # (gcc 11, not in 9)
# -Wmissing-attributes # (gcc 8, not in 8)
-Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn
#-Wmissing-profile # (gcc 11, not in gcc 8)
# -Wmissing-requires -Wmissing-template-keyword # (gcc 12, not in 11)
-Wmultichar
-Wno-multiple-inheritance # (disallows composition by inheritance)
# -Wmultistatement-macros # (gcc 8, not in 7)
-Wno-namespaces # (disallows use of namespaces, seems a C-tool)
-Wnarrowing
# -Wno-alloc-size-larger-than=<bytes> -Wframe-larger-than=<bytes> -Wno-larger-than<bytes> -Wstack-usage=<bytes> # (gcc 112, not in 11)
-Wnoexcept -Wnoexcept-type
-Wnon-template-friend -Wnon-virtual-dtor
-Wnonnull -Wnonnull-compare
-Wnormalized #=nfc -Wnormalized=[none|id|nfc|nfkc]
-Wnull-dereference
-Wodr
-Wold-style-cast # TODO(correaa) fix this
# -Wopenacc-parallelism # (gcc 12, not in 11)
-Wopenmp-simd -Woverflow
-Woverlength-strings -Woverloaded-virtual
-Wpacked -Wpacked-bitfield-compat
# -Wpacked-not-aligned # (gcc 8, not 7)
# -Wpadded # (disallows structs that need padding for alignment)
-Wparentheses
#-Wpessimizing-move # (gcc 11, not in gcc 8)
-Wplacement-new #=1 -Wplacement-new=<0,2>
-Wpmf-conversions
-Wpointer-arith -Wpointer-compare
-Wpragmas
#-Wprio-ctor-dtor # (gcc 11, not in gcc 8)
-Wpsabi
# -Wrange-loop-construct # (gcc 11, not in gcc 10)
-Wredundant-decls
#-Wredundant-move # (gcc 11, not in gcc 8)
# -Wredundant-tags # (gcc 11, not in gcc 9)
-Wregister
-Wreorder # (gcc 12, not in 11)
-Wreturn-local-addr -Wreturn-type
-Wrestrict -Wreorder
-Wscalar-storage-order -Wsequence-point
-Wshadow -Wshadow-compatible-local -Wshadow-local -Wshadow=compatible-local -Wshadow=local
-Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wshift-overflow #=1 -Wshift-overflow=<0,2>
-Wsign-compare -Wsign-conversion -Wsign-promo
-Wsized-deallocation
-Wsizeof-array-argument
# -Wsizeof-array-div # (gcc 11, not in 10)
-Wsizeof-pointer-memaccess
-Wstack-protector # -Wstack-usage=<byte-size>
-Wstrict-aliasing #=3 # -Wstrict-aliasing=<0,3>
-Wstrict-null-sentinel #=1 -Wstrict-overflow=<0,5>
-Wstrict-overflow=2
# -Wstrict-overflow=3 # not compatible with Boost.Test
# -Wstrict-overflow=4 # not compatible with stl heap
# -Wstrict-overflow=5 # not compatible with Boost.Test
# -Wstring-compare # (gcc 11, not in 9)
-Wstringop-overflow #=2 -Wstringop-overflow=<0,4>
# -Wstringop-overread # (gcc 11, not in 10)
# -Wstringop-truncation # (gcc 8, not in 7)
-Wsubobject-linkage
# -Wsuggest-attribute=cold # (gcc 12, not in 11, not in 7)
-Wsuggest-attribute=const -Wsuggest-attribute=format
# -Wsuggest-attribute=malloc # (gcc 8, not in 7)
-Wsuggest-attribute=noreturn # -Wsuggest-attribute=pure # (false positive in gcc 8.5.0 RedHat)
-Wsuggest-final-methods -Wsuggest-final-types
-Wsuggest-override # (gcc 12, not in gcc 11)
-Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum
# -Wswitch-outside-range # (gcc 11, not in gcc 9)
-Wswitch-unreachable
-Wsync-nand -Wsynth
-Wno-system-headers # (expects system headers to be warning-compliant which they are not)
-Wtautological-compare
-Wno-templates # (disallows templates, C-tool)
-Wterminate # (gcc 12, not in 11)
-Wtrampolines -Wtrigraphs
# -Wtrivial-auto-var-init # (gcc 12, not in 11)
# -Wtsan # (gcc 11, not in 10)
-Wtype-limits -Wundef -Wuninitialized
-Wno-unknown-pragmas # (see above) -Wunknown-pragmas (other compilers need their own pragmas for their warnings)
-Wunreachable-code -Wunsafe-loop-optimizations
-Wunused -Wunused-but-set-parameter -Wunused-but-set-variable
-Wunused-const-variable #=2 TODO(correaa) add [[maybe_unused]] to niebloids
-Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-macros -Wunused-parameter -Wunused-result -Wunused-value -Wunused-variable
# -Wuse-after-free # =<0,3> # (gcc 12, not in 11)
-Wuseless-cast
-Wvarargs -Wvariadic-macros -Wvector-operation-performance
# -Wvexing-parse # (gcc 11, not in gcc 10)
-Wvirtual-inheritance -Wvirtual-move-assign
-Wvla # -Wvla-larger-than=<number> # (gcc 12, not in 11)
# -Wvla-parameter # (gcc 11, not in gcc 10)
# -Wvolatile # (gcc 11, not in gcc 9)
-Wvolatile-register-var
-Wwrite-strings
-Wzero-as-null-pointer-constant
# -Wzero-length-bounds # (gcc 12, not in 11)
>
$<$<AND:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CUDA_COMPILER_ID:Clang>>:-Werror -Wall -Wpedantic -Wextra
-Wno-error=\#warnings # -Wno-\#warnings disable this working for a bug in rocm ~5.6
-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
# -Waix-compat (clang 13, not in clang 11)
# -Walign-mismatch (clang 13, not in clang 11)
# -Walloca (clang 11, not in clang 9)
-Walloca-with-align-alignof
# -Walways-inline-coroutine (clang 15, not in clang 13)
-Wambiguous-delete -Wambiguous-ellipsis -Wambiguous-macro -Wambiguous-member-template
# -Wambiguous-reversed-operator (clang 11, not in clang 9)
-Wanalyzer-incompatible-plugin
# -Wanon-enum-enum-conversion (clang 11, not in clang 9)
-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 (clang 15, not in clang 13)
# -Wargument-undefined-behaviour (clang 15, not in clang 13)
-Warray-bounds -Warray-bounds-pointer-arithmetic
-Wasm -Wasm-operand-widths
-Wassign-enum
-Wassume
-Wat-protocol
-Watimport-in-framework-header
# -Watomic-access (clang 15, not in clang 13)
-Watomic-alignment
# -Watomic-implicit-seq-cst (not in clang 7)
-Watomic-memory-ordering -Watomic-properties -Watomic-property-with-user-defined-accessor
-Wattribute-packed-for-bitfield
# -Wattribute-warning (clang 15, not in clang 13)
-Wattributes
-Wauto-disable-vptr-sanitizer -Wauto-import -Wauto-storage-class -Wauto-var-id
-Wavailability
# -Wavr-rtlib-linking-quirks (not in clang 7)
-Wbackend-plugin
-Wbackslash-newline-escape
-Wbad-function-cast
-Wbinary-literal
-Wbind-to-temporary-copy
-Wbinding-in-condition
# -Wbit-int-extension (clang 15, not in clang 13)
-Wbitfield-constant-conversion -Wbitfield-enum-conversion -Wbitfield-width
# -Wbitwise-conditional-parentheses (clang 11, not in clang 9)
# -Wbitwise-instead-of-logical (clang 15, not in clang 13)
-Wbitwise-op-parentheses
-Wblock-capture-autoreleasing
-Wbool-conversion -Wbool-conversions
# -Wbool-operation (clang 11, not in clang 9)
-Wbraced-scalar-init
# -Wbranch-protection (clang 15, not in clang 13)
-Wbridge-cast
# -Wbuiltin-assume-aligned-alignment (clang 11, not in clang 9)
-Wbuiltin-macro-redefined -Wbuiltin-memcpy-chk-size -Wbuiltin-requires-header
# -Wc++-compat
# -Wc++0x-compat -Wc++0x-extensions -Wc++0x-narrowing
# -Wc++11-compat -Wc++11-compat-deprecated-writable-strings -Wc++11-compat-pedantic -Wc++11-compat-reserved-user-defined-literal -Wc++11-extensions -Wc++11-extra-semi -Wc++11-inline-namespace -Wc++11-long-long -Wc++11-narrowing
# -Wc++14-attribute-extensions (clang 15, not in clang 13)
-Wc++14-binary-literal
# -Wc++14-compat -Wc++14-compat-pedantic -Wc++14-extensions
# -Wc++17-attribute-extensions (clang 15, not in clang 13)
# -Wc++17-compat -Wc++17-compat-mangling -Wc++17-compat-pedantic -Wc++17-extensions
# -Wc++1y-extensions
# -Wc++1z-compat -Wc++1z-compat-mangling -Wc++1z-extensions
# -Wc++20-attribute-extensions (clang 15, not in clang 13)
# -Wc++20-compat -Wc++20-compat-pedantic
# -Wc++20-designator -Wc++20-extensions
# -Wc++2a-compat -Wc++2a-compat-pedantic
# -Wc++2a-extensions
# -Wc++2b-extensions
# -Wc++98-c++11-c++14-c++17-compat -Wc++98-c++11-c++14-c++17-compat-pedantic -Wc++98-c++11-c++14-compat -Wc++98-c++11-c++14-compat-pedantic
# -Wc++98-c++11-compat -Wc++98-c++11-compat-binary-literal -Wc++98-c++11-compat-pedantic
# -Wc++98-compat
-Wno-c++98-compat-bind-to-temporary-copy
#-Wc++98-compat-extra-semi -Wc++98-compat-local-type-template-args -Wc++98-compat-pedantic -Wc++98-compat-unnamed-type-template-args
-Wno-c++98-compat-unnamed-type-template-args
# -Wc11-extensions
# -Wc2x-extensions
# -Wc99-compat
# -Wc99-designator -Wc99-extensions
-Wcast-align -Wcast-qual
# -Wcall-to-pure-virtual-from-ctor-dtor (not in clang 7)
# -Wcalled-once-parameter (clang 13, not in clang 11)
-Wcast-align -Wcast-calling-convention
# -Wcast-function-type (clang 13, not in clang 11)
-Wcast-of-sel-type -Wcast-qual -Wcast-qual-unrelated
-Wchar-align -Wchar-subscripts
-Wclang-cl-pch
# -Wclass-conversion (clang 11, not in clang 9)
-Wclass-varargs
# -Wcmse-union-leak (clang 11, not in clang 9)
-Wcomma
-Wcomment -Wcomments
-Wcompare-distinct-pointer-types
# -Wcompletion-handler (clang 13, not in clang 11)
-Wcomplex-component-init
# -Wcompound-token-split -Wcompound-token-split-by-macro -Wcompound-token-split-by-space (clang 13, not in clang 11)
-Wconversion
#-Wconcepts-ts-compat (not working in clang++ 16)
-Wconditional-type-mismatch -Wconditional-uninitialized
-Wconfig-macros
-Wconstant-conversion
# -Wconstant-evaluated (clang 11, not in clang 9)
-Wconstant-logical-operand
-Wconstexpr-not-const
-Wconsumed
-Wconversion -Wconversion-null
-Wcoroutine -Wcoroutine-missing-unhandled-exception
-Wcovered-switch-default
-Wcpp
-Wcstring-format-directive
-Wctor-dtor-privacy
# -Wctu # (not in clang 7)
-Wcuda-compat
-Wcustom-atomic-properties
# -Wcxx-attribute-extension (clang 13, not in clang 11)
-Wdangling -Wdangling-else -Wdangling-field
# -Wdangling-gsl (clang 13, not in clang 9)
-Wdangling-initializer-list
# -Wdarwin-sdk-settings (not in clang 7)
-Wdate-time
-Wdealloc-in-category
-Wdebug-compression-unavailable
-Wdeclaration-after-statement
# -Wdefaulted-function-deleted (not in clang 7)
-Wdelegating-ctor-cycles
# -Wdelete-abstract-non-virtual-dtor (not in clang 7)
-Wdelete-incomplete
# -Wdelete-non-abstract-non-virtual-dtor (not in clang 7)
# -Wdelete-non-virtual-dtor (not in clang 7)
# -Wdelimited-escape-sequence-extension (clang 15, not in clang 13)
-Wdeprecated
# -Wdeprecated-altivec-src-compat (clang 13, not in clang 11)
# -Wdeprecated-anon-enum-enum-conversion -Wdeprecated-array-compare (clang 11, not in clang 9)
-Wdeprecated-attributes
# -Wdeprecated-comma-subscript (clang 11, not in clang 9)
# -Wdeprecated-copy -Wdeprecated-copy-dtor (clang 11, not in clang 9)
# -Wdeprecated-copy-with-dtor (clang 13, not in clang 11)
# -Wdeprecated-copy-with-user-provided-copy (clang 13, not in clang 11)
# -Wdeprecated-copy-with-user-provided-dtor (clang 13, not in clang 11)
# -Wdeprecated-coroutine (clang 15, not in clang 13)
-Wdeprecated-declarations -Wdeprecated-dynamic-exception-spec
# -Wdeprecated-enum-compare -Wdeprecated-enum-compare-conditional -Wdeprecated-enum-enum-conversion (clang 11, not in clang 9)
# -Wdeprecated-enum-float-conversion (clang 11, not in clang 9)
# -Wdeprecated-experimental-coroutine (clang 15, not in clang 13)
-Wdeprecated-implementations -Wdeprecated-increment-bool
# -Wdeprecated-non-prototype (clang 15, not in clang 13)
-Wdeprecated-objc-isa-usage -Wdeprecated-objc-pointer-introspection -Wdeprecated-objc-pointer-introspection-performSelector
# -Wdeprecated-pragma (clang 15, not in clang 13)
-Wdeprecated-register -Wdeprecated-this-capture
# -Wdeprecated-type (clang 15, not in clang 13)
# -Wdeprecated-volatile (clang 11, not in clang 9)
-Wdeprecated-writable-strings
-Wdirect-ivar-access
# -Wdisabled-macro-expansion (Boost.Test)
-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
-Wdocumentation -Wdocumentation-deprecated-sync -Wdocumentation-html -Wdocumentation-pedantic -Wdocumentation-unknown-command
-Wdollar-in-identifier-extension
-Wdouble-promotion
# -Wdtor-name -Wdtor-typedef (clang 11, not in clang 9)
-Wduplicate-decl-specifier -Wduplicate-enum -Wduplicate-method-arg -Wduplicate-method-match -Wduplicate-protocol
-Wdynamic-class-memaccess -Wdynamic-exception-spec
# -Weffc++
# -Welaborated-enum-base -Welaborated-enum-class (clang 11, not in clang 9)
-Wembedded-directive
-Wempty-body -Wempty-decomposition
# -Wempty-init-stmt (not in clang 7)
-Wempty-translation-unit
-Wencode-type
-Wendif-labels
-Wenum-compare
# -Wenum-compare-conditional (clang 11, not in clang 9)
-Wenum-compare-switch -Wenum-conversion
# -Wenum-enum-conversion -Wenum-float-conversion (clang 11, not in clang 9)
-Wenum-too-large
-Wexceptions
# -Wexcess-initializers (clang 11, not in clang 9)
-Wexit-time-destructors
-Wexpansion-to-defined
-Wexplicit-initialize-call -Wexplicit-ownership-type
# -Wexport-unnamed (not in clang 7)
# -Wexport-using-directive (not in clang 7)
-Wextern-c-compat -Wextern-initializer
#-Wextra
-Wextra-qualification
# -Wextra-semi (clang 8, not in 7)
# -Wextra-semi-stmt (not in clang 7)
-Wextra-tokens
# -Wfinal-dtor-non-final-class (clang 11, not in clang 9)
# -Wfinal-macro (clang 15, not in clang 13)
# -Wfixed-enum-extension (not in clang 7)
# -Wfixed-point-overflow (clang 11, not in clang 9)
-Wflag-enum
-Wflexible-array-extensions
-Wfloat-conversion -Wfloat-equal
-Wfloat-overflow-conversion -Wfloat-zero-conversion
-Wfor-loop-analysis
-Wformat -Wformat-extra-args
# -Wformat-insufficient-args (clang 13, not in clang 11)
-Wformat-invalid-specifier -Wformat-non-iso -Wformat-nonliteral -Wformat-pedantic -Wformat-security
# -Wformat-type-confusion (clang 11, not in clang 9)
-Wformat-y2k -Wformat-zero-length -Wformat=2
# -Wfortify-source (not in clang 7)
-Wfour-char-constants
# -Wframe-address (clang 11, not in clang 9)
# -Wframe-larger-than # -Wframe-larger-than=
-Wframework-include-private-from-public
# -Wfree-nonheap-object (clang 13, not in clang 11)
-Wfunction-def-in-objc-container -Wfunction-multiversion
# -Wfuse-ld-path (clang 13, not in clang 11)
# -Wfuture-attribute-extensions (clang 15, not in clang 13)
# -Wfuture-compat
# -Wgcc-compat
# -Wglobal-constructors (Boost.Test)
# -Wglobal-isel (clang 11, not in clang 9)
-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 (clang 11, not in clang 9)
-Wgnu-label-as-value
# -Wgnu-null-pointer-arithmetic
# -Wgnu-pointer-arith (clang 15, not in clang 13)
-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
# -Wgpu-maybe-wrong-side (clang 15, not in clang 13)
-Wheader-guard -Wheader-hygiene
# -Whip-only (clang 11, not in clang 9)
-Widiomatic-parentheses
-Wignored-attributes
# -Wignored-availability-without-sdk-settings (clang 13, not in clang 11)
-Wignored-optimization-argument
#-Wignored-pragma-intrinsic
#-Wignored-pragma-optimize
#-Wignored-pragmas (other compilers need pragmas)
-Wno-ignored-qualifiers # turns out that returning const types is not really ignored by the compiler and prevents certain misleading syntaxes
# -Wignored-reference-qualifiers (clang 15, not in clang 13)
-Wimplicit -Wimplicit-atomic-properties
# -Wimplicit-const-int-float-conversion (clang 11, not in clang 9)
-Wimplicit-conversion-floating-point-to-bool -Wimplicit-exception-spec-mismatch -Wimplicit-fallthrough -Wimplicit-fallthrough-per-function
# -Wimplicit-fixed-point-conversion -Wimplicit-float-conversion (not in clang 7)
-Wimplicit-function-declaration -Wimplicit-int
# -Wimplicit-int-conversion (not in clang 7)
# -Wimplicit-int-float-conversion (clang 11, not in clang 9)
-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 (not in clang 7)
-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-namespace-reopened-noninline (clang 11, not in clang 9)
-Winline-new-delete
-Winstantiation-after-specialization
-Wint-conversion -Wint-conversions
# -Wint-in-bool-context (clang 11, not in clang 9)
-Wint-to-pointer-cast -Wint-to-void-pointer-cast
-Winteger-overflow
# -Winterrupt-service-routine (clang 13, not in clang 11)
-Winvalid-command-line-argument -Winvalid-constexpr -Winvalid-iboutlet -Winvalid-initializer-from-system-header -Winvalid-ios-deployment-target
# -Winvalid-no-builtin-names (clang 11, not in clang 9)
-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
# -Wlinker-warnings (clang 15, not in clang 13)
-Wliteral-conversion -Wliteral-range
# -Wlocal-type-template-args
-Wlogical-not-parentheses -Wlogical-op-parentheses
#-Wlong-long (C++98 warning)
-Wloop-analysis
-Wmacro-redefined
-Wmain -Wmain-return-type
-Wmalformed-warning-check
-Wmany-braces-around-scalar-init
# -Wmax-tokens (clang 11, not in clang 9)
-Wmax-unsigned-zero
-Wmemset-transposed-args -Wmemsize-comparison
-Wmethod-signatures
-Wmicrosoft
# -Wmicrosoft-abstract (clang 13, not in clang 11)
-Wmicrosoft-anon-tag -Wmicrosoft-cast -Wmicrosoft-charize -Wmicrosoft-comment-paste -Wmicrosoft-const-init -Wmicrosoft-cpp-macro -Wmicrosoft-default-arg-redefinition
# -Wmicrosoft-drectve-section (not in clang 7)
-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-static-assert (clang 13, not in clang 11)
-Wmicrosoft-template
# -Wmicrosoft-template-shadow (clang 11, not in clang 9)
-Wmicrosoft-union-member-reference -Wmicrosoft-unqualified-friend -Wmicrosoft-using-decl -Wmicrosoft-void-pseudo-dtor
# -Wmisexpect (clang 15, not in clang 13)
# -Wmisleading-indentation (clang 11, not in clang 9)
-Wmismatched-new-delete -Wmismatched-parameter-types -Wmismatched-return-types -Wmismatched-tags
-Wmissing-braces
# -Wmissing-constinit (clang 11, not in clang 9)
-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-prototypes -Wmissing-selector-name -Wmissing-sysroot -Wmissing-variable-declarations
# -Wmisspelled-assumption (clang 13, not in clang 11)
# -Rmodule-build
-Wmodule-conflict -Wmodule-file-config-mismatch -Wmodule-file-extension
# -Rmodule-import (not in clang 7)
-Wmodule-import-in-extern-c
# -Rmodule-lock
-Wmodules-ambiguous-internal-linkage -Wmodules-import-nested-redundant
-Wmost
-Wmove
-Wmsvc-include -Wmsvc-not-found
-Wmultichar
-Wmultiple-move-vbase
-Wnon-virtual-dtor
-Wnarrowing
-Wnested-anon-types -Wnested-externs
-Wnew-returns-null
-Wnewline-eof
# -Wnoderef (not in clang 7)
-Wnoexcept-type
# -Wnon-c-typedef-for-linkage (clang 11, not in clang 9)
-Wnon-gcc
-Wnon-literal-null-conversion
-Wnon-modular-include-in-framework-module -Wnon-modular-include-in-module
-Wnon-pod-varargs
# -Wnon-power-of-two-alignment (clang 11, not in clang 9)
-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
# -Wnull-pointer-subtraction (clang 13, not in clang 11)
-Wnullability -Wnullability-completeness -Wnullability-completeness-on-arrays -Wnullability-declspec -Wnullability-extension -Wnullability-inferred-on-nested-type
-Wnullable-to-nonnull-conversion
-Wodr
-Wold-style-cast
-Wold-style-definition
-Wopencl-unsupported-rgba
# -Wopenmp (clang 11, not in clang 9)
# -Wopenmp-51-extensions (clang 13, not in clang 11)
-Wopenmp-clauses -Wopenmp-loop-form
# -Wopenmp-mapping (clang 11, not in clang 9)
-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 (not in clang 7)
-Woverride-module -Woverriding-method-mismatch -Woverriding-t-option
-Wpacked
# -Wpadded (ask for aligment)
-Wparentheses -Wparentheses-equality
-Wpartial-availability
# -Rpass -Rpass-analysis
-Wpass-failed
# -Rpass-missed
-Wpch-date-time
-Wpedantic -Wpedantic-core-features
# -Wpedantic-macros (clang 15, not in clang 13)
-Wpessimizing-move
-Wpointer-arith -Wpointer-bool-conversion
# -Wpointer-compare (clang 11, not in clang 9)
# -Wpointer-integer-compare (not in clang 7)
-Wpointer-sign
# -Wpointer-to-enum-cast (clang 11, not in clang 9)
-Wpointer-to-int-cast -Wpointer-type-mismatch
# -Wpoison-system-directories (clang 11, not in clang 9)
# -Wpotentially-direct-selector (clang 11, not in clang 9)
-Wpotentially-evaluated-expression
# -Wpragma-clang-attribute -Wpragma-once-outside-header -Wpragma-pack -Wpragma-pack-suspicious-include -Wpragma-system-header-outside-header -Wpragmas
# -Wpre-c++14-compat -Wpre-c++14-compat-pedantic
# -Wpre-c++17-compat -Wpre-c++17-compat-pedantic
# -Wpre-c++20-compat -Wpre-c++20-compat-pedantic -Wpre-c++2b-compat -Wpre-c++2b-compat-pedantic (clang 13, not in clang 11)
# -Wpre-c2x-compat -Wpre-c2x-compat-pedantic (clang 13, not in clang 11)
# -Wpre-openmp-51-compat (clang 13, not in clang 11)
-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
# -Wpsabi (clang 11, not in clang 9)
-Wqualified-void-return-type
-Wquoted-include-in-framework-header
# -Wrange-loop-analysis (this check is overzealous in clang 9)
-Wrange-loop-analysis
# -Wrange-loop-bind-reference -Wrange-loop-construct (clang 11, not in clang 9)
-Wreadonly-iboutlet-property
-Wreceiver-expr -Wreceiver-forward-class
-Wredeclared-class-member
# -Wredundant-consteval-if (clang 15, not in clang 13)
-Wredundant-decls -Wredundant-move -Wredundant-parens
-Wregister
-Wreinterpret-base-class
-Rremark-backend-plugin
-Wreorder
# -Wreorder-ctor -Wreorder-init-list (clang 11, not in clang 9)
-Wrequires-super-attribute
-Wreserved-id-macro
# -Wreserved-identifier -Wreserved-macro-identifier (clang 13, not in clang 11)
-Wreserved-user-defined-literal
# -Wrestrict-expansion (clang 15, not in clang 13)
-Wretained-language-linkage
-Wreturn-stack-address -Wreturn-std-move -Wreturn-type -Wreturn-type-c-linkage
# -Wrewrite-not-bool (clang 11, not in clang 9)
# -Rround-trip-cc1-args (clang 13, not in clang 11)
# -Wrtti (clang 13, not in clang 11)
-Wshadow
-Wold-style-cast
-Woverloaded-virtual
-Rsanitize-address
# -Rsearch-path-usage
-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 (clang 11, not in clang 9)
-Wsizeof-array-argument -Wsizeof-array-decay
# -Wsizeof-array-div (clang 11, not in clang 9)
# -Wsizeof-pointer-div (not in clang 7)
-Wsizeof-pointer-memaccess
-Wslash-u-filename
# -Wslh-asm-goto (clang 11, not in clang 9)
-Wsometimes-uninitialized
# -Wsource-mgr (clang 13, not in clang 11)
-Wsource-uses-openmp
-Wspir-compat
# -Wspirv-compat (clang 15, not in clang 13)
# -Wstack-exhausted (clang 11, not in clang 9)
-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-potentially-direct-selector (clang 11, not in clang 9)
-Wstrict-prototypes -Wstrict-selector-match
-Wstring-compare
# -Wstring-concatenation (clang 13, not in clang 11)
-Wstring-conversion -Wstring-plus-char -Wstring-plus-int
-Wstrlcpy-strlcat-size
-Wstrncat-size
# -Wsuggest-destructor-override (clang 11, not in clang 9)
# -Wsuggest-override (clang 11, not in clang 9)
-Wsuper-class-method-mismatch
-Wsuspicious-bzero -Wsuspicious-memaccess
# -Wswift-name-attribute (clang 13, not in clang 11)
-Wswitch -Wswitch-bool -Wswitch-default -Wswitch-enum
-Wsync-fetch-and-nand-semantics-changed
-Wsynth
# -Wtarget-clones-mixed-specifiers (clang 15, not in clang 13)
# -Wtautological-bitwise-compare (clang 11, not in clang 9)
-Wtautological-compare -Wtautological-constant-compare -Wtautological-constant-in-range-compare -Wtautological-constant-out-of-range-compare
# -Wtautological-objc-bool-compare (not in clang 7)
-Wtautological-overlap-compare -Wtautological-pointer-compare -Wtautological-type-limit-compare -Wtautological-undefined-compare
# -Wtautological-unsigned-char-zero-compare -Wtautological-unsigned-enum-zero-compare
# -Wtautological-unsigned-zero-compare -Wtautological-value-range-compare (clang 13, not in clang 11)
# -Wtcb-enforcement (clang 13, not in clang 11)
-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
# -Wunaligned-access (clang 15, not in clang 13)
# -Wunaligned-qualifier-implicit-cast (clang 15, not in clang 13)
-Wunavailable-declarations
-Wundeclared-selector
-Wundef
# -Wundef-prefix (clang 11, not in clang 9)
-Wundefined-bool-conversion -Wundefined-func-template -Wundefined-inline -Wundefined-internal -Wundefined-internal-type
-Wno-undefined-reinterpret-cast # needed to cast to c-array
-Wundefined-var-template
# -Wunderaligned-exception-object (not in clang 7)
-Wunevaluated-expression
-Wunguarded-availability -Wunguarded-availability-new
-Wunicode -Wunicode-homoglyph -Wunicode-whitespace
# -Wunicode-zero-width (not in clang 7)
-Wuninitialized
# -Wuninitialized-const-reference (clang 11, not in clang 9)
-Wunknown-argument
# -Wunknown-assumption (clang 13, not in clang 11)
-Wunknown-attributes
# -Wunknown-cuda-version (clang 11, not in clang 9)
-Wunknown-escape-sequence
# -Wunknown-pragmas # (other compilers need their own pragmas)
-Wno-unknown-pragmas # (other compilers need their own pragmas)
# -Wunknown-sanitizers
# -Wunknown-warning-option
-Wunnamed-type-template-args
-Wunneeded-internal-declaration -Wunneeded-member-function
# -Wunqualified-std-cast-call (clang 15, not in clang 13)
-Wunreachable-code -Wunreachable-code-aggressive -Wunreachable-code-break
# -Wunreachable-code-fallthrough (clang 15, not in clang 13)
-Wunreachable-code-loop-increment -Wunreachable-code-return
-Wunsafe-buffer-usage
-Wunsequenced
# -Wunsupported-abi (clang 15, not in clang 13)
-Wunsupported-abs -Wunsupported-availability-guard -Wunsupported-cb -Wunsupported-dll-base-class-template
# -Wunsupported-floating-point-opt (clang 11, not in clang 9)
-Wunsupported-friend -Wunsupported-gpopt -Wunsupported-nan -Wunsupported-target-opt -Wunsupported-visibility
-Wunusable-partial-specialization
-Wunused -Wunused-argument
# -Wunused-but-set-parameter -Wunused-but-set-variable (clang 13, not in clang 11)
-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 (Boost.Test)
-Wuser-defined-literals -Wuser-defined-warnings
-Wvarargs
-Wvariadic-macros
-Wvec-elem-size
-Wvector-conversion -Wvector-conversions
-Wvexing-parse
-Wvisibility
-Wvla -Wvla-extension
# -Wvoid-pointer-to-enum-cast -Wvoid-pointer-to-int-cast (clang 11, not in clang 9)
-Wvoid-ptr-dereference
-Wvolatile-register-var
# -Wwasm-exception-spec (clang 11, not in clang 9)
-Wweak-template-vtables -Wweak-vtables
-Wwritable-strings
-Wwrite-strings
# -Wxor-used-as-pow (clang 11, not in clang 9)
-Wzero-as-null-pointer-constant -Wzero-length-array
>
$<$<CXX_COMPILER_ID:Intel>: -Werror -Wall -Wextra # also IntelLLVM, XL (ibm), XLClang (ibm)
-diag-disable=remark
-diag-error:3846
-diag-disable=1011 # disables warning missing return at the end of non-void function
-diag-disable=2196 # disables "error #2196: routine is both "inline" and "noinline"" in icpc 2021.5.0
-wd161
-Wabi
-Warray-bounds
-Wcast-qual
-Wchar-subscripts
-Wcomment
-Wdeprecated
-Wenum-compare
-Wextra-tokens
-Wformat -Wformat=2 -Wformat-security
-Wic-pointer
-Wnarrowing
-Wreturn-type
-Wnon-virtual-dtor
-Wnonnull
-Wmaybe-uninitialized
-Wmain
-Wmissing-declarations -Wmissing-prototypes
-Wmultichar
-Woverloaded-virtual
-Woverflow
-Wp64
-Wparentheses
-Wpointer-arith
-Wpointer-sign
-Wreorder
-Wreturn-type
-Wsequence-point
-Wshadow
-Wsign-compare
-Wshorten-64-to-32
-Wmissing-prototypes
-Wstrict-aliasing
-Wno-unknown-pragmas
-Wstrict-prototypes
-Wtrigraphs
-Wtype-limits
-Wuninitialized
-Wunused -Wunused-but-set-variable -Wunused-function -Wunused-parameter -Wunused-variable
-Wwrite-strings
>
# $<$<OR:$<CXX_COMPILER_ID:PGI>,$<CXX_COMPILER_ID:NVHPC>>:
$<$<CXX_COMPILER_ID:NVHPC>:
-Werror -Wall
-Wcast-qual
-Wformat=2
-Wshadow
-Wuninitialized
>
$<$<CXX_COMPILER_ID:MSVC>:
/WX /W4 /permissive- /volatile:iso # /EHsc /Zc:wchar_t /Zc:forScope /Zc:inline
>
)
file(
GLOB TEST_SRCS
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
*.cpp
)
if(NOT Boost_FOUND)
message(WARNING "Cannot find Boost, Multi library will have a very minimal test. If you want to test the library install Boost.Test, for example please run:\n sudo apt install libboost-test-dev\n sudo dnf install boost-devel")
add_executable(main main.cpp)
# target_link_libraries(main PRIVATE multi)
target_compile_features (main PUBLIC cxx_std_17)
target_include_directories(main PRIVATE ${PROJECT_SOURCE_DIR}/include)
target_compile_definitions(main PUBLIC BOOST_TEST_MODULE="C++ Unit Tests for Multi main")
target_compile_definitions(main PRIVATE "$<$<CUDA_COMPILER_ID:NVIDIA>:BOOST_PP_VARIADICS>")
if(NOT DEFINED ENABLE_CIRCLE)
target_compile_options(main PRIVATE ${WARNS})
else()
target_compile_definitions(main PRIVATE "BOOST_TEST_DYN_LINK=1")
target_compile_options (main PRIVATE -Werror -Wall)
endif()
add_test(NAME main COMMAND $<TARGET_FILE:main>)
else()
foreach(TEST_FILE ${TEST_SRCS})
set(TEST_EXE "${TEST_FILE}.x")
add_executable(${TEST_EXE} ${TEST_FILE})
if(ENABLE_CUDA)
set_source_files_properties(${TEST_FILE} PROPERTIES LANGUAGE CUDA)
endif()
# target_include_directories(${TEST_EXE} PRIVATE ${PROJECT_SOURCE_DIR}/include)
# target_include_directories(${TEST_EXE} SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} )
target_link_libraries(${TEST_EXE} PRIVATE multi)
target_link_libraries (${TEST_EXE} PRIVATE multi Boost::unit_test_framework )
if(TBB_FOUND)
target_link_libraries (${TEST_EXE} PRIVATE TBB::tbb)
target_compile_definitions(${TEST_EXE} PUBLIC TBB_FOUND=1)
endif()
target_compile_definitions(${TEST_EXE} PUBLIC BOOST_TEST_MODULE="C++ Unit Tests for Multi ${TEST_EXE}")
target_compile_definitions(${TEST_EXE} PUBLIC BOOST_TEST_DYN_LINK=1)
target_compile_definitions(${TEST_EXE} PUBLIC BOOST_NO_CXX98_FUNCTION_BASE=1)
target_compile_definitions(${TEST_EXE} PRIVATE "$<$<CUDA_COMPILER_ID:NVIDIA>:BOOST_PP_VARIADICS>")
if(NOT DEFINED ENABLE_CIRCLE)
target_compile_options(${TEST_EXE} PRIVATE ${WARNS})
else()
target_compile_definitions(${TEST_EXE} PRIVATE "BOOST_TEST_DYN_LINK=1")
target_compile_options (${TEST_EXE} PRIVATE -Werror -Wall)
endif()
add_test(NAME ${TEST_EXE} COMMAND $<TARGET_FILE:${TEST_EXE}>)
endforeach()
endif()
endif()