1c5f01b2fSopenharmony_ci# number of parallel jobs for CTest 2c5f01b2fSopenharmony_ciset(N 10) 3c5f01b2fSopenharmony_ci 4c5f01b2fSopenharmony_ci############################################################################### 5c5f01b2fSopenharmony_ci# Needed tools. 6c5f01b2fSopenharmony_ci############################################################################### 7c5f01b2fSopenharmony_ci 8c5f01b2fSopenharmony_ciinclude(FindPython3) 9c5f01b2fSopenharmony_cifind_package(Python3 COMPONENTS Interpreter) 10c5f01b2fSopenharmony_ci 11c5f01b2fSopenharmony_cifind_program(ASTYLE_TOOL NAMES astyle) 12c5f01b2fSopenharmony_ciexecute_process(COMMAND ${ASTYLE_TOOL} --version OUTPUT_VARIABLE ASTYLE_TOOL_VERSION ERROR_VARIABLE ASTYLE_TOOL_VERSION) 13c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" ASTYLE_TOOL_VERSION "${ASTYLE_TOOL_VERSION}") 14c5f01b2fSopenharmony_cimessage(STATUS " Artistic Style ${ASTYLE_TOOL_VERSION} (${ASTYLE_TOOL})") 15c5f01b2fSopenharmony_ci 16c5f01b2fSopenharmony_cifind_program(CLANG_TOOL NAMES clang++-HEAD clang++-15 clang++-14 clang++-13 clang++-12 clang++-11 clang++) 17c5f01b2fSopenharmony_ciexecute_process(COMMAND ${CLANG_TOOL} --version OUTPUT_VARIABLE CLANG_TOOL_VERSION ERROR_VARIABLE CLANG_TOOL_VERSION) 18c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TOOL_VERSION "${CLANG_TOOL_VERSION}") 19c5f01b2fSopenharmony_cimessage(STATUS " Clang ${CLANG_TOOL_VERSION} (${CLANG_TOOL})") 20c5f01b2fSopenharmony_ci 21c5f01b2fSopenharmony_cifind_program(CLANG_TIDY_TOOL NAMES clang-tidy-15 clang-tidy-14 clang-tidy-13 clang-tidy-12 clang-tidy-11 clang-tidy) 22c5f01b2fSopenharmony_ciexecute_process(COMMAND ${CLANG_TIDY_TOOL} --version OUTPUT_VARIABLE CLANG_TIDY_TOOL_VERSION ERROR_VARIABLE CLANG_TIDY_TOOL_VERSION) 23c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CLANG_TIDY_TOOL_VERSION "${CLANG_TIDY_TOOL_VERSION}") 24c5f01b2fSopenharmony_cimessage(STATUS " Clang-Tidy ${CLANG_TIDY_TOOL_VERSION} (${CLANG_TIDY_TOOL})") 25c5f01b2fSopenharmony_ci 26c5f01b2fSopenharmony_cimessage(STATUS " CMake ${CMAKE_VERSION} (${CMAKE_COMMAND})") 27c5f01b2fSopenharmony_ci 28c5f01b2fSopenharmony_cifind_program(CPPCHECK_TOOL NAMES cppcheck) 29c5f01b2fSopenharmony_ciexecute_process(COMMAND ${CPPCHECK_TOOL} --version OUTPUT_VARIABLE CPPCHECK_TOOL_VERSION ERROR_VARIABLE CPPCHECK_TOOL_VERSION) 30c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" CPPCHECK_TOOL_VERSION "${CPPCHECK_TOOL_VERSION}") 31c5f01b2fSopenharmony_cimessage(STATUS " Cppcheck ${CPPCHECK_TOOL_VERSION} (${CPPCHECK_TOOL})") 32c5f01b2fSopenharmony_ci 33c5f01b2fSopenharmony_cifind_program(GCC_TOOL NAMES g++-latest g++-HEAD g++-11 g++-10) 34c5f01b2fSopenharmony_ciexecute_process(COMMAND ${GCC_TOOL} --version OUTPUT_VARIABLE GCC_TOOL_VERSION ERROR_VARIABLE GCC_TOOL_VERSION) 35c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GCC_TOOL_VERSION "${GCC_TOOL_VERSION}") 36c5f01b2fSopenharmony_cimessage(STATUS " GCC ${GCC_TOOL_VERSION} (${GCC_TOOL})") 37c5f01b2fSopenharmony_ci 38c5f01b2fSopenharmony_cifind_program(GCOV_TOOL NAMES gcov-HEAD gcov-11 gcov-10 gcov) 39c5f01b2fSopenharmony_ciexecute_process(COMMAND ${GCOV_TOOL} --version OUTPUT_VARIABLE GCOV_TOOL_VERSION ERROR_VARIABLE GCOV_TOOL_VERSION) 40c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GCOV_TOOL_VERSION "${GCOV_TOOL_VERSION}") 41c5f01b2fSopenharmony_cimessage(STATUS " GCOV ${GCOV_TOOL_VERSION} (${GCOV_TOOL})") 42c5f01b2fSopenharmony_ci 43c5f01b2fSopenharmony_cifind_program(GIT_TOOL NAMES git) 44c5f01b2fSopenharmony_ciexecute_process(COMMAND ${GIT_TOOL} --version OUTPUT_VARIABLE GIT_TOOL_VERSION ERROR_VARIABLE GIT_TOOL_VERSION) 45c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" GIT_TOOL_VERSION "${GIT_TOOL_VERSION}") 46c5f01b2fSopenharmony_cimessage(STATUS " Git ${GIT_TOOL_VERSION} (${GIT_TOOL})") 47c5f01b2fSopenharmony_ci 48c5f01b2fSopenharmony_cifind_program(IWYU_TOOL NAMES include-what-you-use iwyu) 49c5f01b2fSopenharmony_ciexecute_process(COMMAND ${IWYU_TOOL} --version OUTPUT_VARIABLE IWYU_TOOL_VERSION ERROR_VARIABLE IWYU_TOOL_VERSION) 50c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" IWYU_TOOL_VERSION "${IWYU_TOOL_VERSION}") 51c5f01b2fSopenharmony_cimessage(STATUS " include-what-you-use ${IWYU_TOOL_VERSION} (${IWYU_TOOL})") 52c5f01b2fSopenharmony_ci 53c5f01b2fSopenharmony_cifind_program(INFER_TOOL NAMES infer) 54c5f01b2fSopenharmony_ciexecute_process(COMMAND ${INFER_TOOL} --version OUTPUT_VARIABLE INFER_TOOL_VERSION ERROR_VARIABLE INFER_TOOL_VERSION) 55c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" INFER_TOOL_VERSION "${INFER_TOOL_VERSION}") 56c5f01b2fSopenharmony_cimessage(STATUS " Infer ${INFER_TOOL_VERSION} (${INFER_TOOL})") 57c5f01b2fSopenharmony_ci 58c5f01b2fSopenharmony_cifind_program(LCOV_TOOL NAMES lcov) 59c5f01b2fSopenharmony_ciexecute_process(COMMAND ${LCOV_TOOL} --version OUTPUT_VARIABLE LCOV_TOOL_VERSION ERROR_VARIABLE LCOV_TOOL_VERSION) 60c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" LCOV_TOOL_VERSION "${LCOV_TOOL_VERSION}") 61c5f01b2fSopenharmony_cimessage(STATUS " LCOV ${LCOV_TOOL_VERSION} (${LCOV_TOOL})") 62c5f01b2fSopenharmony_ci 63c5f01b2fSopenharmony_cifind_program(NINJA_TOOL NAMES ninja) 64c5f01b2fSopenharmony_ciexecute_process(COMMAND ${NINJA_TOOL} --version OUTPUT_VARIABLE NINJA_TOOL_VERSION ERROR_VARIABLE NINJA_TOOL_VERSION) 65c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" NINJA_TOOL_VERSION "${NINJA_TOOL_VERSION}") 66c5f01b2fSopenharmony_cimessage(STATUS " Ninja ${NINJA_TOOL_VERSION} (${NINJA_TOOL})") 67c5f01b2fSopenharmony_ci 68c5f01b2fSopenharmony_cifind_program(OCLINT_TOOL NAMES oclint-json-compilation-database) 69c5f01b2fSopenharmony_cifind_program(OCLINT_VERSION_TOOL NAMES oclint) 70c5f01b2fSopenharmony_ciexecute_process(COMMAND ${OCLINT_VERSION_TOOL} --version OUTPUT_VARIABLE OCLINT_TOOL_VERSION ERROR_VARIABLE OCLINT_TOOL_VERSION) 71c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" OCLINT_TOOL_VERSION "${OCLINT_TOOL_VERSION}") 72c5f01b2fSopenharmony_cimessage(STATUS " OCLint ${OCLINT_TOOL_VERSION} (${OCLINT_TOOL})") 73c5f01b2fSopenharmony_ci 74c5f01b2fSopenharmony_cifind_program(VALGRIND_TOOL NAMES valgrind) 75c5f01b2fSopenharmony_ciexecute_process(COMMAND ${VALGRIND_TOOL} --version OUTPUT_VARIABLE VALGRIND_TOOL_VERSION ERROR_VARIABLE VALGRIND_TOOL_VERSION) 76c5f01b2fSopenharmony_cistring(REGEX MATCH "[0-9]+(\\.[0-9]+)+" VALGRIND_TOOL_VERSION "${VALGRIND_TOOL_VERSION}") 77c5f01b2fSopenharmony_cimessage(STATUS " Valgrind ${VALGRIND_TOOL_VERSION} (${VALGRIND_TOOL})") 78c5f01b2fSopenharmony_ci 79c5f01b2fSopenharmony_cifind_program(GENHTML_TOOL NAMES genhtml) 80c5f01b2fSopenharmony_cifind_program(PLOG_CONVERTER_TOOL NAMES plog-converter) 81c5f01b2fSopenharmony_cifind_program(PVS_STUDIO_ANALYZER_TOOL NAMES pvs-studio-analyzer) 82c5f01b2fSopenharmony_cifind_program(SCAN_BUILD_TOOL NAMES scan-build-15 scan-build-14 scan-build-13 scan-build-12 scan-build-11 scan-build) 83c5f01b2fSopenharmony_ci 84c5f01b2fSopenharmony_ci# the individual source files 85c5f01b2fSopenharmony_cifile(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp) 86c5f01b2fSopenharmony_ci 87c5f01b2fSopenharmony_ci############################################################################### 88c5f01b2fSopenharmony_ci# Thorough check with recent compilers 89c5f01b2fSopenharmony_ci############################################################################### 90c5f01b2fSopenharmony_ci 91c5f01b2fSopenharmony_ci# Ignored Clang warnings: 92c5f01b2fSopenharmony_ci# -Wno-c++98-compat The library targets C++11. 93c5f01b2fSopenharmony_ci# -Wno-c++98-compat-pedantic The library targets C++11. 94c5f01b2fSopenharmony_ci# -Wno-deprecated-declarations The library contains annotations for deprecated functions. 95c5f01b2fSopenharmony_ci# -Wno-extra-semi-stmt The library uses std::assert which triggers this warning. 96c5f01b2fSopenharmony_ci# -Wno-padded We do not care about padding warnings. 97c5f01b2fSopenharmony_ci# -Wno-covered-switch-default All switches list all cases and a default case. 98c5f01b2fSopenharmony_ci# -Wno-weak-vtables The library is header-only. 99c5f01b2fSopenharmony_ci# -Wreserved-identifier See https://github.com/onqtam/doctest/issues/536. 100c5f01b2fSopenharmony_ci 101c5f01b2fSopenharmony_ciset(CLANG_CXXFLAGS 102c5f01b2fSopenharmony_ci -Werror 103c5f01b2fSopenharmony_ci -Weverything 104c5f01b2fSopenharmony_ci -Wno-c++98-compat 105c5f01b2fSopenharmony_ci -Wno-c++98-compat-pedantic 106c5f01b2fSopenharmony_ci -Wno-deprecated-declarations 107c5f01b2fSopenharmony_ci -Wno-extra-semi-stmt 108c5f01b2fSopenharmony_ci -Wno-padded 109c5f01b2fSopenharmony_ci -Wno-covered-switch-default 110c5f01b2fSopenharmony_ci -Wno-weak-vtables 111c5f01b2fSopenharmony_ci -Wno-reserved-identifier 112c5f01b2fSopenharmony_ci) 113c5f01b2fSopenharmony_ci 114c5f01b2fSopenharmony_ci# Warning flags determined for GCC 13.0 (experimental) with https://github.com/nlohmann/gcc_flags: 115c5f01b2fSopenharmony_ci# Ignored GCC warnings: 116c5f01b2fSopenharmony_ci# -Wno-abi-tag We do not care about ABI tags. 117c5f01b2fSopenharmony_ci# -Wno-aggregate-return The library uses aggregate returns. 118c5f01b2fSopenharmony_ci# -Wno-long-long The library uses the long long type to interface with system functions. 119c5f01b2fSopenharmony_ci# -Wno-namespaces The library uses namespaces. 120c5f01b2fSopenharmony_ci# -Wno-padded We do not care about padding warnings. 121c5f01b2fSopenharmony_ci# -Wno-system-headers We do not care about warnings in system headers. 122c5f01b2fSopenharmony_ci# -Wno-templates The library uses templates. 123c5f01b2fSopenharmony_ci 124c5f01b2fSopenharmony_ciset(GCC_CXXFLAGS 125c5f01b2fSopenharmony_ci -pedantic 126c5f01b2fSopenharmony_ci -Werror 127c5f01b2fSopenharmony_ci --all-warnings 128c5f01b2fSopenharmony_ci --extra-warnings 129c5f01b2fSopenharmony_ci -W 130c5f01b2fSopenharmony_ci -WNSObject-attribute 131c5f01b2fSopenharmony_ci -Wno-abi-tag 132c5f01b2fSopenharmony_ci -Waddress 133c5f01b2fSopenharmony_ci -Waddress-of-packed-member 134c5f01b2fSopenharmony_ci -Wno-aggregate-return 135c5f01b2fSopenharmony_ci -Waggressive-loop-optimizations 136c5f01b2fSopenharmony_ci -Waligned-new=all 137c5f01b2fSopenharmony_ci -Wall 138c5f01b2fSopenharmony_ci -Walloc-zero 139c5f01b2fSopenharmony_ci -Walloca 140c5f01b2fSopenharmony_ci -Wanalyzer-double-fclose 141c5f01b2fSopenharmony_ci -Wanalyzer-double-free 142c5f01b2fSopenharmony_ci -Wanalyzer-exposure-through-output-file 143c5f01b2fSopenharmony_ci -Wanalyzer-file-leak 144c5f01b2fSopenharmony_ci -Wanalyzer-free-of-non-heap 145c5f01b2fSopenharmony_ci -Wanalyzer-malloc-leak 146c5f01b2fSopenharmony_ci -Wanalyzer-mismatching-deallocation 147c5f01b2fSopenharmony_ci -Wanalyzer-null-argument 148c5f01b2fSopenharmony_ci -Wanalyzer-null-dereference 149c5f01b2fSopenharmony_ci -Wanalyzer-possible-null-argument 150c5f01b2fSopenharmony_ci -Wanalyzer-possible-null-dereference 151c5f01b2fSopenharmony_ci -Wanalyzer-shift-count-negative 152c5f01b2fSopenharmony_ci -Wanalyzer-shift-count-overflow 153c5f01b2fSopenharmony_ci -Wanalyzer-stale-setjmp-buffer 154c5f01b2fSopenharmony_ci -Wanalyzer-tainted-allocation-size 155c5f01b2fSopenharmony_ci -Wanalyzer-tainted-array-index 156c5f01b2fSopenharmony_ci -Wanalyzer-tainted-divisor 157c5f01b2fSopenharmony_ci -Wanalyzer-tainted-offset 158c5f01b2fSopenharmony_ci -Wanalyzer-tainted-size 159c5f01b2fSopenharmony_ci -Wanalyzer-too-complex 160c5f01b2fSopenharmony_ci -Wanalyzer-unsafe-call-within-signal-handler 161c5f01b2fSopenharmony_ci -Wanalyzer-use-after-free 162c5f01b2fSopenharmony_ci -Wanalyzer-use-of-pointer-in-stale-stack-frame 163c5f01b2fSopenharmony_ci -Wanalyzer-use-of-uninitialized-value 164c5f01b2fSopenharmony_ci -Wanalyzer-va-arg-type-mismatch 165c5f01b2fSopenharmony_ci -Wanalyzer-va-list-exhausted 166c5f01b2fSopenharmony_ci -Wanalyzer-va-list-leak 167c5f01b2fSopenharmony_ci -Wanalyzer-va-list-use-after-va-end 168c5f01b2fSopenharmony_ci -Wanalyzer-write-to-const 169c5f01b2fSopenharmony_ci -Wanalyzer-write-to-string-literal 170c5f01b2fSopenharmony_ci -Warith-conversion 171c5f01b2fSopenharmony_ci -Warray-bounds=2 172c5f01b2fSopenharmony_ci -Warray-compare 173c5f01b2fSopenharmony_ci -Warray-parameter=2 174c5f01b2fSopenharmony_ci -Wattribute-alias=2 175c5f01b2fSopenharmony_ci -Wattribute-warning 176c5f01b2fSopenharmony_ci -Wattributes 177c5f01b2fSopenharmony_ci -Wbool-compare 178c5f01b2fSopenharmony_ci -Wbool-operation 179c5f01b2fSopenharmony_ci -Wbuiltin-declaration-mismatch 180c5f01b2fSopenharmony_ci -Wbuiltin-macro-redefined 181c5f01b2fSopenharmony_ci -Wc++0x-compat 182c5f01b2fSopenharmony_ci -Wc++11-compat 183c5f01b2fSopenharmony_ci -Wc++11-extensions 184c5f01b2fSopenharmony_ci -Wc++14-compat 185c5f01b2fSopenharmony_ci -Wc++14-extensions 186c5f01b2fSopenharmony_ci -Wc++17-compat 187c5f01b2fSopenharmony_ci -Wc++17-extensions 188c5f01b2fSopenharmony_ci -Wc++1z-compat 189c5f01b2fSopenharmony_ci -Wc++20-compat 190c5f01b2fSopenharmony_ci -Wc++20-extensions 191c5f01b2fSopenharmony_ci -Wc++23-extensions 192c5f01b2fSopenharmony_ci -Wc++2a-compat 193c5f01b2fSopenharmony_ci -Wcannot-profile 194c5f01b2fSopenharmony_ci -Wcast-align 195c5f01b2fSopenharmony_ci -Wcast-align=strict 196c5f01b2fSopenharmony_ci -Wcast-function-type 197c5f01b2fSopenharmony_ci -Wcast-qual 198c5f01b2fSopenharmony_ci -Wcatch-value=3 199c5f01b2fSopenharmony_ci -Wchar-subscripts 200c5f01b2fSopenharmony_ci -Wclass-conversion 201c5f01b2fSopenharmony_ci -Wclass-memaccess 202c5f01b2fSopenharmony_ci -Wclobbered 203c5f01b2fSopenharmony_ci -Wcomma-subscript 204c5f01b2fSopenharmony_ci -Wcomment 205c5f01b2fSopenharmony_ci -Wcomments 206c5f01b2fSopenharmony_ci -Wconditionally-supported 207c5f01b2fSopenharmony_ci -Wconversion 208c5f01b2fSopenharmony_ci -Wconversion-null 209c5f01b2fSopenharmony_ci -Wcoverage-invalid-line-number 210c5f01b2fSopenharmony_ci -Wcoverage-mismatch 211c5f01b2fSopenharmony_ci -Wcpp 212c5f01b2fSopenharmony_ci -Wctad-maybe-unsupported 213c5f01b2fSopenharmony_ci -Wctor-dtor-privacy 214c5f01b2fSopenharmony_ci -Wdangling-else 215c5f01b2fSopenharmony_ci -Wdangling-pointer=2 216c5f01b2fSopenharmony_ci -Wdate-time 217c5f01b2fSopenharmony_ci -Wdelete-incomplete 218c5f01b2fSopenharmony_ci -Wdelete-non-virtual-dtor 219c5f01b2fSopenharmony_ci -Wdeprecated 220c5f01b2fSopenharmony_ci -Wdeprecated-copy 221c5f01b2fSopenharmony_ci -Wdeprecated-copy-dtor 222c5f01b2fSopenharmony_ci -Wdeprecated-declarations 223c5f01b2fSopenharmony_ci -Wdeprecated-enum-enum-conversion 224c5f01b2fSopenharmony_ci -Wdeprecated-enum-float-conversion 225c5f01b2fSopenharmony_ci -Wdisabled-optimization 226c5f01b2fSopenharmony_ci -Wdiv-by-zero 227c5f01b2fSopenharmony_ci -Wdouble-promotion 228c5f01b2fSopenharmony_ci -Wduplicated-branches 229c5f01b2fSopenharmony_ci -Wduplicated-cond 230c5f01b2fSopenharmony_ci -Weffc++ 231c5f01b2fSopenharmony_ci -Wempty-body 232c5f01b2fSopenharmony_ci -Wendif-labels 233c5f01b2fSopenharmony_ci -Wenum-compare 234c5f01b2fSopenharmony_ci -Wenum-conversion 235c5f01b2fSopenharmony_ci -Wexceptions 236c5f01b2fSopenharmony_ci -Wexpansion-to-defined 237c5f01b2fSopenharmony_ci -Wextra 238c5f01b2fSopenharmony_ci -Wextra-semi 239c5f01b2fSopenharmony_ci -Wfloat-conversion 240c5f01b2fSopenharmony_ci -Wfloat-equal 241c5f01b2fSopenharmony_ci -Wformat-diag 242c5f01b2fSopenharmony_ci -Wformat-overflow=2 243c5f01b2fSopenharmony_ci -Wformat-signedness 244c5f01b2fSopenharmony_ci -Wformat-truncation=2 245c5f01b2fSopenharmony_ci -Wformat=2 246c5f01b2fSopenharmony_ci -Wframe-address 247c5f01b2fSopenharmony_ci -Wfree-nonheap-object 248c5f01b2fSopenharmony_ci -Whsa 249c5f01b2fSopenharmony_ci -Wif-not-aligned 250c5f01b2fSopenharmony_ci -Wignored-attributes 251c5f01b2fSopenharmony_ci -Wignored-qualifiers 252c5f01b2fSopenharmony_ci -Wimplicit-fallthrough=5 253c5f01b2fSopenharmony_ci -Winaccessible-base 254c5f01b2fSopenharmony_ci -Winfinite-recursion 255c5f01b2fSopenharmony_ci -Winherited-variadic-ctor 256c5f01b2fSopenharmony_ci -Winit-list-lifetime 257c5f01b2fSopenharmony_ci -Winit-self 258c5f01b2fSopenharmony_ci -Winline 259c5f01b2fSopenharmony_ci -Wint-in-bool-context 260c5f01b2fSopenharmony_ci -Wint-to-pointer-cast 261c5f01b2fSopenharmony_ci -Winterference-size 262c5f01b2fSopenharmony_ci -Winvalid-imported-macros 263c5f01b2fSopenharmony_ci -Winvalid-memory-model 264c5f01b2fSopenharmony_ci -Winvalid-offsetof 265c5f01b2fSopenharmony_ci -Winvalid-pch 266c5f01b2fSopenharmony_ci -Wliteral-suffix 267c5f01b2fSopenharmony_ci -Wlogical-not-parentheses 268c5f01b2fSopenharmony_ci -Wlogical-op 269c5f01b2fSopenharmony_ci -Wno-long-long 270c5f01b2fSopenharmony_ci -Wlto-type-mismatch 271c5f01b2fSopenharmony_ci -Wmain 272c5f01b2fSopenharmony_ci -Wmaybe-uninitialized 273c5f01b2fSopenharmony_ci -Wmemset-elt-size 274c5f01b2fSopenharmony_ci -Wmemset-transposed-args 275c5f01b2fSopenharmony_ci -Wmisleading-indentation 276c5f01b2fSopenharmony_ci -Wmismatched-dealloc 277c5f01b2fSopenharmony_ci -Wmismatched-new-delete 278c5f01b2fSopenharmony_ci -Wmismatched-tags 279c5f01b2fSopenharmony_ci -Wmissing-attributes 280c5f01b2fSopenharmony_ci -Wmissing-braces 281c5f01b2fSopenharmony_ci -Wmissing-declarations 282c5f01b2fSopenharmony_ci -Wmissing-field-initializers 283c5f01b2fSopenharmony_ci -Wmissing-include-dirs 284c5f01b2fSopenharmony_ci -Wmissing-profile 285c5f01b2fSopenharmony_ci -Wmissing-requires 286c5f01b2fSopenharmony_ci -Wmissing-template-keyword 287c5f01b2fSopenharmony_ci -Wmultichar 288c5f01b2fSopenharmony_ci -Wmultiple-inheritance 289c5f01b2fSopenharmony_ci -Wmultistatement-macros 290c5f01b2fSopenharmony_ci -Wno-namespaces 291c5f01b2fSopenharmony_ci -Wnarrowing 292c5f01b2fSopenharmony_ci -Wnoexcept 293c5f01b2fSopenharmony_ci -Wnoexcept-type 294c5f01b2fSopenharmony_ci -Wnon-template-friend 295c5f01b2fSopenharmony_ci -Wnon-virtual-dtor 296c5f01b2fSopenharmony_ci -Wnonnull 297c5f01b2fSopenharmony_ci -Wnonnull-compare 298c5f01b2fSopenharmony_ci -Wnormalized=nfkc 299c5f01b2fSopenharmony_ci -Wnull-dereference 300c5f01b2fSopenharmony_ci -Wodr 301c5f01b2fSopenharmony_ci -Wold-style-cast 302c5f01b2fSopenharmony_ci -Wopenacc-parallelism 303c5f01b2fSopenharmony_ci -Wopenmp-simd 304c5f01b2fSopenharmony_ci -Woverflow 305c5f01b2fSopenharmony_ci -Woverlength-strings 306c5f01b2fSopenharmony_ci -Woverloaded-virtual 307c5f01b2fSopenharmony_ci -Wpacked 308c5f01b2fSopenharmony_ci -Wpacked-bitfield-compat 309c5f01b2fSopenharmony_ci -Wpacked-not-aligned 310c5f01b2fSopenharmony_ci -Wno-padded 311c5f01b2fSopenharmony_ci -Wparentheses 312c5f01b2fSopenharmony_ci -Wpedantic 313c5f01b2fSopenharmony_ci -Wpessimizing-move 314c5f01b2fSopenharmony_ci -Wplacement-new=2 315c5f01b2fSopenharmony_ci -Wpmf-conversions 316c5f01b2fSopenharmony_ci -Wpointer-arith 317c5f01b2fSopenharmony_ci -Wpointer-compare 318c5f01b2fSopenharmony_ci -Wpragmas 319c5f01b2fSopenharmony_ci -Wprio-ctor-dtor 320c5f01b2fSopenharmony_ci -Wpsabi 321c5f01b2fSopenharmony_ci -Wrange-loop-construct 322c5f01b2fSopenharmony_ci -Wredundant-decls 323c5f01b2fSopenharmony_ci -Wredundant-move 324c5f01b2fSopenharmony_ci -Wredundant-tags 325c5f01b2fSopenharmony_ci -Wregister 326c5f01b2fSopenharmony_ci -Wreorder 327c5f01b2fSopenharmony_ci -Wrestrict 328c5f01b2fSopenharmony_ci -Wreturn-local-addr 329c5f01b2fSopenharmony_ci -Wreturn-type 330c5f01b2fSopenharmony_ci -Wscalar-storage-order 331c5f01b2fSopenharmony_ci -Wsequence-point 332c5f01b2fSopenharmony_ci -Wshadow=compatible-local 333c5f01b2fSopenharmony_ci -Wshadow=global 334c5f01b2fSopenharmony_ci -Wshadow=local 335c5f01b2fSopenharmony_ci -Wshift-count-negative 336c5f01b2fSopenharmony_ci -Wshift-count-overflow 337c5f01b2fSopenharmony_ci -Wshift-negative-value 338c5f01b2fSopenharmony_ci -Wshift-overflow=2 339c5f01b2fSopenharmony_ci -Wsign-compare 340c5f01b2fSopenharmony_ci -Wsign-conversion 341c5f01b2fSopenharmony_ci -Wsign-promo 342c5f01b2fSopenharmony_ci -Wsized-deallocation 343c5f01b2fSopenharmony_ci -Wsizeof-array-argument 344c5f01b2fSopenharmony_ci -Wsizeof-array-div 345c5f01b2fSopenharmony_ci -Wsizeof-pointer-div 346c5f01b2fSopenharmony_ci -Wsizeof-pointer-memaccess 347c5f01b2fSopenharmony_ci -Wstack-protector 348c5f01b2fSopenharmony_ci -Wstrict-aliasing=3 349c5f01b2fSopenharmony_ci -Wstrict-null-sentinel 350c5f01b2fSopenharmony_ci -Wno-strict-overflow 351c5f01b2fSopenharmony_ci -Wstring-compare 352c5f01b2fSopenharmony_ci -Wstringop-overflow=4 353c5f01b2fSopenharmony_ci -Wstringop-overread 354c5f01b2fSopenharmony_ci -Wstringop-truncation 355c5f01b2fSopenharmony_ci -Wsubobject-linkage 356c5f01b2fSopenharmony_ci -Wsuggest-attribute=cold 357c5f01b2fSopenharmony_ci -Wsuggest-attribute=const 358c5f01b2fSopenharmony_ci -Wsuggest-attribute=format 359c5f01b2fSopenharmony_ci -Wsuggest-attribute=malloc 360c5f01b2fSopenharmony_ci -Wsuggest-attribute=noreturn 361c5f01b2fSopenharmony_ci -Wsuggest-attribute=pure 362c5f01b2fSopenharmony_ci -Wsuggest-final-methods 363c5f01b2fSopenharmony_ci -Wsuggest-final-types 364c5f01b2fSopenharmony_ci -Wsuggest-override 365c5f01b2fSopenharmony_ci -Wswitch 366c5f01b2fSopenharmony_ci -Wswitch-bool 367c5f01b2fSopenharmony_ci -Wswitch-default 368c5f01b2fSopenharmony_ci -Wswitch-enum 369c5f01b2fSopenharmony_ci -Wswitch-outside-range 370c5f01b2fSopenharmony_ci -Wswitch-unreachable 371c5f01b2fSopenharmony_ci -Wsync-nand 372c5f01b2fSopenharmony_ci -Wsynth 373c5f01b2fSopenharmony_ci -Wno-system-headers 374c5f01b2fSopenharmony_ci -Wtautological-compare 375c5f01b2fSopenharmony_ci -Wno-templates 376c5f01b2fSopenharmony_ci -Wterminate 377c5f01b2fSopenharmony_ci -Wtrampolines 378c5f01b2fSopenharmony_ci -Wtrigraphs 379c5f01b2fSopenharmony_ci -Wtrivial-auto-var-init 380c5f01b2fSopenharmony_ci -Wtsan 381c5f01b2fSopenharmony_ci -Wtype-limits 382c5f01b2fSopenharmony_ci -Wundef 383c5f01b2fSopenharmony_ci -Wuninitialized 384c5f01b2fSopenharmony_ci -Wunknown-pragmas 385c5f01b2fSopenharmony_ci -Wunreachable-code 386c5f01b2fSopenharmony_ci -Wunsafe-loop-optimizations 387c5f01b2fSopenharmony_ci -Wunused 388c5f01b2fSopenharmony_ci -Wunused-but-set-parameter 389c5f01b2fSopenharmony_ci -Wunused-but-set-variable 390c5f01b2fSopenharmony_ci -Wunused-const-variable=2 391c5f01b2fSopenharmony_ci -Wunused-function 392c5f01b2fSopenharmony_ci -Wunused-label 393c5f01b2fSopenharmony_ci -Wunused-local-typedefs 394c5f01b2fSopenharmony_ci -Wunused-macros 395c5f01b2fSopenharmony_ci -Wunused-parameter 396c5f01b2fSopenharmony_ci -Wunused-result 397c5f01b2fSopenharmony_ci -Wunused-value 398c5f01b2fSopenharmony_ci -Wunused-variable 399c5f01b2fSopenharmony_ci -Wuse-after-free=3 400c5f01b2fSopenharmony_ci -Wuseless-cast 401c5f01b2fSopenharmony_ci -Wvarargs 402c5f01b2fSopenharmony_ci -Wvariadic-macros 403c5f01b2fSopenharmony_ci -Wvector-operation-performance 404c5f01b2fSopenharmony_ci -Wvexing-parse 405c5f01b2fSopenharmony_ci -Wvirtual-inheritance 406c5f01b2fSopenharmony_ci -Wvirtual-move-assign 407c5f01b2fSopenharmony_ci -Wvla 408c5f01b2fSopenharmony_ci -Wvla-parameter 409c5f01b2fSopenharmony_ci -Wvolatile 410c5f01b2fSopenharmony_ci -Wvolatile-register-var 411c5f01b2fSopenharmony_ci -Wwrite-strings 412c5f01b2fSopenharmony_ci -Wzero-as-null-pointer-constant 413c5f01b2fSopenharmony_ci -Wzero-length-bounds 414c5f01b2fSopenharmony_ci) 415c5f01b2fSopenharmony_ci 416c5f01b2fSopenharmony_ciadd_custom_target(ci_test_gcc 417c5f01b2fSopenharmony_ci COMMAND CXX=${GCC_TOOL} CXXFLAGS="${GCC_CXXFLAGS}" ${CMAKE_COMMAND} 418c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 419c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 420c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_gcc 421c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_gcc 422c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_gcc && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 423c5f01b2fSopenharmony_ci COMMENT "Compile and test with GCC using maximal warning flags" 424c5f01b2fSopenharmony_ci) 425c5f01b2fSopenharmony_ci 426c5f01b2fSopenharmony_ciadd_custom_target(ci_test_clang 427c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} CXXFLAGS="${CLANG_CXXFLAGS}" ${CMAKE_COMMAND} 428c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 429c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 430c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang 431c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang 432c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_clang && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 433c5f01b2fSopenharmony_ci COMMENT "Compile and test with Clang using maximal warning flags" 434c5f01b2fSopenharmony_ci) 435c5f01b2fSopenharmony_ci 436c5f01b2fSopenharmony_ci############################################################################### 437c5f01b2fSopenharmony_ci# Different C++ Standards. 438c5f01b2fSopenharmony_ci############################################################################### 439c5f01b2fSopenharmony_ci 440c5f01b2fSopenharmony_ciforeach(CXX_STANDARD 11 14 17 20) 441c5f01b2fSopenharmony_ci add_custom_target(ci_test_gcc_cxx${CXX_STANDARD} 442c5f01b2fSopenharmony_ci COMMAND CXX=${GCC_TOOL} CXXFLAGS="${GCC_CXXFLAGS}" ${CMAKE_COMMAND} 443c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 444c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 445c5f01b2fSopenharmony_ci -DJSON_TestStandards=${CXX_STANDARD} 446c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} 447c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} 448c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_gcc_cxx${CXX_STANDARD} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 449c5f01b2fSopenharmony_ci COMMENT "Compile and test with GCC for C++${CXX_STANDARD}" 450c5f01b2fSopenharmony_ci ) 451c5f01b2fSopenharmony_ci 452c5f01b2fSopenharmony_ci add_custom_target(ci_test_clang_cxx${CXX_STANDARD} 453c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} CXXFLAGS="${CLANG_CXXFLAGS}" ${CMAKE_COMMAND} 454c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 455c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 456c5f01b2fSopenharmony_ci -DJSON_TestStandards=${CXX_STANDARD} 457c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} 458c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} 459c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_cxx${CXX_STANDARD} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 460c5f01b2fSopenharmony_ci COMMENT "Compile and test with Clang for C++${CXX_STANDARD}" 461c5f01b2fSopenharmony_ci ) 462c5f01b2fSopenharmony_ciendforeach() 463c5f01b2fSopenharmony_ci 464c5f01b2fSopenharmony_ci############################################################################### 465c5f01b2fSopenharmony_ci# Disable exceptions. 466c5f01b2fSopenharmony_ci############################################################################### 467c5f01b2fSopenharmony_ci 468c5f01b2fSopenharmony_ciadd_custom_target(ci_test_noexceptions 469c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 470c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 471c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DCMAKE_CXX_FLAGS=-DJSON_NOEXCEPTION -DDOCTEST_TEST_FILTER=--no-throw 472c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noexceptions 473c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noexceptions 474c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_noexceptions && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 475c5f01b2fSopenharmony_ci COMMENT "Compile and test with exceptions switched off" 476c5f01b2fSopenharmony_ci) 477c5f01b2fSopenharmony_ci 478c5f01b2fSopenharmony_ci############################################################################### 479c5f01b2fSopenharmony_ci# Disable implicit conversions. 480c5f01b2fSopenharmony_ci############################################################################### 481c5f01b2fSopenharmony_ci 482c5f01b2fSopenharmony_ciadd_custom_target(ci_test_noimplicitconversions 483c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 484c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 485c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_ImplicitConversions=OFF 486c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noimplicitconversions 487c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noimplicitconversions 488c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_noimplicitconversions && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 489c5f01b2fSopenharmony_ci COMMENT "Compile and test with implicit conversions switched off" 490c5f01b2fSopenharmony_ci) 491c5f01b2fSopenharmony_ci 492c5f01b2fSopenharmony_ci############################################################################### 493c5f01b2fSopenharmony_ci# Enable improved diagnostics. 494c5f01b2fSopenharmony_ci############################################################################### 495c5f01b2fSopenharmony_ci 496c5f01b2fSopenharmony_ciadd_custom_target(ci_test_diagnostics 497c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 498c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 499c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_Diagnostics=ON 500c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_diagnostics 501c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_diagnostics 502c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_diagnostics && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 503c5f01b2fSopenharmony_ci COMMENT "Compile and test with improved diagnostics enabled" 504c5f01b2fSopenharmony_ci) 505c5f01b2fSopenharmony_ci 506c5f01b2fSopenharmony_ci############################################################################### 507c5f01b2fSopenharmony_ci# Enable legacy discarded value comparison. 508c5f01b2fSopenharmony_ci############################################################################### 509c5f01b2fSopenharmony_ci 510c5f01b2fSopenharmony_ciadd_custom_target(ci_test_legacycomparison 511c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 512c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 513c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_LegacyDiscardedValueComparison=ON 514c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_legacycomparison 515c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_legacycomparison 516c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_legacycomparison && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 517c5f01b2fSopenharmony_ci COMMENT "Compile and test with legacy discarded value comparison enabled" 518c5f01b2fSopenharmony_ci) 519c5f01b2fSopenharmony_ci 520c5f01b2fSopenharmony_ci############################################################################### 521c5f01b2fSopenharmony_ci# Disable global UDLs. 522c5f01b2fSopenharmony_ci############################################################################### 523c5f01b2fSopenharmony_ci 524c5f01b2fSopenharmony_ciadd_custom_target(ci_test_noglobaludls 525c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 526c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 527c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_GlobalUDLs=OFF 528c5f01b2fSopenharmony_ci -DCMAKE_CXX_FLAGS=-DJSON_TEST_NO_GLOBAL_UDLS 529c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_noglobaludls 530c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_noglobaludls 531c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_noglobaludls && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 532c5f01b2fSopenharmony_ci COMMENT "Compile and test with global UDLs disabled" 533c5f01b2fSopenharmony_ci) 534c5f01b2fSopenharmony_ci 535c5f01b2fSopenharmony_ci############################################################################### 536c5f01b2fSopenharmony_ci# Coverage. 537c5f01b2fSopenharmony_ci############################################################################### 538c5f01b2fSopenharmony_ci 539c5f01b2fSopenharmony_ciadd_custom_target(ci_test_coverage 540c5f01b2fSopenharmony_ci COMMAND CXX=g++ ${CMAKE_COMMAND} 541c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CXX_FLAGS="--coverage;-fprofile-arcs;-ftest-coverage" 542c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 543c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_coverage 544c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage 545c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 546c5f01b2fSopenharmony_ci 547c5f01b2fSopenharmony_ci COMMAND CXX=g++ ${CMAKE_COMMAND} 548c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja -DCMAKE_CXX_FLAGS="-m32;--coverage;-fprofile-arcs;-ftest-coverage" 549c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_32bitTest=ONLY 550c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_coverage32 551c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_coverage32 552c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_coverage32 && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 553c5f01b2fSopenharmony_ci 554c5f01b2fSopenharmony_ci COMMAND ${LCOV_TOOL} --directory . --capture --output-file json.info --rc lcov_branch_coverage=1 555c5f01b2fSopenharmony_ci COMMAND ${LCOV_TOOL} -e json.info ${SRC_FILES} --output-file json.info.filtered --rc lcov_branch_coverage=1 556c5f01b2fSopenharmony_ci COMMAND ${CMAKE_SOURCE_DIR}/tests/thirdparty/imapdl/filterbr.py json.info.filtered > json.info.filtered.noexcept 557c5f01b2fSopenharmony_ci COMMAND genhtml --title "JSON for Modern C++" --legend --demangle-cpp --output-directory html --show-details --branch-coverage json.info.filtered.noexcept 558c5f01b2fSopenharmony_ci 559c5f01b2fSopenharmony_ci COMMENT "Compile and test with coverage" 560c5f01b2fSopenharmony_ci) 561c5f01b2fSopenharmony_ci 562c5f01b2fSopenharmony_ci############################################################################### 563c5f01b2fSopenharmony_ci# Sanitizers. 564c5f01b2fSopenharmony_ci############################################################################### 565c5f01b2fSopenharmony_ci 566c5f01b2fSopenharmony_ciset(CLANG_CXX_FLAGS_SANITIZER "-g -O1 -fsanitize=address -fsanitize=undefined -fsanitize=integer -fsanitize=nullability -fno-omit-frame-pointer -fno-sanitize-recover=all -fno-sanitize=unsigned-integer-overflow -fno-sanitize=unsigned-shift-base") 567c5f01b2fSopenharmony_ci 568c5f01b2fSopenharmony_ciadd_custom_target(ci_test_clang_sanitizer 569c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} CXXFLAGS=${CLANG_CXX_FLAGS_SANITIZER} ${CMAKE_COMMAND} 570c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 571c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 572c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_sanitizer 573c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_sanitizer 574c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_sanitizer && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 575c5f01b2fSopenharmony_ci COMMENT "Compile and test with sanitizers" 576c5f01b2fSopenharmony_ci) 577c5f01b2fSopenharmony_ci 578c5f01b2fSopenharmony_ci############################################################################### 579c5f01b2fSopenharmony_ci# Check if header is amalgamated and sources are properly indented. 580c5f01b2fSopenharmony_ci############################################################################### 581c5f01b2fSopenharmony_ci 582c5f01b2fSopenharmony_ciset(ASTYLE_FLAGS --style=allman --indent=spaces=4 --indent-modifiers --indent-switches --indent-preproc-block --indent-preproc-define --indent-col1-comments --pad-oper --pad-header --align-pointer=type --align-reference=type --add-brackets --convert-tabs --close-templates --lineend=linux --preserve-date --formatted) 583c5f01b2fSopenharmony_ci 584c5f01b2fSopenharmony_cifile(GLOB_RECURSE INDENT_FILES 585c5f01b2fSopenharmony_ci ${PROJECT_SOURCE_DIR}/include/nlohmann/*.hpp 586c5f01b2fSopenharmony_ci ${PROJECT_SOURCE_DIR}/tests/src/*.cpp 587c5f01b2fSopenharmony_ci ${PROJECT_SOURCE_DIR}/tests/src/*.hpp 588c5f01b2fSopenharmony_ci ${PROJECT_SOURCE_DIR}/tests/benchmarks/src/benchmarks.cpp 589c5f01b2fSopenharmony_ci ${PROJECT_SOURCE_DIR}/docs/examples/*.cpp 590c5f01b2fSopenharmony_ci) 591c5f01b2fSopenharmony_ci 592c5f01b2fSopenharmony_ciset(include_dir ${PROJECT_SOURCE_DIR}/single_include/nlohmann) 593c5f01b2fSopenharmony_ciset(tool_dir ${PROJECT_SOURCE_DIR}/tools/amalgamate) 594c5f01b2fSopenharmony_ciadd_custom_target(ci_test_amalgamation 595c5f01b2fSopenharmony_ci COMMAND rm -fr ${include_dir}/json.hpp~ ${include_dir}/json_fwd.hpp~ 596c5f01b2fSopenharmony_ci COMMAND cp ${include_dir}/json.hpp ${include_dir}/json.hpp~ 597c5f01b2fSopenharmony_ci COMMAND cp ${include_dir}/json_fwd.hpp ${include_dir}/json_fwd.hpp~ 598c5f01b2fSopenharmony_ci 599c5f01b2fSopenharmony_ci COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json.json -s . 600c5f01b2fSopenharmony_ci COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json_fwd.json -s . 601c5f01b2fSopenharmony_ci COMMAND ${ASTYLE_TOOL} ${ASTYLE_FLAGS} --suffix=none --quiet ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp 602c5f01b2fSopenharmony_ci 603c5f01b2fSopenharmony_ci COMMAND diff ${include_dir}/json.hpp~ ${include_dir}/json.hpp 604c5f01b2fSopenharmony_ci COMMAND diff ${include_dir}/json_fwd.hpp~ ${include_dir}/json_fwd.hpp 605c5f01b2fSopenharmony_ci 606c5f01b2fSopenharmony_ci COMMAND ${ASTYLE_TOOL} ${ASTYLE_FLAGS} ${INDENT_FILES} 607c5f01b2fSopenharmony_ci COMMAND for FILE in `find . -name '*.orig'`\; do false \; done 608c5f01b2fSopenharmony_ci 609c5f01b2fSopenharmony_ci WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 610c5f01b2fSopenharmony_ci COMMENT "Check amalgamation and indentation" 611c5f01b2fSopenharmony_ci) 612c5f01b2fSopenharmony_ci 613c5f01b2fSopenharmony_ci############################################################################### 614c5f01b2fSopenharmony_ci# Build and test using the amalgamated header 615c5f01b2fSopenharmony_ci############################################################################### 616c5f01b2fSopenharmony_ci 617c5f01b2fSopenharmony_ciadd_custom_target(ci_test_single_header 618c5f01b2fSopenharmony_ci COMMAND CXX=${GCC_TOOL} CXXFLAGS="${GCC_CXXFLAGS}" ${CMAKE_COMMAND} 619c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 620c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_MultipleHeaders=OFF -DJSON_FastTests=ON 621c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_single_header 622c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_single_header 623c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_single_header && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 624c5f01b2fSopenharmony_ci COMMENT "Compile and test single-header version" 625c5f01b2fSopenharmony_ci) 626c5f01b2fSopenharmony_ci 627c5f01b2fSopenharmony_ci############################################################################### 628c5f01b2fSopenharmony_ci# Valgrind. 629c5f01b2fSopenharmony_ci############################################################################### 630c5f01b2fSopenharmony_ci 631c5f01b2fSopenharmony_ciadd_custom_target(ci_test_valgrind 632c5f01b2fSopenharmony_ci COMMAND CXX=${GCC_TOOL} ${CMAKE_COMMAND} 633c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 634c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_Valgrind=ON 635c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_valgrind 636c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_valgrind 637c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_valgrind && ${CMAKE_CTEST_COMMAND} -L valgrind --parallel ${N} --output-on-failure 638c5f01b2fSopenharmony_ci COMMENT "Compile and test with Valgrind" 639c5f01b2fSopenharmony_ci) 640c5f01b2fSopenharmony_ci 641c5f01b2fSopenharmony_ci############################################################################### 642c5f01b2fSopenharmony_ci# Check code with Clang Static Analyzer. 643c5f01b2fSopenharmony_ci############################################################################### 644c5f01b2fSopenharmony_ci 645c5f01b2fSopenharmony_ciset(CLANG_ANALYZER_CHECKS "fuchsia.HandleChecker,nullability.NullableDereferenced,nullability.NullablePassedToNonnull,nullability.NullableReturnedFromNonnull,optin.cplusplus.UninitializedObject,optin.cplusplus.VirtualCall,optin.mpi.MPI-Checker,optin.osx.OSObjectCStyleCast,optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,optin.osx.cocoa.localizability.NonLocalizedStringChecker,optin.performance.GCDAntipattern,optin.performance.Padding,optin.portability.UnixAPI,security.FloatLoopCounter,security.insecureAPI.DeprecatedOrUnsafeBufferHandling,security.insecureAPI.bcmp,security.insecureAPI.bcopy,security.insecureAPI.bzero,security.insecureAPI.rand,security.insecureAPI.strcpy,valist.CopyToSelf,valist.Uninitialized,valist.Unterminated,webkit.NoUncountedMemberChecker,webkit.RefCntblBaseVirtualDtor,core.CallAndMessage,core.DivideZero,core.NonNullParamChecker,core.NullDereference,core.StackAddressEscape,core.UndefinedBinaryOperatorResult,core.VLASize,core.uninitialized.ArraySubscript,core.uninitialized.Assign,core.uninitialized.Branch,core.uninitialized.CapturedBlockVariable,core.uninitialized.UndefReturn,cplusplus.InnerPointer,cplusplus.Move,cplusplus.NewDelete,cplusplus.NewDeleteLeaks,cplusplus.PlacementNew,cplusplus.PureVirtualCall,deadcode.DeadStores,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull,osx.API,osx.MIG,osx.NumberObjectConversion,osx.OSObjectRetainCount,osx.ObjCProperty,osx.SecKeychainAPI,osx.cocoa.AtSync,osx.cocoa.AutoreleaseWrite,osx.cocoa.ClassRelease,osx.cocoa.Dealloc,osx.cocoa.IncompatibleMethodTypes,osx.cocoa.Loops,osx.cocoa.MissingSuperCall,osx.cocoa.NSAutoreleasePool,osx.cocoa.NSError,osx.cocoa.NilArg,osx.cocoa.NonNilReturnValue,osx.cocoa.ObjCGenerics,osx.cocoa.RetainCount,osx.cocoa.RunLoopAutoreleaseLeak,osx.cocoa.SelfInit,osx.cocoa.SuperDealloc,osx.cocoa.UnusedIvars,osx.cocoa.VariadicMethodTypes,osx.coreFoundation.CFError,osx.coreFoundation.CFNumber,osx.coreFoundation.CFRetainRelease,osx.coreFoundation.containers.OutOfBounds,osx.coreFoundation.containers.PointerSizedValues,security.insecureAPI.UncheckedReturn,security.insecureAPI.decodeValueOfObjCType,security.insecureAPI.getpw,security.insecureAPI.gets,security.insecureAPI.mkstemp,security.insecureAPI.mktemp,security.insecureAPI.vfork,unix.API,unix.Malloc,unix.MallocSizeof,unix.MismatchedDeallocator,unix.Vfork,unix.cstring.BadSizeArg,unix.cstring.NullArg") 646c5f01b2fSopenharmony_ci 647c5f01b2fSopenharmony_ciadd_custom_target(ci_clang_analyze 648c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 649c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 650c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 651c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_analyze 652c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_clang_analyze && ${SCAN_BUILD_TOOL} -enable-checker ${CLANG_ANALYZER_CHECKS} --use-c++=${CLANG_TOOL} -analyze-headers -o ${PROJECT_BINARY_DIR}/report ninja 653c5f01b2fSopenharmony_ci COMMENT "Check code with Clang Analyzer" 654c5f01b2fSopenharmony_ci) 655c5f01b2fSopenharmony_ci 656c5f01b2fSopenharmony_ci############################################################################### 657c5f01b2fSopenharmony_ci# Check code with Cppcheck. 658c5f01b2fSopenharmony_ci############################################################################### 659c5f01b2fSopenharmony_ci 660c5f01b2fSopenharmony_ciadd_custom_target(ci_cppcheck 661c5f01b2fSopenharmony_ci COMMAND ${CPPCHECK_TOOL} --enable=warning --suppress=missingReturn --inline-suppr --inconclusive --force --std=c++11 ${PROJECT_SOURCE_DIR}/single_include/nlohmann/json.hpp --error-exitcode=1 662c5f01b2fSopenharmony_ci COMMENT "Check code with Cppcheck" 663c5f01b2fSopenharmony_ci) 664c5f01b2fSopenharmony_ci 665c5f01b2fSopenharmony_ci############################################################################### 666c5f01b2fSopenharmony_ci# Check code with cpplint. 667c5f01b2fSopenharmony_ci############################################################################### 668c5f01b2fSopenharmony_ci 669c5f01b2fSopenharmony_ciadd_custom_target(ci_cpplint 670c5f01b2fSopenharmony_ci COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/cpplint/cpplint.py --filter=-whitespace,-legal,-runtime/references,-runtime/explicit,-runtime/indentation_namespace,-readability/casting,-readability/nolint --quiet --recursive ${SRC_FILES} 671c5f01b2fSopenharmony_ci COMMENT "Check code with cpplint" 672c5f01b2fSopenharmony_ci) 673c5f01b2fSopenharmony_ci 674c5f01b2fSopenharmony_ci############################################################################### 675c5f01b2fSopenharmony_ci# Check code with OCLint. 676c5f01b2fSopenharmony_ci############################################################################### 677c5f01b2fSopenharmony_ci 678c5f01b2fSopenharmony_cifile(COPY ${PROJECT_SOURCE_DIR}/single_include/nlohmann/json.hpp DESTINATION ${PROJECT_BINARY_DIR}/src_single) 679c5f01b2fSopenharmony_cifile(RENAME ${PROJECT_BINARY_DIR}/src_single/json.hpp ${PROJECT_BINARY_DIR}/src_single/all.cpp) 680c5f01b2fSopenharmony_cifile(APPEND "${PROJECT_BINARY_DIR}/src_single/all.cpp" "\n\nint main()\n{}\n") 681c5f01b2fSopenharmony_ci 682c5f01b2fSopenharmony_ciadd_executable(single_all ${PROJECT_BINARY_DIR}/src_single/all.cpp) 683c5f01b2fSopenharmony_citarget_compile_features(single_all PRIVATE cxx_std_11) 684c5f01b2fSopenharmony_ci 685c5f01b2fSopenharmony_ciadd_custom_target(ci_oclint 686c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 687c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug 688c5f01b2fSopenharmony_ci -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 689c5f01b2fSopenharmony_ci -DJSON_BuildTests=OFF -DJSON_CI=ON 690c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_oclint 691c5f01b2fSopenharmony_ci COMMAND ${OCLINT_TOOL} -i ${PROJECT_BINARY_DIR}/build_oclint/src_single/all.cpp -p ${PROJECT_BINARY_DIR}/build_oclint -- 692c5f01b2fSopenharmony_ci -report-type html -enable-global-analysis --max-priority-1=0 --max-priority-2=1000 --max-priority-3=2000 693c5f01b2fSopenharmony_ci --disable-rule=MultipleUnaryOperator 694c5f01b2fSopenharmony_ci --disable-rule=DoubleNegative 695c5f01b2fSopenharmony_ci --disable-rule=ShortVariableName 696c5f01b2fSopenharmony_ci --disable-rule=GotoStatement 697c5f01b2fSopenharmony_ci --disable-rule=LongLine 698c5f01b2fSopenharmony_ci -o ${PROJECT_BINARY_DIR}/build_oclint/oclint_report.html 699c5f01b2fSopenharmony_ci COMMENT "Check code with OCLint" 700c5f01b2fSopenharmony_ci) 701c5f01b2fSopenharmony_ci 702c5f01b2fSopenharmony_ci############################################################################### 703c5f01b2fSopenharmony_ci# Check code with Clang-Tidy. 704c5f01b2fSopenharmony_ci############################################################################### 705c5f01b2fSopenharmony_ci 706c5f01b2fSopenharmony_ciadd_custom_target(ci_clang_tidy 707c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 708c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 709c5f01b2fSopenharmony_ci -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY=${CLANG_TIDY_TOOL} 710c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 711c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_clang_tidy 712c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_clang_tidy 713c5f01b2fSopenharmony_ci COMMENT "Check code with Clang-Tidy" 714c5f01b2fSopenharmony_ci) 715c5f01b2fSopenharmony_ci 716c5f01b2fSopenharmony_ci############################################################################### 717c5f01b2fSopenharmony_ci# Check code with PVS-Studio Analyzer <https://www.viva64.com/en/pvs-studio/>. 718c5f01b2fSopenharmony_ci############################################################################### 719c5f01b2fSopenharmony_ci 720c5f01b2fSopenharmony_ciadd_custom_target(ci_pvs_studio 721c5f01b2fSopenharmony_ci COMMAND CXX=${CLANG_TOOL} ${CMAKE_COMMAND} 722c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug 723c5f01b2fSopenharmony_ci -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 724c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON 725c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_pvs_studio 726c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_pvs_studio && ${PVS_STUDIO_ANALYZER_TOOL} analyze -j 10 727c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_pvs_studio && ${PLOG_CONVERTER_TOOL} -a'GA:1,2;64:1;CS' -t fullhtml PVS-Studio.log -o pvs 728c5f01b2fSopenharmony_ci COMMENT "Check code with PVS Studio" 729c5f01b2fSopenharmony_ci) 730c5f01b2fSopenharmony_ci 731c5f01b2fSopenharmony_ci############################################################################### 732c5f01b2fSopenharmony_ci# Check code with Infer <https://fbinfer.com> static analyzer. 733c5f01b2fSopenharmony_ci############################################################################### 734c5f01b2fSopenharmony_ci 735c5f01b2fSopenharmony_ciadd_custom_target(ci_infer 736c5f01b2fSopenharmony_ci COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_infer 737c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_infer && ${INFER_TOOL} compile -- ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${PROJECT_SOURCE_DIR} -DJSON_BuildTests=ON 738c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_infer && ${INFER_TOOL} run -- make 739c5f01b2fSopenharmony_ci COMMENT "Check code with Infer" 740c5f01b2fSopenharmony_ci) 741c5f01b2fSopenharmony_ci 742c5f01b2fSopenharmony_ci############################################################################### 743c5f01b2fSopenharmony_ci# Run test suite with previously downloaded test data. 744c5f01b2fSopenharmony_ci############################################################################### 745c5f01b2fSopenharmony_ci 746c5f01b2fSopenharmony_ciadd_custom_target(ci_offline_testdata 747c5f01b2fSopenharmony_ci COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data 748c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data && ${GIT_TOOL} clone -c advice.detachedHead=false --branch v3.1.0 https://github.com/nlohmann/json_test_data.git --quiet --depth 1 749c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 750c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 751c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestDataDirectory=${PROJECT_BINARY_DIR}/build_offline_testdata/test_data/json_test_data 752c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_offline_testdata 753c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_offline_testdata 754c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata && ${CMAKE_CTEST_COMMAND} --parallel ${N} --output-on-failure 755c5f01b2fSopenharmony_ci COMMENT "Check code with previously downloaded test data" 756c5f01b2fSopenharmony_ci) 757c5f01b2fSopenharmony_ci 758c5f01b2fSopenharmony_ci############################################################################### 759c5f01b2fSopenharmony_ci# Run test suite when project was not checked out from Git 760c5f01b2fSopenharmony_ci############################################################################### 761c5f01b2fSopenharmony_ci 762c5f01b2fSopenharmony_ciadd_custom_target(ci_non_git_tests 763c5f01b2fSopenharmony_ci COMMAND git config --global --add safe.directory ${PROJECT_SOURCE_DIR} 764c5f01b2fSopenharmony_ci COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_non_git_tests/sources 765c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_SOURCE_DIR} && for FILE in `${GIT_TOOL} ls-tree --name-only HEAD`\; do cp -r $$FILE ${PROJECT_BINARY_DIR}/build_non_git_tests/sources \; done 766c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 767c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 768c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 769c5f01b2fSopenharmony_ci -S${PROJECT_BINARY_DIR}/build_non_git_tests/sources -B${PROJECT_BINARY_DIR}/build_non_git_tests 770c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_non_git_tests 771c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_non_git_tests && ${CMAKE_CTEST_COMMAND} --parallel ${N} -LE git_required --output-on-failure 772c5f01b2fSopenharmony_ci COMMENT "Check code when project was not checked out from Git" 773c5f01b2fSopenharmony_ci) 774c5f01b2fSopenharmony_ci 775c5f01b2fSopenharmony_ci############################################################################### 776c5f01b2fSopenharmony_ci# Run test suite and exclude tests that change installed files 777c5f01b2fSopenharmony_ci############################################################################### 778c5f01b2fSopenharmony_ci 779c5f01b2fSopenharmony_ciadd_custom_target(ci_reproducible_tests 780c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 781c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 782c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 783c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_reproducible_tests 784c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_reproducible_tests 785c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_reproducible_tests && ${CMAKE_CTEST_COMMAND} --parallel ${N} -LE not_reproducible --output-on-failure 786c5f01b2fSopenharmony_ci COMMENT "Check code and exclude tests that change installed files" 787c5f01b2fSopenharmony_ci) 788c5f01b2fSopenharmony_ci 789c5f01b2fSopenharmony_ci############################################################################### 790c5f01b2fSopenharmony_ci# Check if every header in the include folder includes sufficient headers to 791c5f01b2fSopenharmony_ci# be compiled individually. 792c5f01b2fSopenharmony_ci############################################################################### 793c5f01b2fSopenharmony_ci 794c5f01b2fSopenharmony_ciset(iwyu_path_and_options ${IWYU_TOOL} -Xiwyu --max_line_length=300) 795c5f01b2fSopenharmony_ci 796c5f01b2fSopenharmony_ciforeach(SRC_FILE ${SRC_FILES}) 797c5f01b2fSopenharmony_ci # get relative path of the header file 798c5f01b2fSopenharmony_ci file(RELATIVE_PATH RELATIVE_SRC_FILE "${PROJECT_SOURCE_DIR}/include/nlohmann" "${SRC_FILE}") 799c5f01b2fSopenharmony_ci # replace slashes and strip suffix 800c5f01b2fSopenharmony_ci string(REPLACE "/" "_" RELATIVE_SRC_FILE "${RELATIVE_SRC_FILE}") 801c5f01b2fSopenharmony_ci string(REPLACE ".hpp" "" RELATIVE_SRC_FILE "${RELATIVE_SRC_FILE}") 802c5f01b2fSopenharmony_ci # create code file 803c5f01b2fSopenharmony_ci file(WRITE "${PROJECT_BINARY_DIR}/src_single/${RELATIVE_SRC_FILE}.cpp" "#include \"${SRC_FILE}\" // IWYU pragma: keep\n\nint main()\n{}\n") 804c5f01b2fSopenharmony_ci # create executable 805c5f01b2fSopenharmony_ci add_executable(single_${RELATIVE_SRC_FILE} EXCLUDE_FROM_ALL ${PROJECT_BINARY_DIR}/src_single/${RELATIVE_SRC_FILE}.cpp) 806c5f01b2fSopenharmony_ci target_include_directories(single_${RELATIVE_SRC_FILE} PRIVATE ${PROJECT_SOURCE_DIR}/include) 807c5f01b2fSopenharmony_ci target_compile_features(single_${RELATIVE_SRC_FILE} PRIVATE cxx_std_11) 808c5f01b2fSopenharmony_ci set_property(TARGET single_${RELATIVE_SRC_FILE} PROPERTY CXX_INCLUDE_WHAT_YOU_USE "${iwyu_path_and_options}") 809c5f01b2fSopenharmony_ci # remember binary for ci_single_binaries target 810c5f01b2fSopenharmony_ci list(APPEND single_binaries single_${RELATIVE_SRC_FILE}) 811c5f01b2fSopenharmony_ciendforeach() 812c5f01b2fSopenharmony_ci 813c5f01b2fSopenharmony_ciadd_custom_target(ci_single_binaries 814c5f01b2fSopenharmony_ci DEPENDS ${single_binaries} 815c5f01b2fSopenharmony_ci COMMENT "Check if headers are self-contained" 816c5f01b2fSopenharmony_ci) 817c5f01b2fSopenharmony_ci 818c5f01b2fSopenharmony_ci############################################################################### 819c5f01b2fSopenharmony_ci# Benchmarks 820c5f01b2fSopenharmony_ci############################################################################### 821c5f01b2fSopenharmony_ci 822c5f01b2fSopenharmony_ciadd_custom_target(ci_benchmarks 823c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 824c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Release -GNinja 825c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR}/benchmarks -B${PROJECT_BINARY_DIR}/build_benchmarks 826c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_benchmarks --target json_benchmarks 827c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_benchmarks && ./json_benchmarks 828c5f01b2fSopenharmony_ci COMMENT "Run benchmarks" 829c5f01b2fSopenharmony_ci) 830c5f01b2fSopenharmony_ci 831c5f01b2fSopenharmony_ci############################################################################### 832c5f01b2fSopenharmony_ci# CMake flags 833c5f01b2fSopenharmony_ci############################################################################### 834c5f01b2fSopenharmony_ci 835c5f01b2fSopenharmony_cifunction(ci_get_cmake version var) 836c5f01b2fSopenharmony_ci if (APPLE) 837c5f01b2fSopenharmony_ci set(${var} ${PROJECT_BINARY_DIR}/cmake-${version}-Darwin64/CMake.app/Contents/bin/cmake) 838c5f01b2fSopenharmony_ci add_custom_command( 839c5f01b2fSopenharmony_ci OUTPUT ${${var}} 840c5f01b2fSopenharmony_ci COMMAND wget -nc https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}-Darwin64.tar.gz 841c5f01b2fSopenharmony_ci COMMAND tar xfz cmake-${version}-Darwin64.tar.gz 842c5f01b2fSopenharmony_ci COMMAND rm cmake-${version}-Darwin64.tar.gz 843c5f01b2fSopenharmony_ci WORKING_DIRECTORY ${PROJECT_BINARY_DIR} 844c5f01b2fSopenharmony_ci COMMENT "Download CMake ${version}" 845c5f01b2fSopenharmony_ci ) 846c5f01b2fSopenharmony_ci else() 847c5f01b2fSopenharmony_ci set(${var} ${PROJECT_BINARY_DIR}/cmake-${version}-Linux-x86_64/bin/cmake) 848c5f01b2fSopenharmony_ci add_custom_command( 849c5f01b2fSopenharmony_ci OUTPUT ${${var}} 850c5f01b2fSopenharmony_ci COMMAND wget -nc https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}-Linux-x86_64.tar.gz 851c5f01b2fSopenharmony_ci COMMAND tar xfz cmake-${version}-Linux-x86_64.tar.gz 852c5f01b2fSopenharmony_ci COMMAND rm cmake-${version}-Linux-x86_64.tar.gz 853c5f01b2fSopenharmony_ci WORKING_DIRECTORY ${PROJECT_BINARY_DIR} 854c5f01b2fSopenharmony_ci COMMENT "Download CMake ${version}" 855c5f01b2fSopenharmony_ci ) 856c5f01b2fSopenharmony_ci endif() 857c5f01b2fSopenharmony_ci set(${var} ${${var}} PARENT_SCOPE) 858c5f01b2fSopenharmony_ciendfunction() 859c5f01b2fSopenharmony_ci 860c5f01b2fSopenharmony_cici_get_cmake(3.1.0 CMAKE_3_1_0_BINARY) 861c5f01b2fSopenharmony_cici_get_cmake(3.13.0 CMAKE_3_13_0_BINARY) 862c5f01b2fSopenharmony_ci 863c5f01b2fSopenharmony_ciset(JSON_CMAKE_FLAGS_3_1_0 JSON_Diagnostics JSON_GlobalUDLs JSON_ImplicitConversions JSON_DisableEnumSerialization 864c5f01b2fSopenharmony_ci JSON_LegacyDiscardedValueComparison JSON_Install JSON_MultipleHeaders JSON_SystemInclude JSON_Valgrind) 865c5f01b2fSopenharmony_ciset(JSON_CMAKE_FLAGS_3_13_0 JSON_BuildTests) 866c5f01b2fSopenharmony_ci 867c5f01b2fSopenharmony_cifunction(ci_add_cmake_flags_targets flag min_version) 868c5f01b2fSopenharmony_ci string(TOLOWER "ci_cmake_flag_${flag}" flag_target) 869c5f01b2fSopenharmony_ci string(REPLACE . _ min_version_var ${min_version}) 870c5f01b2fSopenharmony_ci set(cmake_binary ${CMAKE_${min_version_var}_BINARY}) 871c5f01b2fSopenharmony_ci add_custom_target(${flag_target} 872c5f01b2fSopenharmony_ci COMMENT "Check CMake flag ${flag} (CMake ${CMAKE_VERSION})" 873c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 874c5f01b2fSopenharmony_ci -Werror=dev 875c5f01b2fSopenharmony_ci -D${flag}=ON 876c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_${flag_target} 877c5f01b2fSopenharmony_ci ) 878c5f01b2fSopenharmony_ci add_custom_target(${flag_target}_${min_version_var} 879c5f01b2fSopenharmony_ci COMMENT "Check CMake flag ${JSON_CMAKE_FLAG} (CMake ${min_version})" 880c5f01b2fSopenharmony_ci COMMAND mkdir -pv ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var} 881c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var} 882c5f01b2fSopenharmony_ci && ${cmake_binary} -Werror=dev ${PROJECT_SOURCE_DIR} -D${flag}=ON 883c5f01b2fSopenharmony_ci DEPENDS ${cmake_binary} 884c5f01b2fSopenharmony_ci ) 885c5f01b2fSopenharmony_ci list(APPEND JSON_CMAKE_FLAG_TARGETS ${JSON_CMAKE_FLAG_TARGET} ${flag_target}_${min_version_var}) 886c5f01b2fSopenharmony_ci list(APPEND JSON_CMAKE_FLAG_BUILD_DIRS ${PROJECT_BINARY_DIR}/build_${flag_target} ${PROJECT_BINARY_DIR}/build_${flag_target}_${min_version_var}) 887c5f01b2fSopenharmony_ci set(JSON_CMAKE_FLAG_TARGETS ${JSON_CMAKE_FLAG_TARGETS} PARENT_SCOPE) 888c5f01b2fSopenharmony_ci set(JSON_CMAKE_FLAG_BUILD_DIRS ${JSON_CMAKE_FLAG_BUILD_DIRS} PARENT_SCOPE) 889c5f01b2fSopenharmony_ciendfunction() 890c5f01b2fSopenharmony_ci 891c5f01b2fSopenharmony_ciforeach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_1_0}) 892c5f01b2fSopenharmony_ci ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.1.0) 893c5f01b2fSopenharmony_ciendforeach() 894c5f01b2fSopenharmony_ci 895c5f01b2fSopenharmony_ciforeach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_13_0}) 896c5f01b2fSopenharmony_ci ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.13.0) 897c5f01b2fSopenharmony_ciendforeach() 898c5f01b2fSopenharmony_ci 899c5f01b2fSopenharmony_ciadd_custom_target(ci_cmake_flags 900c5f01b2fSopenharmony_ci DEPENDS ${JSON_CMAKE_FLAG_TARGETS} 901c5f01b2fSopenharmony_ci COMMENT "Check CMake flags" 902c5f01b2fSopenharmony_ci) 903c5f01b2fSopenharmony_ci 904c5f01b2fSopenharmony_ci############################################################################### 905c5f01b2fSopenharmony_ci# Use more installed compilers. 906c5f01b2fSopenharmony_ci############################################################################### 907c5f01b2fSopenharmony_ci 908c5f01b2fSopenharmony_ciforeach(COMPILER g++-4.8 g++-4.9 g++-5 g++-6 g++-7 g++-8 g++-9 g++-10 g++-11 clang++-3.5 clang++-3.6 clang++-3.7 clang++-3.8 clang++-3.9 clang++-4.0 clang++-5.0 clang++-6.0 clang++-7 clang++-8 clang++-9 clang++-10 clang++-11 clang++-12 clang++-13 clang++-14) 909c5f01b2fSopenharmony_ci find_program(COMPILER_TOOL NAMES ${COMPILER}) 910c5f01b2fSopenharmony_ci if (COMPILER_TOOL) 911c5f01b2fSopenharmony_ci if ("${COMPILER}" STREQUAL "clang++-9") 912c5f01b2fSopenharmony_ci # fix for https://github.com/nlohmann/json/pull/3101#issuecomment-998788786 / https://stackoverflow.com/a/64051725/266378 913c5f01b2fSopenharmony_ci set(ADDITIONAL_FLAGS "-DCMAKE_CXX_FLAGS=--gcc-toolchain=/root/gcc/9") 914c5f01b2fSopenharmony_ci else() 915c5f01b2fSopenharmony_ci unset(ADDITIONAL_FLAGS) 916c5f01b2fSopenharmony_ci endif() 917c5f01b2fSopenharmony_ci 918c5f01b2fSopenharmony_ci add_custom_target(ci_test_compiler_${COMPILER} 919c5f01b2fSopenharmony_ci COMMAND CXX=${COMPILER} ${CMAKE_COMMAND} 920c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 921c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 922c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} 923c5f01b2fSopenharmony_ci ${ADDITIONAL_FLAGS} 924c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} 925c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_compiler_${COMPILER} && ${CMAKE_CTEST_COMMAND} --parallel ${N} --exclude-regex "test-unicode" --output-on-failure 926c5f01b2fSopenharmony_ci COMMENT "Compile and test with ${COMPILER}" 927c5f01b2fSopenharmony_ci ) 928c5f01b2fSopenharmony_ci endif() 929c5f01b2fSopenharmony_ci unset(COMPILER_TOOL CACHE) 930c5f01b2fSopenharmony_ciendforeach() 931c5f01b2fSopenharmony_ci 932c5f01b2fSopenharmony_ci############################################################################### 933c5f01b2fSopenharmony_ci# CUDA example 934c5f01b2fSopenharmony_ci############################################################################### 935c5f01b2fSopenharmony_ci 936c5f01b2fSopenharmony_ciadd_custom_target(ci_cuda_example 937c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 938c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 939c5f01b2fSopenharmony_ci -DCMAKE_CUDA_HOST_COMPILER=g++-8 940c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR}/tests/cuda_example -B${PROJECT_BINARY_DIR}/build_cuda_example 941c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_cuda_example 942c5f01b2fSopenharmony_ci) 943c5f01b2fSopenharmony_ci 944c5f01b2fSopenharmony_ci############################################################################### 945c5f01b2fSopenharmony_ci# Intel C++ Compiler 946c5f01b2fSopenharmony_ci############################################################################### 947c5f01b2fSopenharmony_ci 948c5f01b2fSopenharmony_ciadd_custom_target(ci_icpc 949c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} 950c5f01b2fSopenharmony_ci -DCMAKE_BUILD_TYPE=Debug -GNinja 951c5f01b2fSopenharmony_ci -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc 952c5f01b2fSopenharmony_ci -DJSON_BuildTests=ON -DJSON_FastTests=ON 953c5f01b2fSopenharmony_ci -S${PROJECT_SOURCE_DIR} -B${PROJECT_BINARY_DIR}/build_icpc 954c5f01b2fSopenharmony_ci COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_icpc 955c5f01b2fSopenharmony_ci COMMAND cd ${PROJECT_BINARY_DIR}/build_icpc && ${CMAKE_CTEST_COMMAND} --parallel ${N} --exclude-regex "test-unicode" --output-on-failure 956c5f01b2fSopenharmony_ci COMMENT "Compile and test with ICPC" 957c5f01b2fSopenharmony_ci) 958c5f01b2fSopenharmony_ci 959c5f01b2fSopenharmony_ci############################################################################### 960c5f01b2fSopenharmony_ci# test documentation 961c5f01b2fSopenharmony_ci############################################################################### 962c5f01b2fSopenharmony_ci 963c5f01b2fSopenharmony_ciadd_custom_target(ci_test_examples 964c5f01b2fSopenharmony_ci COMMAND make CXX="${GCC_TOOL}" check_output_portable -j8 965c5f01b2fSopenharmony_ci WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs 966c5f01b2fSopenharmony_ci COMMENT "Check that all examples compile and create the desired output" 967c5f01b2fSopenharmony_ci) 968c5f01b2fSopenharmony_ci 969c5f01b2fSopenharmony_ciadd_custom_target(ci_test_api_documentation 970c5f01b2fSopenharmony_ci COMMAND ${Python3_EXECUTABLE} scripts/check_structure.py 971c5f01b2fSopenharmony_ci WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs/mkdocs 972c5f01b2fSopenharmony_ci COMMENT "Lint the API documentation" 973c5f01b2fSopenharmony_ci) 974c5f01b2fSopenharmony_ci 975c5f01b2fSopenharmony_ci############################################################################### 976c5f01b2fSopenharmony_ci# Clean up all generated files. 977c5f01b2fSopenharmony_ci############################################################################### 978c5f01b2fSopenharmony_ci 979c5f01b2fSopenharmony_ciadd_custom_target(ci_clean 980c5f01b2fSopenharmony_ci COMMAND rm -fr ${PROJECT_BINARY_DIR}/build_* cmake-3.1.0-Darwin64 ${JSON_CMAKE_FLAG_BUILD_DIRS} ${single_binaries} 981c5f01b2fSopenharmony_ci COMMENT "Clean generated directories" 982c5f01b2fSopenharmony_ci) 983