From cf77a10555143a3ad30e744901de6eeae9fc7dea Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Thu, 29 Jan 2026 16:44:04 +0000 Subject: [PATCH] style: Adopt cmake-format from xrpld (#2938) --- .cmake-format.yaml | 21 +- CMakeLists.txt | 35 ++- benchmarks/CMakeLists.txt | 22 +- cmake/Ccache.cmake | 4 +- cmake/CheckCompiler.cmake | 66 ++-- cmake/ClangTidy.cmake | 49 ++- cmake/ClioVersion.cmake | 42 ++- cmake/CodeCoverage.cmake | 377 +++++++++++------------ cmake/Docs.cmake | 12 +- cmake/Linker.cmake | 8 +- cmake/Settings.cmake | 67 ++--- cmake/SourceLocation.cmake | 4 +- cmake/deps/libbacktrace.cmake | 16 +- cmake/deps/spdlog.cmake | 2 +- src/app/CMakeLists.txt | 17 +- src/cluster/CMakeLists.txt | 5 +- src/data/CMakeLists.txt | 38 ++- src/etl/CMakeLists.txt | 52 ++-- src/feed/CMakeLists.txt | 6 +- src/main/CMakeLists.txt | 18 +- src/migration/CMakeLists.txt | 6 +- src/rpc/CMakeLists.txt | 98 +++--- src/util/CMakeLists.txt | 107 ++++--- src/util/build/CMakeLists.txt | 5 +- src/web/CMakeLists.txt | 36 ++- tests/CMakeLists.txt | 16 +- tests/common/CMakeLists.txt | 26 +- tests/integration/CMakeLists.txt | 30 +- tests/unit/CMakeLists.txt | 497 +++++++++++++++---------------- tools/snapshot/CMakeLists.txt | 60 ++-- 30 files changed, 836 insertions(+), 906 deletions(-) diff --git a/.cmake-format.yaml b/.cmake-format.yaml index 50a707fb0..1c4d6684e 100644 --- a/.cmake-format.yaml +++ b/.cmake-format.yaml @@ -2,15 +2,6 @@ _help_parse: Options affecting listfile parsing parse: _help_additional_commands: - Specify structure for custom cmake functions - additional_commands: - foo: - flags: - - BAR - - BAZ - kwargs: - HEADERS: "*" - SOURCES: "*" - DEPENDS: "*" _help_override_spec: - Override configurations per-command where available override_spec: {} @@ -30,7 +21,7 @@ format: line_width: 120 _help_tab_size: - How many spaces to tab for indent - tab_size: 2 + tab_size: 4 _help_use_tabchars: - If true, lines are indented using tab characters (utf-8 - 0x09) instead of space characters (utf-8 0x20). @@ -70,19 +61,19 @@ format: _help_dangle_parens: - If a statement is wrapped to more than one line, than dangle - the closing parenthesis on its own line. - dangle_parens: true + dangle_parens: false _help_dangle_align: - If the trailing parenthesis must be 'dangled' on its on - "line, then align it to this reference: `prefix`: the start" - - "of the statement, `prefix-indent`: the start of the" - - "statement, plus one indentation level, `child`: align to" + - "of the statement, `prefix-indent`: the start of the" + - "statement, plus one indentation level, `child`: align to" - the column of the arguments dangle_align: prefix _help_min_prefix_chars: - If the statement spelling length (including space and - parenthesis) is smaller than this amount, then force reject - nested layouts. - min_prefix_chars: 4 + min_prefix_chars: 18 _help_max_prefix_chars: - If the statement spelling length (including space and - parenthesis) is larger than the tab width by more than this @@ -127,7 +118,7 @@ _help_markup: Options affecting comment reflow and formatting. markup: _help_bullet_char: - What character to use for bulleted lists - bullet_char: "*" + bullet_char: "-" _help_enum_char: - What character to use as punctuation after numerals in an - enumerated list diff --git a/CMakeLists.txt b/CMakeLists.txt index eabf070be..ceb42ea1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,7 @@ cmake_minimum_required(VERSION 3.20) project(clio VERSION ${CLIO_VERSION} HOMEPAGE_URL "https://github.com/XRPLF/clio" - DESCRIPTION "An XRP Ledger API Server" -) + DESCRIPTION "An XRP Ledger API Server") # =========================== Options ====================================== # option(verbose "Verbose build" FALSE) @@ -36,7 +35,7 @@ target_compile_features(clio_options INTERFACE cxx_std_23) # Clio needs c++23 bu target_include_directories(clio_options INTERFACE ${CMAKE_SOURCE_DIR}/src) if (verbose) - set(CMAKE_VERBOSE_MAKEFILE TRUE) + set(CMAKE_VERBOSE_MAKEFILE TRUE) endif () # Clio tweaks and checks @@ -58,36 +57,36 @@ add_subdirectory(src) add_subdirectory(tests) if (benchmark) - add_subdirectory(benchmarks) + add_subdirectory(benchmarks) endif () # Enable selected sanitizer if enabled via `san` if (san) - set(SUPPORTED_SANITIZERS "address" "thread" "memory" "undefined") - if (NOT san IN_LIST SUPPORTED_SANITIZERS) - message(FATAL_ERROR "Error: Unsupported sanitizer '${san}'. Supported values are: ${SUPPORTED_SANITIZERS}.") - endif () + set(SUPPORTED_SANITIZERS "address" "thread" "memory" "undefined") + if (NOT san IN_LIST SUPPORTED_SANITIZERS) + message(FATAL_ERROR "Error: Unsupported sanitizer '${san}'. Supported values are: ${SUPPORTED_SANITIZERS}.") + endif () - # Sanitizers recommend minimum of -O1 for reasonable performance so we enable it for debug builds - set(SAN_OPTIMIZATION_FLAG "") - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(SAN_OPTIMIZATION_FLAG -O1) - endif () - target_compile_options(clio_options INTERFACE ${SAN_OPTIMIZATION_FLAG} ${SAN_FLAG} -fno-omit-frame-pointer) + # Sanitizers recommend minimum of -O1 for reasonable performance so we enable it for debug builds + set(SAN_OPTIMIZATION_FLAG "") + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(SAN_OPTIMIZATION_FLAG -O1) + endif () + target_compile_options(clio_options INTERFACE ${SAN_OPTIMIZATION_FLAG} ${SAN_FLAG} -fno-omit-frame-pointer) - target_link_libraries(clio_options INTERFACE ${SAN_FLAG} ${SAN_LIB}) + target_link_libraries(clio_options INTERFACE ${SAN_FLAG} ${SAN_LIB}) endif () # Generate `docs` target for doxygen documentation if enabled Note: use `make docs` to generate the documentation if (docs) - add_subdirectory(docs) + add_subdirectory(docs) endif () include(install/install) if (package) - include(ClioPackage) + include(ClioPackage) endif () if (snapshot) - add_subdirectory(tools/snapshot) + add_subdirectory(tools/snapshot) endif () diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 831cf00b6..8230be99a 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -1,17 +1,15 @@ add_executable(clio_benchmark) -target_sources( - clio_benchmark - PRIVATE # Common - Main.cpp - Playground.cpp - # ExecutionContext - util/async/ExecutionContextBenchmarks.cpp - # Logger - util/log/LoggerBenchmark.cpp - # WorkQueue - rpc/WorkQueueBenchmarks.cpp -) +target_sources(clio_benchmark + PRIVATE # Common + Main.cpp + Playground.cpp + # ExecutionContext + util/async/ExecutionContextBenchmarks.cpp + # Logger + util/log/LoggerBenchmark.cpp + # WorkQueue + rpc/WorkQueueBenchmarks.cpp) include(deps/gbench) diff --git a/cmake/Ccache.cmake b/cmake/Ccache.cmake index 2a09ff262..2ff662b66 100644 --- a/cmake/Ccache.cmake +++ b/cmake/Ccache.cmake @@ -1,5 +1,5 @@ find_program(CCACHE_PATH "ccache") if (CCACHE_PATH) - set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PATH}") - message(STATUS "Using ccache: ${CCACHE_PATH}") + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PATH}") + message(STATUS "Using ccache: ${CCACHE_PATH}") endif () diff --git a/cmake/CheckCompiler.cmake b/cmake/CheckCompiler.cmake index 30059de96..98e23abcb 100644 --- a/cmake/CheckCompiler.cmake +++ b/cmake/CheckCompiler.cmake @@ -1,42 +1,42 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "Clang 16+ required for building clio") - endif () - set(is_clang TRUE) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "Clang 16+ required for building clio") + endif () + set(is_clang TRUE) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15) - message(FATAL_ERROR "AppleClang 15+ required for building clio") - endif () - set(is_appleclang TRUE) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15) + message(FATAL_ERROR "AppleClang 15+ required for building clio") + endif () + set(is_appleclang TRUE) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12) - message(FATAL_ERROR "GCC 12+ required for building clio") - endif () - set(is_gcc TRUE) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12) + message(FATAL_ERROR "GCC 12+ required for building clio") + endif () + set(is_gcc TRUE) else () - message(FATAL_ERROR "Supported compilers: AppleClang 15+, Clang 16+, GCC 12+") + message(FATAL_ERROR "Supported compilers: AppleClang 15+, Clang 16+, GCC 12+") endif () if (san) - string(TOLOWER ${san} san) - set(SAN_FLAG "-fsanitize=${san}") - set(SAN_LIB "") - if (is_gcc) - if (san STREQUAL "address") - set(SAN_LIB "asan") - elseif (san STREQUAL "thread") - set(SAN_LIB "tsan") - elseif (san STREQUAL "memory") - set(SAN_LIB "msan") - elseif (san STREQUAL "undefined") - set(SAN_LIB "ubsan") + string(TOLOWER ${san} san) + set(SAN_FLAG "-fsanitize=${san}") + set(SAN_LIB "") + if (is_gcc) + if (san STREQUAL "address") + set(SAN_LIB "asan") + elseif (san STREQUAL "thread") + set(SAN_LIB "tsan") + elseif (san STREQUAL "memory") + set(SAN_LIB "msan") + elseif (san STREQUAL "undefined") + set(SAN_LIB "ubsan") + endif () + endif () + set(_saved_CRL ${CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES "${SAN_FLAG};${SAN_LIB}") + check_cxx_compiler_flag(${SAN_FLAG} COMPILER_SUPPORTS_SAN) + set(CMAKE_REQUIRED_LIBRARIES ${_saved_CRL}) + if (NOT COMPILER_SUPPORTS_SAN) + message(FATAL_ERROR "${san} sanitizer does not seem to be supported by your compiler") endif () - endif () - set(_saved_CRL ${CMAKE_REQUIRED_LIBRARIES}) - set(CMAKE_REQUIRED_LIBRARIES "${SAN_FLAG};${SAN_LIB}") - check_cxx_compiler_flag(${SAN_FLAG} COMPILER_SUPPORTS_SAN) - set(CMAKE_REQUIRED_LIBRARIES ${_saved_CRL}) - if (NOT COMPILER_SUPPORTS_SAN) - message(FATAL_ERROR "${san} sanitizer does not seem to be supported by your compiler") - endif () endif () diff --git a/cmake/ClangTidy.cmake b/cmake/ClangTidy.cmake index e6374e612..563f1c4d6 100644 --- a/cmake/ClangTidy.cmake +++ b/cmake/ClangTidy.cmake @@ -1,33 +1,30 @@ if (lint) - # Find clang-tidy binary - if (DEFINED ENV{CLIO_CLANG_TIDY_BIN}) - set(_CLANG_TIDY_BIN $ENV{CLIO_CLANG_TIDY_BIN}) - if ((NOT EXISTS ${_CLANG_TIDY_BIN}) OR IS_DIRECTORY ${_CLANG_TIDY_BIN}) - message(FATAL_ERROR "$ENV{CLIO_CLANG_TIDY_BIN} no such file. Check CLIO_CLANG_TIDY_BIN env variable") + # Find clang-tidy binary + if (DEFINED ENV{CLIO_CLANG_TIDY_BIN}) + set(_CLANG_TIDY_BIN $ENV{CLIO_CLANG_TIDY_BIN}) + if ((NOT EXISTS ${_CLANG_TIDY_BIN}) OR IS_DIRECTORY ${_CLANG_TIDY_BIN}) + message(FATAL_ERROR "$ENV{CLIO_CLANG_TIDY_BIN} no such file. Check CLIO_CLANG_TIDY_BIN env variable") + endif () + message(STATUS "Using clang-tidy from CLIO_CLANG_TIDY_BIN") + else () + find_program(_CLANG_TIDY_BIN NAMES "clang-tidy-20" "clang-tidy" REQUIRED) endif () - message(STATUS "Using clang-tidy from CLIO_CLANG_TIDY_BIN") - else () - find_program(_CLANG_TIDY_BIN NAMES "clang-tidy-20" "clang-tidy" REQUIRED) - endif () - if (NOT _CLANG_TIDY_BIN) - message( - FATAL_ERROR - "clang-tidy binary not found. Please set the CLIO_CLANG_TIDY_BIN environment variable or install clang-tidy." - ) - endif () + if (NOT _CLANG_TIDY_BIN) + message(FATAL_ERROR "clang-tidy binary not found. Please set the CLIO_CLANG_TIDY_BIN environment variable or install clang-tidy." + ) + endif () - # Support for https://github.com/matus-chochlik/ctcache - find_program(CLANG_TIDY_CACHE_PATH NAMES "clang-tidy-cache") - if (CLANG_TIDY_CACHE_PATH) - set(_CLANG_TIDY_CMD "${CLANG_TIDY_CACHE_PATH};${_CLANG_TIDY_BIN}" - CACHE STRING "A combined command to run clang-tidy with caching wrapper" - ) - else () - set(_CLANG_TIDY_CMD "${_CLANG_TIDY_BIN}") - endif () + # Support for https://github.com/matus-chochlik/ctcache + find_program(CLANG_TIDY_CACHE_PATH NAMES "clang-tidy-cache") + if (CLANG_TIDY_CACHE_PATH) + set(_CLANG_TIDY_CMD "${CLANG_TIDY_CACHE_PATH};${_CLANG_TIDY_BIN}" + CACHE STRING "A combined command to run clang-tidy with caching wrapper") + else () + set(_CLANG_TIDY_CMD "${_CLANG_TIDY_BIN}") + endif () - set(CMAKE_CXX_CLANG_TIDY "${_CLANG_TIDY_CMD};--quiet") - message(STATUS "Using clang-tidy: ${CMAKE_CXX_CLANG_TIDY}") + set(CMAKE_CXX_CLANG_TIDY "${_CLANG_TIDY_CMD};--quiet") + message(STATUS "Using clang-tidy: ${CMAKE_CXX_CLANG_TIDY}") endif () diff --git a/cmake/ClioVersion.cmake b/cmake/ClioVersion.cmake index 939a0b5f4..06206d41b 100644 --- a/cmake/ClioVersion.cmake +++ b/cmake/ClioVersion.cmake @@ -1,47 +1,41 @@ find_package(Git REQUIRED) if (DEFINED ENV{GITHUB_BRANCH_NAME}) - set(GIT_BUILD_BRANCH $ENV{GITHUB_BRANCH_NAME}) - set(GIT_COMMIT_HASH $ENV{GITHUB_HEAD_SHA}) + set(GIT_BUILD_BRANCH $ENV{GITHUB_BRANCH_NAME}) + set(GIT_COMMIT_HASH $ENV{GITHUB_HEAD_SHA}) else () - set(GIT_COMMAND branch --show-current) - execute_process( - COMMAND ${GIT_EXECUTABLE} ${GIT_COMMAND} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BUILD_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY - ) + set(GIT_COMMAND branch --show-current) + execute_process(COMMAND ${GIT_EXECUTABLE} ${GIT_COMMAND} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BUILD_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY) - set(GIT_COMMAND rev-parse HEAD) - execute_process( - COMMAND ${GIT_EXECUTABLE} ${GIT_COMMAND} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY - ) + set(GIT_COMMAND rev-parse HEAD) + execute_process(COMMAND ${GIT_EXECUTABLE} ${GIT_COMMAND} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY) endif () -execute_process( - COMMAND date +%Y%m%d%H%M%S WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE BUILD_DATE - OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY -) +execute_process(COMMAND date +%Y%m%d%H%M%S WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE BUILD_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND_ERROR_IS_FATAL ANY) message(STATUS "Git branch: ${GIT_BUILD_BRANCH}") message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}") message(STATUS "Build date: ${BUILD_DATE}") if (DEFINED ENV{FORCE_CLIO_VERSION} AND NOT "$ENV{FORCE_CLIO_VERSION}" STREQUAL "") - message(STATUS "Using explicitly provided '${FORCE_CLIO_VERSION}' as Clio version") + message(STATUS "Using explicitly provided '${FORCE_CLIO_VERSION}' as Clio version") - set(CLIO_VERSION "$ENV{FORCE_CLIO_VERSION}") - set(DOC_CLIO_VERSION "$ENV{FORCE_CLIO_VERSION}") + set(CLIO_VERSION "$ENV{FORCE_CLIO_VERSION}") + set(DOC_CLIO_VERSION "$ENV{FORCE_CLIO_VERSION}") else () - message(STATUS "Using 'YYYYMMDDHMS--' as Clio version") + message(STATUS "Using 'YYYYMMDDHMS--' as Clio version") - string(SUBSTRING ${GIT_COMMIT_HASH} 0 7 GIT_COMMIT_HASH_SHORT) + string(SUBSTRING ${GIT_COMMIT_HASH} 0 7 GIT_COMMIT_HASH_SHORT) - set(CLIO_VERSION "${BUILD_DATE}-${GIT_BUILD_BRANCH}-${GIT_COMMIT_HASH_SHORT}") - set(DOC_CLIO_VERSION "develop") + set(CLIO_VERSION "${BUILD_DATE}-${GIT_BUILD_BRANCH}-${GIT_COMMIT_HASH_SHORT}") + set(DOC_CLIO_VERSION "develop") endif () if (CMAKE_BUILD_TYPE MATCHES Debug) - set(CLIO_VERSION "${CLIO_VERSION}+DEBUG") + set(CLIO_VERSION "${CLIO_VERSION}+DEBUG") endif () message(STATUS "Build version: ${CLIO_VERSION}") diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake index 822325b8c..f8c56d6ad 100644 --- a/cmake/CodeCoverage.cmake +++ b/cmake/CodeCoverage.cmake @@ -107,76 +107,69 @@ option(CODE_COVERAGE_VERBOSE "Verbose information" FALSE) find_program(GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) if (DEFINED CODE_COVERAGE_GCOV_TOOL) - set(GCOV_TOOL "${CODE_COVERAGE_GCOV_TOOL}") + set(GCOV_TOOL "${CODE_COVERAGE_GCOV_TOOL}") elseif (DEFINED ENV{CODE_COVERAGE_GCOV_TOOL}) - set(GCOV_TOOL "$ENV{CODE_COVERAGE_GCOV_TOOL}") + set(GCOV_TOOL "$ENV{CODE_COVERAGE_GCOV_TOOL}") elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - if (APPLE) - execute_process(COMMAND xcrun -f llvm-cov OUTPUT_VARIABLE LLVMCOV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) - else () - find_program(LLVMCOV_PATH llvm-cov) - endif () - if (LLVMCOV_PATH) - set(GCOV_TOOL "${LLVMCOV_PATH} gcov") - endif () + if (APPLE) + execute_process(COMMAND xcrun -f llvm-cov OUTPUT_VARIABLE LLVMCOV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + find_program(LLVMCOV_PATH llvm-cov) + endif () + if (LLVMCOV_PATH) + set(GCOV_TOOL "${LLVMCOV_PATH} gcov") + endif () elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") - find_program(GCOV_PATH gcov) - set(GCOV_TOOL "${GCOV_PATH}") + find_program(GCOV_PATH gcov) + set(GCOV_TOOL "${GCOV_PATH}") endif () # Check supported compiler (Clang, GNU and Flang) get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) foreach (LANG ${LANGUAGES}) - if ("${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - if ("${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS 3) - message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + if ("${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + if ("${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS 3) + message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + endif () + elseif (NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "GNU" AND NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES + "(LLVM)?[Ff]lang") + message(FATAL_ERROR "Compiler is not GNU or Flang! Aborting...") endif () - elseif (NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "GNU" AND NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES - "(LLVM)?[Ff]lang" - ) - message(FATAL_ERROR "Compiler is not GNU or Flang! Aborting...") - endif () endforeach () set(COVERAGE_COMPILER_FLAGS "-g --coverage" CACHE INTERNAL "") if (CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag(-fprofile-abs-path HAVE_cxx_fprofile_abs_path) - if (HAVE_cxx_fprofile_abs_path) - set(COVERAGE_CXX_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") - endif () - include(CheckCCompilerFlag) - check_c_compiler_flag(-fprofile-abs-path HAVE_c_fprofile_abs_path) - if (HAVE_c_fprofile_abs_path) - set(COVERAGE_C_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") - endif () + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag(-fprofile-abs-path HAVE_cxx_fprofile_abs_path) + if (HAVE_cxx_fprofile_abs_path) + set(COVERAGE_CXX_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") + endif () + include(CheckCCompilerFlag) + check_c_compiler_flag(-fprofile-abs-path HAVE_c_fprofile_abs_path) + if (HAVE_c_fprofile_abs_path) + set(COVERAGE_C_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") + endif () endif () set(CMAKE_Fortran_FLAGS_COVERAGE ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the Fortran compiler during coverage builds." FORCE -) + CACHE STRING "Flags used by the Fortran compiler during coverage builds." FORCE) set(CMAKE_CXX_FLAGS_COVERAGE ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C++ compiler during coverage builds." FORCE -) + CACHE STRING "Flags used by the C++ compiler during coverage builds." FORCE) set(CMAKE_C_FLAGS_COVERAGE ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C compiler during coverage builds." FORCE -) + CACHE STRING "Flags used by the C compiler during coverage builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "" CACHE STRING "Flags used for linking binaries during coverage builds." FORCE) set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "" - CACHE STRING "Flags used by the shared libraries linker during coverage builds." FORCE -) -mark_as_advanced( - CMAKE_Fortran_FLAGS_COVERAGE CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE - CMAKE_SHARED_LINKER_FLAGS_COVERAGE -) + CACHE STRING "Flags used by the shared libraries linker during coverage builds." FORCE) +mark_as_advanced(CMAKE_Fortran_FLAGS_COVERAGE CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE CMAKE_SHARED_LINKER_FLAGS_COVERAGE) get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if (NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG)) - message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") + message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") endif () # NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG) if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - link_libraries(gcov) + link_libraries(gcov) endif () # Defines a target for running and collection code coverage information Builds dependencies, runs the given executable @@ -192,170 +185,164 @@ endif () # with CMake 3.4+) ) The user can set the variable GCOVR_ADDITIONAL_ARGS to supply additional flags to the GCVOR # command. function (setup_target_for_coverage_gcovr) - set(options NONE) - set(oneValueArgs BASE_DIRECTORY NAME FORMAT) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set(options NONE) + set(oneValueArgs BASE_DIRECTORY NAME FORMAT) + set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - if (NOT GCOV_TOOL) - message(FATAL_ERROR "Could not find gcov or llvm-cov tool! Aborting...") - endif () + if (NOT GCOV_TOOL) + message(FATAL_ERROR "Could not find gcov or llvm-cov tool! Aborting...") + endif () - if (NOT GCOVR_PATH) - message(FATAL_ERROR "Could not find gcovr tool! Aborting...") - endif () + if (NOT GCOVR_PATH) + message(FATAL_ERROR "Could not find gcovr tool! Aborting...") + endif () - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if (DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else () - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif () - - if (NOT DEFINED Coverage_FORMAT) - set(Coverage_FORMAT xml) - endif () - - if ("--output" IN_LIST GCOVR_ADDITIONAL_ARGS) - message(FATAL_ERROR "Unsupported --output option detected in GCOVR_ADDITIONAL_ARGS! Aborting...") - else () - if ((Coverage_FORMAT STREQUAL "html-details") OR (Coverage_FORMAT STREQUAL "html-nested")) - set(GCOVR_OUTPUT_FILE ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html) - set(GCOVR_CREATE_FOLDER ${PROJECT_BINARY_DIR}/${Coverage_NAME}) - elseif (Coverage_FORMAT STREQUAL "html-single") - set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.html) - elseif ((Coverage_FORMAT STREQUAL "json-summary") OR (Coverage_FORMAT STREQUAL "json-details") - OR (Coverage_FORMAT STREQUAL "coveralls") - ) - set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.json) - elseif (Coverage_FORMAT STREQUAL "txt") - set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.txt) - elseif (Coverage_FORMAT STREQUAL "csv") - set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.csv) + # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR + if (DEFINED Coverage_BASE_DIRECTORY) + get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) else () - set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.xml) - endif () - endif () - - if ((Coverage_FORMAT STREQUAL "cobertura") OR (Coverage_FORMAT STREQUAL "xml")) - list(APPEND GCOVR_ADDITIONAL_ARGS --cobertura "${GCOVR_OUTPUT_FILE}") - list(APPEND GCOVR_ADDITIONAL_ARGS --cobertura-pretty) - set(Coverage_FORMAT cobertura) # overwrite xml - elseif (Coverage_FORMAT STREQUAL "sonarqube") - list(APPEND GCOVR_ADDITIONAL_ARGS --sonarqube "${GCOVR_OUTPUT_FILE}") - elseif (Coverage_FORMAT STREQUAL "json-summary") - list(APPEND GCOVR_ADDITIONAL_ARGS --json-summary "${GCOVR_OUTPUT_FILE}") - list(APPEND GCOVR_ADDITIONAL_ARGS --json-summary-pretty) - elseif (Coverage_FORMAT STREQUAL "json-details") - list(APPEND GCOVR_ADDITIONAL_ARGS --json "${GCOVR_OUTPUT_FILE}") - list(APPEND GCOVR_ADDITIONAL_ARGS --json-pretty) - elseif (Coverage_FORMAT STREQUAL "coveralls") - list(APPEND GCOVR_ADDITIONAL_ARGS --coveralls "${GCOVR_OUTPUT_FILE}") - list(APPEND GCOVR_ADDITIONAL_ARGS --coveralls-pretty) - elseif (Coverage_FORMAT STREQUAL "csv") - list(APPEND GCOVR_ADDITIONAL_ARGS --csv "${GCOVR_OUTPUT_FILE}") - elseif (Coverage_FORMAT STREQUAL "txt") - list(APPEND GCOVR_ADDITIONAL_ARGS --txt "${GCOVR_OUTPUT_FILE}") - elseif (Coverage_FORMAT STREQUAL "html-single") - list(APPEND GCOVR_ADDITIONAL_ARGS --html "${GCOVR_OUTPUT_FILE}") - list(APPEND GCOVR_ADDITIONAL_ARGS --html-self-contained) - elseif (Coverage_FORMAT STREQUAL "html-nested") - list(APPEND GCOVR_ADDITIONAL_ARGS --html-nested "${GCOVR_OUTPUT_FILE}") - elseif (Coverage_FORMAT STREQUAL "html-details") - list(APPEND GCOVR_ADDITIONAL_ARGS --html-details "${GCOVR_OUTPUT_FILE}") - else () - message(FATAL_ERROR "Unsupported output style ${Coverage_FORMAT}! Aborting...") - endif () - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(GCOVR_EXCLUDES "") - foreach (EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) - if (CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif () - list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") - endforeach () - list(REMOVE_DUPLICATES GCOVR_EXCLUDES) - - # Combine excludes to several -e arguments - set(GCOVR_EXCLUDE_ARGS "") - foreach (EXCLUDE ${GCOVR_EXCLUDES}) - list(APPEND GCOVR_EXCLUDE_ARGS "-e") - list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") - endforeach () - - # Set up commands which will be run to generate coverage data Run tests - set(GCOVR_EXEC_TESTS_CMD ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}) - - # Create folder - if (DEFINED GCOVR_CREATE_FOLDER) - set(GCOVR_FOLDER_CMD ${CMAKE_COMMAND} -E make_directory ${GCOVR_CREATE_FOLDER}) - else () - set(GCOVR_FOLDER_CMD echo) # dummy - endif () - - # Running gcovr - set(GCOVR_CMD - ${GCOVR_PATH} - --gcov-executable - ${GCOV_TOOL} - --gcov-ignore-parse-errors=negative_hits.warn_once_per_file - -r - ${BASEDIR} - ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} - --object-directory=${PROJECT_BINARY_DIR} - ) - - if (CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - - message(STATUS "Command to run tests: ") - string(REPLACE ";" " " GCOVR_EXEC_TESTS_CMD_SPACED "${GCOVR_EXEC_TESTS_CMD}") - message(STATUS "${GCOVR_EXEC_TESTS_CMD_SPACED}") - - if (NOT GCOVR_FOLDER_CMD STREQUAL "echo") - message(STATUS "Command to create a folder: ") - string(REPLACE ";" " " GCOVR_FOLDER_CMD_SPACED "${GCOVR_FOLDER_CMD}") - message(STATUS "${GCOVR_FOLDER_CMD_SPACED}") + set(BASEDIR ${PROJECT_SOURCE_DIR}) endif () - message(STATUS "Command to generate gcovr coverage data: ") - string(REPLACE ";" " " GCOVR_CMD_SPACED "${GCOVR_CMD}") - message(STATUS "${GCOVR_CMD_SPACED}") - endif () + if (NOT DEFINED Coverage_FORMAT) + set(Coverage_FORMAT xml) + endif () - add_custom_target( - ${Coverage_NAME} - COMMAND ${GCOVR_EXEC_TESTS_CMD} - COMMAND ${GCOVR_FOLDER_CMD} - COMMAND ${GCOVR_CMD} - BYPRODUCTS ${GCOVR_OUTPUT_FILE} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Running gcovr to produce code coverage report." - ) + if ("--output" IN_LIST GCOVR_ADDITIONAL_ARGS) + message(FATAL_ERROR "Unsupported --output option detected in GCOVR_ADDITIONAL_ARGS! Aborting...") + else () + if ((Coverage_FORMAT STREQUAL "html-details") OR (Coverage_FORMAT STREQUAL "html-nested")) + set(GCOVR_OUTPUT_FILE ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html) + set(GCOVR_CREATE_FOLDER ${PROJECT_BINARY_DIR}/${Coverage_NAME}) + elseif (Coverage_FORMAT STREQUAL "html-single") + set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.html) + elseif ((Coverage_FORMAT STREQUAL "json-summary") OR (Coverage_FORMAT STREQUAL "json-details") + OR (Coverage_FORMAT STREQUAL "coveralls")) + set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.json) + elseif (Coverage_FORMAT STREQUAL "txt") + set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.txt) + elseif (Coverage_FORMAT STREQUAL "csv") + set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.csv) + else () + set(GCOVR_OUTPUT_FILE ${Coverage_NAME}.xml) + endif () + endif () - # Show info where to find the report - add_custom_command( - TARGET ${Coverage_NAME} POST_BUILD COMMAND ; - COMMENT "Code coverage report saved in ${GCOVR_OUTPUT_FILE} formatted as ${Coverage_FORMAT}" - ) + if ((Coverage_FORMAT STREQUAL "cobertura") OR (Coverage_FORMAT STREQUAL "xml")) + list(APPEND GCOVR_ADDITIONAL_ARGS --cobertura "${GCOVR_OUTPUT_FILE}") + list(APPEND GCOVR_ADDITIONAL_ARGS --cobertura-pretty) + set(Coverage_FORMAT cobertura) # overwrite xml + elseif (Coverage_FORMAT STREQUAL "sonarqube") + list(APPEND GCOVR_ADDITIONAL_ARGS --sonarqube "${GCOVR_OUTPUT_FILE}") + elseif (Coverage_FORMAT STREQUAL "json-summary") + list(APPEND GCOVR_ADDITIONAL_ARGS --json-summary "${GCOVR_OUTPUT_FILE}") + list(APPEND GCOVR_ADDITIONAL_ARGS --json-summary-pretty) + elseif (Coverage_FORMAT STREQUAL "json-details") + list(APPEND GCOVR_ADDITIONAL_ARGS --json "${GCOVR_OUTPUT_FILE}") + list(APPEND GCOVR_ADDITIONAL_ARGS --json-pretty) + elseif (Coverage_FORMAT STREQUAL "coveralls") + list(APPEND GCOVR_ADDITIONAL_ARGS --coveralls "${GCOVR_OUTPUT_FILE}") + list(APPEND GCOVR_ADDITIONAL_ARGS --coveralls-pretty) + elseif (Coverage_FORMAT STREQUAL "csv") + list(APPEND GCOVR_ADDITIONAL_ARGS --csv "${GCOVR_OUTPUT_FILE}") + elseif (Coverage_FORMAT STREQUAL "txt") + list(APPEND GCOVR_ADDITIONAL_ARGS --txt "${GCOVR_OUTPUT_FILE}") + elseif (Coverage_FORMAT STREQUAL "html-single") + list(APPEND GCOVR_ADDITIONAL_ARGS --html "${GCOVR_OUTPUT_FILE}") + list(APPEND GCOVR_ADDITIONAL_ARGS --html-self-contained) + elseif (Coverage_FORMAT STREQUAL "html-nested") + list(APPEND GCOVR_ADDITIONAL_ARGS --html-nested "${GCOVR_OUTPUT_FILE}") + elseif (Coverage_FORMAT STREQUAL "html-details") + list(APPEND GCOVR_ADDITIONAL_ARGS --html-details "${GCOVR_OUTPUT_FILE}") + else () + message(FATAL_ERROR "Unsupported output style ${Coverage_FORMAT}! Aborting...") + endif () + + # Collect excludes (CMake 3.4+: Also compute absolute paths) + set(GCOVR_EXCLUDES "") + foreach (EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) + if (CMAKE_VERSION VERSION_GREATER 3.4) + get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) + endif () + list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") + endforeach () + list(REMOVE_DUPLICATES GCOVR_EXCLUDES) + + # Combine excludes to several -e arguments + set(GCOVR_EXCLUDE_ARGS "") + foreach (EXCLUDE ${GCOVR_EXCLUDES}) + list(APPEND GCOVR_EXCLUDE_ARGS "-e") + list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") + endforeach () + + # Set up commands which will be run to generate coverage data Run tests + set(GCOVR_EXEC_TESTS_CMD ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}) + + # Create folder + if (DEFINED GCOVR_CREATE_FOLDER) + set(GCOVR_FOLDER_CMD ${CMAKE_COMMAND} -E make_directory ${GCOVR_CREATE_FOLDER}) + else () + set(GCOVR_FOLDER_CMD echo) # dummy + endif () + + # Running gcovr + set(GCOVR_CMD + ${GCOVR_PATH} + --gcov-executable + ${GCOV_TOOL} + --gcov-ignore-parse-errors=negative_hits.warn_once_per_file + -r + ${BASEDIR} + ${GCOVR_ADDITIONAL_ARGS} + ${GCOVR_EXCLUDE_ARGS} + --object-directory=${PROJECT_BINARY_DIR}) + + if (CODE_COVERAGE_VERBOSE) + message(STATUS "Executed command report") + + message(STATUS "Command to run tests: ") + string(REPLACE ";" " " GCOVR_EXEC_TESTS_CMD_SPACED "${GCOVR_EXEC_TESTS_CMD}") + message(STATUS "${GCOVR_EXEC_TESTS_CMD_SPACED}") + + if (NOT GCOVR_FOLDER_CMD STREQUAL "echo") + message(STATUS "Command to create a folder: ") + string(REPLACE ";" " " GCOVR_FOLDER_CMD_SPACED "${GCOVR_FOLDER_CMD}") + message(STATUS "${GCOVR_FOLDER_CMD_SPACED}") + endif () + + message(STATUS "Command to generate gcovr coverage data: ") + string(REPLACE ";" " " GCOVR_CMD_SPACED "${GCOVR_CMD}") + message(STATUS "${GCOVR_CMD_SPACED}") + endif () + + add_custom_target(${Coverage_NAME} + COMMAND ${GCOVR_EXEC_TESTS_CMD} + COMMAND ${GCOVR_FOLDER_CMD} + COMMAND ${GCOVR_CMD} + BYPRODUCTS ${GCOVR_OUTPUT_FILE} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + VERBATIM # Protect arguments to commands + COMMENT "Running gcovr to produce code coverage report.") + + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD COMMAND ; + COMMENT "Code coverage report saved in ${GCOVR_OUTPUT_FILE} formatted as ${Coverage_FORMAT}") endfunction () # setup_target_for_coverage_gcovr function (append_coverage_compiler_flags) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") endfunction () # append_coverage_compiler_flags # Setup coverage for specific library function (append_coverage_compiler_flags_to_target name mode) - separate_arguments(_flag_list NATIVE_COMMAND "${COVERAGE_COMPILER_FLAGS}") - target_compile_options(${name} ${mode} ${_flag_list}) - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - target_link_libraries(${name} ${mode} gcov) - endif () + separate_arguments(_flag_list NATIVE_COMMAND "${COVERAGE_COMPILER_FLAGS}") + target_compile_options(${name} ${mode} ${_flag_list}) + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + target_link_libraries(${name} ${mode} gcov) + endif () endfunction () diff --git a/cmake/Docs.cmake b/cmake/Docs.cmake index fd0d42081..13b61c797 100644 --- a/cmake/Docs.cmake +++ b/cmake/Docs.cmake @@ -11,10 +11,8 @@ set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT}) -add_custom_target( - docs - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Generating API documentation with Doxygen" - VERBATIM -) +add_custom_target(docs + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" + VERBATIM) diff --git a/cmake/Linker.cmake b/cmake/Linker.cmake index 325e50784..7a2299d2b 100644 --- a/cmake/Linker.cmake +++ b/cmake/Linker.cmake @@ -1,11 +1,11 @@ if (DEFINED CMAKE_LINKER_TYPE) - message(STATUS "Custom linker is already set: ${CMAKE_LINKER_TYPE}") - return() + message(STATUS "Custom linker is already set: ${CMAKE_LINKER_TYPE}") + return() endif () find_program(MOLD_PATH mold) if (MOLD_PATH AND CMAKE_SYSTEM_NAME STREQUAL "Linux") - message(STATUS "Using Mold linker: ${MOLD_PATH}") - set(CMAKE_LINKER_TYPE MOLD) + message(STATUS "Using Mold linker: ${MOLD_PATH}") + set(CMAKE_LINKER_TYPE MOLD) endif () diff --git a/cmake/Settings.cmake b/cmake/Settings.cmake index 2754db733..7077c0d31 100644 --- a/cmake/Settings.cmake +++ b/cmake/Settings.cmake @@ -31,52 +31,51 @@ set(COMPILER_FLAGS # -Wduplicated-cond -Wlogical-op -Wuseless-cast ) endif () if (is_clang) - list(APPEND COMPILER_FLAGS -Wshadow # gcc is to aggressive with shadowing - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78147 - ) + list(APPEND COMPILER_FLAGS -Wshadow # gcc is to aggressive with shadowing + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78147 + ) endif () if (is_appleclang) - list(APPEND COMPILER_FLAGS -Wreorder-init-list) + list(APPEND COMPILER_FLAGS -Wreorder-init-list) endif () if (san) - # When building with sanitizers some compilers will actually produce extra warnings/errors. We don't want this yet, at - # least not until we have fixed all runtime issues reported by the sanitizers. Once that is done we can start removing - # some of these and trying to fix it in our codebase. We can never remove all of below because most of them are - # reported from deep inside libraries like boost or libxrpl. - # - # TODO: Address in https://github.com/XRPLF/clio/issues/1885 - list( - APPEND - COMPILER_FLAGS - -Wno-error=tsan # Disables treating TSAN warnings as errors - -Wno-tsan # Disables TSAN warnings (thread-safety analysis) - -Wno-uninitialized # Disables warnings about uninitialized variables (AddressSanitizer, UndefinedBehaviorSanitizer, - # etc.) - -Wno-stringop-overflow # Disables warnings about potential string operation overflows (AddressSanitizer) - -Wno-unsafe-buffer-usage # Disables warnings about unsafe memory operations (AddressSanitizer) - -Wno-frame-larger-than # Disables warnings about stack frame size being too large (AddressSanitizer) - -Wno-unused-function # Disables warnings about unused functions (LeakSanitizer, memory-related issues) - -Wno-unused-but-set-variable # Disables warnings about unused variables (MemorySanitizer) - -Wno-thread-safety-analysis # Disables warnings related to thread safety usage (ThreadSanitizer) - -Wno-thread-safety # Disables warnings related to thread safety usage (ThreadSanitizer) - -Wno-sign-compare # Disables warnings about signed/unsigned comparison (UndefinedBehaviorSanitizer) - -Wno-nonnull # Disables warnings related to null pointer dereferencing (UndefinedBehaviorSanitizer) - -Wno-address # Disables warnings about address-related issues (UndefinedBehaviorSanitizer) - -Wno-array-bounds # Disables array bounds checks (UndefinedBehaviorSanitizer) - ) + # When building with sanitizers some compilers will actually produce extra warnings/errors. We don't want this yet, + # at least not until we have fixed all runtime issues reported by the sanitizers. Once that is done we can start + # removing some of these and trying to fix it in our codebase. We can never remove all of below because most of them + # are reported from deep inside libraries like boost or libxrpl. + # + # TODO: Address in https://github.com/XRPLF/clio/issues/1885 + list(APPEND + COMPILER_FLAGS + -Wno-error=tsan # Disables treating TSAN warnings as errors + -Wno-tsan # Disables TSAN warnings (thread-safety analysis) + -Wno-uninitialized # Disables warnings about uninitialized variables (AddressSanitizer, + # UndefinedBehaviorSanitizer, etc.) + -Wno-stringop-overflow # Disables warnings about potential string operation overflows (AddressSanitizer) + -Wno-unsafe-buffer-usage # Disables warnings about unsafe memory operations (AddressSanitizer) + -Wno-frame-larger-than # Disables warnings about stack frame size being too large (AddressSanitizer) + -Wno-unused-function # Disables warnings about unused functions (LeakSanitizer, memory-related issues) + -Wno-unused-but-set-variable # Disables warnings about unused variables (MemorySanitizer) + -Wno-thread-safety-analysis # Disables warnings related to thread safety usage (ThreadSanitizer) + -Wno-thread-safety # Disables warnings related to thread safety usage (ThreadSanitizer) + -Wno-sign-compare # Disables warnings about signed/unsigned comparison (UndefinedBehaviorSanitizer) + -Wno-nonnull # Disables warnings related to null pointer dereferencing (UndefinedBehaviorSanitizer) + -Wno-address # Disables warnings about address-related issues (UndefinedBehaviorSanitizer) + -Wno-array-bounds # Disables array bounds checks (UndefinedBehaviorSanitizer) + ) endif () # See https://github.com/cpp-best-practices/cppbestpractices/blob/master/02-Use_the_Tools_Available.md#gcc--clang for # the flags description if (time_trace) - if (is_clang OR is_appleclang) - list(APPEND COMPILER_FLAGS -ftime-trace) - else () - message(FATAL_ERROR "Clang or AppleClang is required to use `-ftime-trace`") - endif () + if (is_clang OR is_appleclang) + list(APPEND COMPILER_FLAGS -ftime-trace) + else () + message(FATAL_ERROR "Clang or AppleClang is required to use `-ftime-trace`") + endif () endif () target_compile_options(clio_options INTERFACE ${COMPILER_FLAGS}) diff --git a/cmake/SourceLocation.cmake b/cmake/SourceLocation.cmake index 2903faf6f..9d37f10e1 100644 --- a/cmake/SourceLocation.cmake +++ b/cmake/SourceLocation.cmake @@ -2,10 +2,10 @@ include(CheckIncludeFileCXX) check_include_file_cxx("source_location" SOURCE_LOCATION_AVAILABLE) if (SOURCE_LOCATION_AVAILABLE) - target_compile_definitions(clio_options INTERFACE "HAS_SOURCE_LOCATION") + target_compile_definitions(clio_options INTERFACE "HAS_SOURCE_LOCATION") endif () check_include_file_cxx("experimental/source_location" EXPERIMENTAL_SOURCE_LOCATION_AVAILABLE) if (EXPERIMENTAL_SOURCE_LOCATION_AVAILABLE) - target_compile_definitions(clio_options INTERFACE "HAS_EXPERIMENTAL_SOURCE_LOCATION") + target_compile_definitions(clio_options INTERFACE "HAS_EXPERIMENTAL_SOURCE_LOCATION") endif () diff --git a/cmake/deps/libbacktrace.cmake b/cmake/deps/libbacktrace.cmake index 8d1f4fea3..ebd5904dc 100644 --- a/cmake/deps/libbacktrace.cmake +++ b/cmake/deps/libbacktrace.cmake @@ -1,11 +1,11 @@ if ("${san}" STREQUAL "") - target_compile_definitions(clio_options INTERFACE BOOST_STACKTRACE_LINK) - target_compile_definitions(clio_options INTERFACE BOOST_STACKTRACE_USE_BACKTRACE) - find_package(libbacktrace REQUIRED CONFIG) + target_compile_definitions(clio_options INTERFACE BOOST_STACKTRACE_LINK) + target_compile_definitions(clio_options INTERFACE BOOST_STACKTRACE_USE_BACKTRACE) + find_package(libbacktrace REQUIRED CONFIG) else () - # Some sanitizers (TSAN and ASAN for sure) can't be used with libbacktrace because they have their own backtracing - # capabilities and there are conflicts. In any case, this makes sure Clio code knows that backtrace is not available. - # See relevant conan profiles for sanitizers where we disable stacktrace in Boost explicitly. - target_compile_definitions(clio_options INTERFACE CLIO_WITHOUT_STACKTRACE) - message(STATUS "Sanitizer enabled, disabling stacktrace") + # Some sanitizers (TSAN and ASAN for sure) can't be used with libbacktrace because they have their own backtracing + # capabilities and there are conflicts. In any case, this makes sure Clio code knows that backtrace is not + # available. See relevant conan profiles for sanitizers where we disable stacktrace in Boost explicitly. + target_compile_definitions(clio_options INTERFACE CLIO_WITHOUT_STACKTRACE) + message(STATUS "Sanitizer enabled, disabling stacktrace") endif () diff --git a/cmake/deps/spdlog.cmake b/cmake/deps/spdlog.cmake index 957a6c34a..c17b65d79 100644 --- a/cmake/deps/spdlog.cmake +++ b/cmake/deps/spdlog.cmake @@ -1,5 +1,5 @@ find_package(spdlog REQUIRED) if (NOT TARGET spdlog::spdlog) - message(FATAL_ERROR "spdlog::spdlog target not found") + message(FATAL_ERROR "spdlog::spdlog target not found") endif () diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index ff22e5c42..bbe466b51 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -2,12 +2,11 @@ add_library(clio_app) target_sources(clio_app PRIVATE CliArgs.cpp ClioApplication.cpp Stopper.cpp WebHandlers.cpp) target_link_libraries( - clio_app - PUBLIC clio_cluster - clio_etl - clio_feed - clio_migration - clio_rpc - clio_web - PRIVATE Boost::program_options -) + clio_app + PUBLIC clio_cluster + clio_etl + clio_feed + clio_migration + clio_rpc + clio_web + PRIVATE Boost::program_options) diff --git a/src/cluster/CMakeLists.txt b/src/cluster/CMakeLists.txt index f6460bb23..467f421fc 100644 --- a/src/cluster/CMakeLists.txt +++ b/src/cluster/CMakeLists.txt @@ -1,7 +1,6 @@ add_library(clio_cluster) -target_sources( - clio_cluster PRIVATE Backend.cpp ClioNode.cpp ClusterCommunicationService.cpp Metrics.cpp WriterDecider.cpp -) +target_sources(clio_cluster PRIVATE Backend.cpp ClioNode.cpp ClusterCommunicationService.cpp Metrics.cpp + WriterDecider.cpp) target_link_libraries(clio_cluster PRIVATE clio_util clio_data) diff --git a/src/data/CMakeLists.txt b/src/data/CMakeLists.txt index 678defe7d..d7d1b2d92 100644 --- a/src/data/CMakeLists.txt +++ b/src/data/CMakeLists.txt @@ -1,23 +1,21 @@ add_library(clio_data) -target_sources( - clio_data - PRIVATE AmendmentCenter.cpp - BackendCounters.cpp - BackendInterface.cpp - LedgerCache.cpp - LedgerCacheSaver.cpp - LedgerHeaderCache.cpp - cassandra/impl/Future.cpp - cassandra/impl/Cluster.cpp - cassandra/impl/Batch.cpp - cassandra/impl/Result.cpp - cassandra/impl/Tuple.cpp - cassandra/impl/SslContext.cpp - cassandra/Handle.cpp - cassandra/SettingsProvider.cpp - impl/InputFile.cpp - impl/LedgerCacheFile.cpp - impl/OutputFile.cpp -) +target_sources(clio_data + PRIVATE AmendmentCenter.cpp + BackendCounters.cpp + BackendInterface.cpp + LedgerCache.cpp + LedgerCacheSaver.cpp + LedgerHeaderCache.cpp + cassandra/impl/Future.cpp + cassandra/impl/Cluster.cpp + cassandra/impl/Batch.cpp + cassandra/impl/Result.cpp + cassandra/impl/Tuple.cpp + cassandra/impl/SslContext.cpp + cassandra/Handle.cpp + cassandra/SettingsProvider.cpp + impl/InputFile.cpp + impl/LedgerCacheFile.cpp + impl/OutputFile.cpp) target_link_libraries(clio_data PUBLIC cassandra-cpp-driver::cassandra-cpp-driver clio_util) diff --git a/src/etl/CMakeLists.txt b/src/etl/CMakeLists.txt index 466b0cec1..b9ec0a566 100644 --- a/src/etl/CMakeLists.txt +++ b/src/etl/CMakeLists.txt @@ -1,31 +1,29 @@ add_library(clio_etl) -target_sources( - clio_etl - PRIVATE CacheLoaderSettings.cpp - ETLHelpers.cpp - ETLService.cpp - ETLState.cpp - LoadBalancer.cpp - MPTHelpers.cpp - NetworkValidatedLedgers.cpp - NFTHelpers.cpp - Source.cpp - WriterState.cpp - impl/AmendmentBlockHandler.cpp - impl/AsyncGrpcCall.cpp - impl/Extraction.cpp - impl/ForwardingSource.cpp - impl/GrpcSource.cpp - impl/Loading.cpp - impl/Monitor.cpp - impl/SubscriptionSource.cpp - impl/TaskManager.cpp - impl/ext/Cache.cpp - impl/ext/Core.cpp - impl/ext/MPT.cpp - impl/ext/NFT.cpp - impl/ext/Successor.cpp -) +target_sources(clio_etl + PRIVATE CacheLoaderSettings.cpp + ETLHelpers.cpp + ETLService.cpp + ETLState.cpp + LoadBalancer.cpp + MPTHelpers.cpp + NetworkValidatedLedgers.cpp + NFTHelpers.cpp + Source.cpp + WriterState.cpp + impl/AmendmentBlockHandler.cpp + impl/AsyncGrpcCall.cpp + impl/Extraction.cpp + impl/ForwardingSource.cpp + impl/GrpcSource.cpp + impl/Loading.cpp + impl/Monitor.cpp + impl/SubscriptionSource.cpp + impl/TaskManager.cpp + impl/ext/Cache.cpp + impl/ext/Core.cpp + impl/ext/MPT.cpp + impl/ext/NFT.cpp + impl/ext/Successor.cpp) target_link_libraries(clio_etl PUBLIC clio_data) diff --git a/src/feed/CMakeLists.txt b/src/feed/CMakeLists.txt index 0ca6fd42f..481e74bd3 100644 --- a/src/feed/CMakeLists.txt +++ b/src/feed/CMakeLists.txt @@ -1,7 +1,5 @@ add_library(clio_feed) -target_sources( - clio_feed PRIVATE SubscriptionManager.cpp impl/TransactionFeed.cpp impl/LedgerFeed.cpp - impl/ProposedTransactionFeed.cpp impl/SingleFeedBase.cpp -) +target_sources(clio_feed PRIVATE SubscriptionManager.cpp impl/TransactionFeed.cpp impl/LedgerFeed.cpp + impl/ProposedTransactionFeed.cpp impl/SingleFeedBase.cpp) target_link_libraries(clio_feed PRIVATE clio_util) diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index 45ae9823f..8cb07ebbd 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -4,16 +4,14 @@ target_sources(clio_server PRIVATE Main.cpp) target_link_libraries(clio_server PRIVATE clio_app) if (static) - if (san) - message(FATAL_ERROR "Static linkage not allowed when using sanitizers") - elseif (is_appleclang) - message(FATAL_ERROR "Static linkage not supported on AppleClang") - else () - target_link_options( - # Note: -static-libstdc++ can statically link both libstdc++ and libc++ - clio_server PRIVATE -static-libstdc++ -static-libgcc - ) - endif () + if (san) + message(FATAL_ERROR "Static linkage not allowed when using sanitizers") + elseif (is_appleclang) + message(FATAL_ERROR "Static linkage not supported on AppleClang") + else () + target_link_options(# Note: -static-libstdc++ can statically link both libstdc++ and libc++ + clio_server PRIVATE -static-libstdc++ -static-libgcc) + endif () endif () set_target_properties(clio_server PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) diff --git a/src/migration/CMakeLists.txt b/src/migration/CMakeLists.txt index bc4499aa7..5c629dd32 100644 --- a/src/migration/CMakeLists.txt +++ b/src/migration/CMakeLists.txt @@ -1,8 +1,6 @@ add_library(clio_migration) -target_sources( - clio_migration PRIVATE MigrationApplication.cpp impl/MigrationManagerFactory.cpp MigratorStatus.cpp - cassandra/impl/ObjectsAdapter.cpp cassandra/impl/TransactionsAdapter.cpp -) +target_sources(clio_migration PRIVATE MigrationApplication.cpp impl/MigrationManagerFactory.cpp MigratorStatus.cpp + cassandra/impl/ObjectsAdapter.cpp cassandra/impl/TransactionsAdapter.cpp) target_link_libraries(clio_migration PRIVATE clio_util clio_data) diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt index f06752fc0..e313653d9 100644 --- a/src/rpc/CMakeLists.txt +++ b/src/rpc/CMakeLists.txt @@ -6,55 +6,53 @@ target_link_libraries(clio_rpc_center PUBLIC clio_options) add_library(clio_rpc) -target_sources( - clio_rpc - PRIVATE Errors.cpp - Factories.cpp - AMMHelpers.cpp - RPCHelpers.cpp - CredentialHelpers.cpp - Counters.cpp - WorkQueue.cpp - common/Specs.cpp - common/Validators.cpp - common/MetaProcessors.cpp - common/impl/APIVersionParser.cpp - common/impl/HandlerProvider.cpp - handlers/AccountChannels.cpp - handlers/AccountCurrencies.cpp - handlers/AccountInfo.cpp - handlers/AccountLines.cpp - handlers/AccountMPTokenIssuances.cpp - handlers/AccountMPTokens.cpp - handlers/AccountNFTs.cpp - handlers/AccountObjects.cpp - handlers/AccountOffers.cpp - handlers/AccountTx.cpp - handlers/AMMInfo.cpp - handlers/BookChanges.cpp - handlers/BookOffers.cpp - handlers/DepositAuthorized.cpp - handlers/Feature.cpp - handlers/GatewayBalances.cpp - handlers/GetAggregatePrice.cpp - handlers/Ledger.cpp - handlers/LedgerData.cpp - handlers/LedgerEntry.cpp - handlers/LedgerIndex.cpp - handlers/LedgerRange.cpp - handlers/MPTHolders.cpp - handlers/NFTsByIssuer.cpp - handlers/NFTBuyOffers.cpp - handlers/NFTHistory.cpp - handlers/NFTInfo.cpp - handlers/NFTOffersCommon.cpp - handlers/NFTSellOffers.cpp - handlers/NoRippleCheck.cpp - handlers/Random.cpp - handlers/Subscribe.cpp - handlers/TransactionEntry.cpp - handlers/Unsubscribe.cpp - handlers/VaultInfo.cpp -) +target_sources(clio_rpc + PRIVATE Errors.cpp + Factories.cpp + AMMHelpers.cpp + RPCHelpers.cpp + CredentialHelpers.cpp + Counters.cpp + WorkQueue.cpp + common/Specs.cpp + common/Validators.cpp + common/MetaProcessors.cpp + common/impl/APIVersionParser.cpp + common/impl/HandlerProvider.cpp + handlers/AccountChannels.cpp + handlers/AccountCurrencies.cpp + handlers/AccountInfo.cpp + handlers/AccountLines.cpp + handlers/AccountMPTokenIssuances.cpp + handlers/AccountMPTokens.cpp + handlers/AccountNFTs.cpp + handlers/AccountObjects.cpp + handlers/AccountOffers.cpp + handlers/AccountTx.cpp + handlers/AMMInfo.cpp + handlers/BookChanges.cpp + handlers/BookOffers.cpp + handlers/DepositAuthorized.cpp + handlers/Feature.cpp + handlers/GatewayBalances.cpp + handlers/GetAggregatePrice.cpp + handlers/Ledger.cpp + handlers/LedgerData.cpp + handlers/LedgerEntry.cpp + handlers/LedgerIndex.cpp + handlers/LedgerRange.cpp + handlers/MPTHolders.cpp + handlers/NFTsByIssuer.cpp + handlers/NFTBuyOffers.cpp + handlers/NFTHistory.cpp + handlers/NFTInfo.cpp + handlers/NFTOffersCommon.cpp + handlers/NFTSellOffers.cpp + handlers/NoRippleCheck.cpp + handlers/Random.cpp + handlers/Subscribe.cpp + handlers/TransactionEntry.cpp + handlers/Unsubscribe.cpp + handlers/VaultInfo.cpp) target_link_libraries(clio_rpc PRIVATE clio_util) diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index ba393f29c..d43ec456f 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -2,67 +2,64 @@ add_subdirectory(build) add_library(clio_util) -target_sources( - clio_util - PRIVATE Assert.cpp - Coroutine.cpp - CoroutineGroup.cpp - log/Logger.cpp - log/PrettyPath.cpp - prometheus/Http.cpp - prometheus/Label.cpp - prometheus/MetricBase.cpp - prometheus/MetricBuilder.cpp - prometheus/MetricsFamily.cpp - prometheus/OStream.cpp - prometheus/Prometheus.cpp - Random.cpp - Retry.cpp - Repeat.cpp - requests/RequestBuilder.cpp - requests/Types.cpp - requests/WsConnection.cpp - requests/impl/SslContext.cpp - ResponseExpirationCache.cpp - Shasum.cpp - SignalsHandler.cpp - StopHelper.cpp - StringHash.cpp - Taggable.cpp - TerminationHandler.cpp - TimeUtils.cpp - TxUtils.cpp - LedgerUtils.cpp - config/Array.cpp - config/ArrayView.cpp - config/ConfigConstraints.cpp - config/ConfigDefinition.cpp - config/ConfigFileJson.cpp - config/ObjectView.cpp - config/Types.cpp - config/ValueView.cpp -) +target_sources(clio_util + PRIVATE Assert.cpp + Coroutine.cpp + CoroutineGroup.cpp + log/Logger.cpp + log/PrettyPath.cpp + prometheus/Http.cpp + prometheus/Label.cpp + prometheus/MetricBase.cpp + prometheus/MetricBuilder.cpp + prometheus/MetricsFamily.cpp + prometheus/OStream.cpp + prometheus/Prometheus.cpp + Random.cpp + Retry.cpp + Repeat.cpp + requests/RequestBuilder.cpp + requests/Types.cpp + requests/WsConnection.cpp + requests/impl/SslContext.cpp + ResponseExpirationCache.cpp + Shasum.cpp + SignalsHandler.cpp + StopHelper.cpp + StringHash.cpp + Taggable.cpp + TerminationHandler.cpp + TimeUtils.cpp + TxUtils.cpp + LedgerUtils.cpp + config/Array.cpp + config/ArrayView.cpp + config/ConfigConstraints.cpp + config/ConfigDefinition.cpp + config/ConfigFileJson.cpp + config/ObjectView.cpp + config/Types.cpp + config/ValueView.cpp) # This must be above the target_link_libraries call otherwise backtrace doesn't work if ("${san}" STREQUAL "") - target_link_libraries(clio_util PUBLIC Boost::stacktrace_backtrace) + target_link_libraries(clio_util PUBLIC Boost::stacktrace_backtrace) endif () target_link_libraries( - clio_util - PUBLIC Boost::headers - Boost::iostreams - Boost::coroutine - Boost::context - fmt::fmt - openssl::openssl - xrpl::libxrpl - Threads::Threads - clio_options - clio_rpc_center - clio_build_version - PRIVATE spdlog::spdlog -) + clio_util + PUBLIC Boost::headers + Boost::iostreams + Boost::coroutine + Boost::context + fmt::fmt + openssl::openssl + xrpl::libxrpl + Threads::Threads + clio_options + clio_rpc_center + clio_build_version + PRIVATE spdlog::spdlog) # FIXME: needed on gcc-12, clang-16 and AppleClang for now (known boost 1.82 issue for some compilers) # diff --git a/src/util/build/CMakeLists.txt b/src/util/build/CMakeLists.txt index 740ced03e..1049a3470 100644 --- a/src/util/build/CMakeLists.txt +++ b/src/util/build/CMakeLists.txt @@ -4,6 +4,5 @@ add_library(clio_build_version) target_sources(clio_build_version PRIVATE Build.cpp) target_link_libraries(clio_build_version PUBLIC clio_options) target_compile_definitions( - clio_build_version PRIVATE CLIO_VERSION="${CLIO_VERSION}" GIT_COMMIT_HASH="${GIT_COMMIT_HASH}" - GIT_BUILD_BRANCH="${GIT_BUILD_BRANCH}" BUILD_DATE="${BUILD_DATE}" -) + clio_build_version PRIVATE CLIO_VERSION="${CLIO_VERSION}" GIT_COMMIT_HASH="${GIT_COMMIT_HASH}" + GIT_BUILD_BRANCH="${GIT_BUILD_BRANCH}" BUILD_DATE="${BUILD_DATE}") diff --git a/src/web/CMakeLists.txt b/src/web/CMakeLists.txt index 8df13745e..e8396a623 100644 --- a/src/web/CMakeLists.txt +++ b/src/web/CMakeLists.txt @@ -1,23 +1,21 @@ add_library(clio_web) -target_sources( - clio_web - PRIVATE AdminVerificationStrategy.cpp - dosguard/DOSGuard.cpp - dosguard/IntervalSweepHandler.cpp - dosguard/Weights.cpp - dosguard/WhitelistHandler.cpp - ng/Connection.cpp - ng/impl/ErrorHandling.cpp - ng/impl/ConnectionHandler.cpp - ng/impl/ServerSslContext.cpp - ng/Request.cpp - ng/Response.cpp - ng/Server.cpp - ng/SubscriptionContext.cpp - ProxyIpResolver.cpp - Resolver.cpp - SubscriptionContext.cpp -) +target_sources(clio_web + PRIVATE AdminVerificationStrategy.cpp + dosguard/DOSGuard.cpp + dosguard/IntervalSweepHandler.cpp + dosguard/Weights.cpp + dosguard/WhitelistHandler.cpp + ng/Connection.cpp + ng/impl/ErrorHandling.cpp + ng/impl/ConnectionHandler.cpp + ng/impl/ServerSslContext.cpp + ng/Request.cpp + ng/Response.cpp + ng/Server.cpp + ng/SubscriptionContext.cpp + ProxyIpResolver.cpp + Resolver.cpp + SubscriptionContext.cpp) target_link_libraries(clio_web PUBLIC clio_util) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9d59469cc..dabf0a905 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,20 +1,20 @@ # Set coverage build options if (coverage) - if (NOT tests) - message(FATAL_ERROR "Coverage requires tests to be enabled") - endif () - include(CodeCoverage) - append_coverage_compiler_flags_to_target(clio_options INTERFACE) + if (NOT tests) + message(FATAL_ERROR "Coverage requires tests to be enabled") + endif () + include(CodeCoverage) + append_coverage_compiler_flags_to_target(clio_options INTERFACE) endif () if (tests OR integration_tests) - add_subdirectory(common) + add_subdirectory(common) endif () if (tests) - add_subdirectory(unit) + add_subdirectory(unit) endif () if (integration_tests) - add_subdirectory(integration) + add_subdirectory(integration) endif () diff --git a/tests/common/CMakeLists.txt b/tests/common/CMakeLists.txt index 255c6ecf9..c2a1c79eb 100644 --- a/tests/common/CMakeLists.txt +++ b/tests/common/CMakeLists.txt @@ -1,19 +1,17 @@ add_library(clio_testing_common) -target_sources( - clio_testing_common - PRIVATE util/AssignRandomPort.cpp - util/BinaryTestObject.cpp - util/CallWithTimeout.cpp - util/LoggerFixtures.cpp - util/MockAssert.cpp - util/StringUtils.cpp - util/TestHttpClient.cpp - util/TestHttpServer.cpp - util/TestObject.cpp - util/TestWebSocketClient.cpp - util/TestWsServer.cpp -) +target_sources(clio_testing_common + PRIVATE util/AssignRandomPort.cpp + util/BinaryTestObject.cpp + util/CallWithTimeout.cpp + util/LoggerFixtures.cpp + util/MockAssert.cpp + util/StringUtils.cpp + util/TestHttpClient.cpp + util/TestHttpServer.cpp + util/TestObject.cpp + util/TestWebSocketClient.cpp + util/TestWsServer.cpp) include(deps/gtest) diff --git a/tests/integration/CMakeLists.txt b/tests/integration/CMakeLists.txt index bcb2b882a..846f0aac3 100644 --- a/tests/integration/CMakeLists.txt +++ b/tests/integration/CMakeLists.txt @@ -1,21 +1,19 @@ add_executable(clio_integration_tests) -target_sources( - clio_integration_tests - PRIVATE data/BackendFactoryTests.cpp - data/cassandra/BackendTests.cpp - data/cassandra/BaseTests.cpp - migration/cassandra/DBRawData.cpp - migration/cassandra/CassandraMigrationManagerTests.cpp - migration/cassandra/ExampleTransactionsMigrator.cpp - migration/cassandra/ExampleObjectsMigrator.cpp - migration/cassandra/ExampleLedgerMigrator.cpp - migration/cassandra/ExampleDropTableMigrator.cpp - util/CassandraDBHelper.cpp - # Test runner - TestGlobals.cpp - Main.cpp -) +target_sources(clio_integration_tests + PRIVATE data/BackendFactoryTests.cpp + data/cassandra/BackendTests.cpp + data/cassandra/BaseTests.cpp + migration/cassandra/DBRawData.cpp + migration/cassandra/CassandraMigrationManagerTests.cpp + migration/cassandra/ExampleTransactionsMigrator.cpp + migration/cassandra/ExampleObjectsMigrator.cpp + migration/cassandra/ExampleLedgerMigrator.cpp + migration/cassandra/ExampleDropTableMigrator.cpp + util/CassandraDBHelper.cpp + # Test runner + TestGlobals.cpp + Main.cpp) # Fix for dwarf5 bug on ci. IS STILL NEEDED??? target_compile_options(clio_options INTERFACE -gdwarf-4) diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 600d307f5..1adf13276 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -1,225 +1,223 @@ add_executable(clio_tests) -target_sources( - clio_tests - PRIVATE # Common - app/CliArgsTests.cpp - app/StopperTests.cpp - app/VerifyConfigTests.cpp - app/WebHandlersTests.cpp - data/AmendmentCenterTests.cpp - data/BackendCountersTests.cpp - data/BackendInterfaceTests.cpp - data/LedgerCacheTests.cpp - data/LedgerCacheSaverTests.cpp - data/cassandra/AsyncExecutorTests.cpp - data/cassandra/ExecutionStrategyTests.cpp - data/cassandra/LedgerHeaderCacheTests.cpp - data/cassandra/RetryPolicyTests.cpp - data/cassandra/SettingsProviderTests.cpp - data/impl/InputFileTests.cpp - data/impl/LedgerCacheFileTests.cpp - data/impl/OutputFileTests.cpp - # Cluster - cluster/BackendTests.cpp - cluster/ClioNodeTests.cpp - cluster/ClusterCommunicationServiceTests.cpp - cluster/MetricsTests.cpp - cluster/RepeatedTaskTests.cpp - cluster/WriterDeciderTests.cpp - # ETL - etl/AmendmentBlockHandlerTests.cpp - etl/CacheLoaderSettingsTests.cpp - etl/CacheLoaderTests.cpp - etl/CursorFromAccountProviderTests.cpp - etl/CursorFromDiffProviderTests.cpp - etl/CursorFromFixDiffNumProviderTests.cpp - etl/CorruptionDetectorTests.cpp - etl/ETLStateTests.cpp - etl/ETLServiceTests.cpp - etl/ExtractionTests.cpp - etl/ForwardingSourceTests.cpp - etl/GrpcSourceTests.cpp - etl/LedgerPublisherTests.cpp - etl/LoadBalancerTests.cpp - etl/LoadingTests.cpp - etl/MonitorTests.cpp - etl/NetworkValidatedLedgersTests.cpp - etl/NFTHelpersTests.cpp - etl/RegistryTests.cpp - etl/SchedulingTests.cpp - etl/SourceImplTests.cpp - etl/SubscriptionSourceTests.cpp - etl/SystemStateTests.cpp - etl/TaskManagerTests.cpp - etl/WriterStateTests.cpp - etl/ext/CoreTests.cpp - etl/ext/CacheTests.cpp - etl/ext/MPTTests.cpp - etl/ext/NFTTests.cpp - etl/ext/SuccessorTests.cpp - # Feed - feed/BookChangesFeedTests.cpp - feed/ForwardFeedTests.cpp - feed/LedgerFeedTests.cpp - feed/ProposedTransactionFeedTests.cpp - feed/SingleFeedBaseTests.cpp - feed/SubscriptionManagerTests.cpp - feed/TrackableSignalTests.cpp - feed/TransactionFeedTests.cpp - # Logging - util/log/LogServiceInitTests.cpp - util/log/LoggerTests.cpp - util/log/PrettyPathTests.cpp - # Other - JsonUtilTests.cpp - Main.cpp - Playground.cpp - ProfilerTests.cpp - # Migration - migration/cassandra/FullTableScannerTests.cpp - migration/cassandra/SpecTests.cpp - migration/MigratorRegisterTests.cpp - migration/MigratorStatusTests.cpp - migration/MigrationInspectorFactoryTests.cpp - migration/MigrationInspectorBaseTests.cpp - migration/MigrationManagerBaseTests.cpp - migration/MigrationManagerFactoryTests.cpp - migration/SpecTests.cpp - # RPC - rpc/APIVersionTests.cpp - rpc/BaseTests.cpp - rpc/CountersTests.cpp - rpc/ErrorTests.cpp - rpc/ForwardingProxyTests.cpp - rpc/common/CheckersTests.cpp - rpc/common/SpecsTests.cpp - rpc/common/TypesTests.cpp - rpc/common/impl/HandlerProviderTests.cpp - rpc/handlers/AccountChannelsTests.cpp - rpc/handlers/AccountCurrenciesTests.cpp - rpc/handlers/AccountInfoTests.cpp - rpc/handlers/AccountLinesTests.cpp - rpc/handlers/AccountMPTokenIssuancesTests.cpp - rpc/handlers/AccountMPTokensTests.cpp - rpc/handlers/AccountNFTsTests.cpp - rpc/handlers/AccountObjectsTests.cpp - rpc/handlers/AccountOffersTests.cpp - rpc/handlers/AccountTxTests.cpp - rpc/handlers/AMMInfoTests.cpp - rpc/handlers/AllHandlerTests.cpp - rpc/handlers/BookChangesTests.cpp - rpc/handlers/BookOffersTests.cpp - rpc/handlers/CredentialHelpersTests.cpp - rpc/handlers/DefaultProcessorTests.cpp - rpc/handlers/DepositAuthorizedTests.cpp - rpc/handlers/FeatureTests.cpp - rpc/handlers/GatewayBalancesTests.cpp - rpc/handlers/GetAggregatePriceTests.cpp - rpc/handlers/LedgerDataTests.cpp - rpc/handlers/LedgerEntryTests.cpp - rpc/handlers/LedgerIndexTests.cpp - rpc/handlers/LedgerRangeTests.cpp - rpc/handlers/LedgerTests.cpp - rpc/handlers/MPTHoldersTests.cpp - rpc/handlers/NFTBuyOffersTests.cpp - rpc/handlers/NFTHistoryTests.cpp - rpc/handlers/NFTInfoTests.cpp - rpc/handlers/NFTsByIssuerTest.cpp - rpc/handlers/NFTSellOffersTests.cpp - rpc/handlers/NoRippleCheckTests.cpp - rpc/handlers/PingTests.cpp - rpc/handlers/RandomTests.cpp - rpc/handlers/ServerInfoTests.cpp - rpc/handlers/SubscribeTests.cpp - rpc/handlers/TestHandlerTests.cpp - rpc/handlers/TransactionEntryTests.cpp - rpc/handlers/TxTests.cpp - rpc/handlers/UnsubscribeTests.cpp - rpc/handlers/VersionHandlerTests.cpp - rpc/handlers/VaultInfoTests.cpp - rpc/JsonBoolTests.cpp - rpc/RPCEngineTests.cpp - rpc/RPCHelpersTests.cpp - rpc/WorkQueueTests.cpp - test_data/SslCert.cpp - # Async framework - util/async/AnyExecutionContextTests.cpp - util/async/AnyOperationTests.cpp - util/async/AnyStopTokenTests.cpp - util/async/AnyStrandTests.cpp - util/async/AsyncExecutionContextTests.cpp - util/BatchingTests.cpp - util/BlockingCacheTests.cpp - util/ConceptsTests.cpp - util/CoroutineGroupTests.cpp - util/LedgerUtilsTests.cpp - util/StringHashTests.cpp - # Prometheus support - util/prometheus/BoolTests.cpp - util/prometheus/CounterTests.cpp - util/prometheus/GaugeTests.cpp - util/prometheus/HistogramTests.cpp - util/prometheus/HttpTests.cpp - util/prometheus/LabelTests.cpp - util/prometheus/MetricBuilderTests.cpp - util/prometheus/MetricsFamilyTests.cpp - util/prometheus/OStreamTests.cpp - # Requests framework - util/requests/RequestBuilderTests.cpp - util/requests/SslContextTests.cpp - util/requests/WsConnectionTests.cpp - # Common utils - util/AccountUtilsTests.cpp - util/AssertTests.cpp - util/BytesConverterTests.cpp - util/ChannelTests.cpp - util/CoroutineTest.cpp - util/MoveTrackerTests.cpp - util/ObservableValueTest.cpp - util/ObservableValueAtomicTest.cpp - util/RandomTests.cpp - util/RepeatTests.cpp - util/ResponseExpirationCacheTests.cpp - util/RetryTests.cpp - util/ScopeGuardTests.cpp - util/SignalsHandlerTests.cpp - util/ShasumTests.cpp - util/SpawnTests.cpp - util/StopHelperTests.cpp - util/TimeUtilsTests.cpp - util/TxUtilTests.cpp - util/WithTimeout.cpp - # Webserver - web/AdminVerificationTests.cpp - web/dosguard/DOSGuardTests.cpp - web/dosguard/IntervalSweepHandlerTests.cpp - web/dosguard/WeightsTests.cpp - web/dosguard/WhitelistHandlerTests.cpp - web/impl/ErrorHandlingTests.cpp - web/ng/ResponseTests.cpp - web/ng/RequestTests.cpp - web/ng/RPCServerHandlerTests.cpp - web/ng/ServerTests.cpp - web/ng/SubscriptionContextTests.cpp - web/ng/impl/ConnectionHandlerTests.cpp - web/ng/impl/ErrorHandlingTests.cpp - web/ng/impl/HttpConnectionTests.cpp - web/ng/impl/ServerSslContextTests.cpp - web/ng/impl/WsConnectionTests.cpp - web/ProxyIpResolverTests.cpp - web/RPCServerHandlerTests.cpp - web/ServerTests.cpp - web/SubscriptionContextTests.cpp - # Config - util/config/ArrayTests.cpp - util/config/ArrayViewTests.cpp - util/config/ClioConfigDefinitionTests.cpp - util/config/ConfigValueTests.cpp - util/config/ObjectViewTests.cpp - util/config/ConfigFileJsonTests.cpp - util/config/ValueViewTests.cpp -) +target_sources(clio_tests + PRIVATE # Common + app/CliArgsTests.cpp + app/StopperTests.cpp + app/VerifyConfigTests.cpp + app/WebHandlersTests.cpp + data/AmendmentCenterTests.cpp + data/BackendCountersTests.cpp + data/BackendInterfaceTests.cpp + data/LedgerCacheTests.cpp + data/LedgerCacheSaverTests.cpp + data/cassandra/AsyncExecutorTests.cpp + data/cassandra/ExecutionStrategyTests.cpp + data/cassandra/LedgerHeaderCacheTests.cpp + data/cassandra/RetryPolicyTests.cpp + data/cassandra/SettingsProviderTests.cpp + data/impl/InputFileTests.cpp + data/impl/LedgerCacheFileTests.cpp + data/impl/OutputFileTests.cpp + # Cluster + cluster/BackendTests.cpp + cluster/ClioNodeTests.cpp + cluster/ClusterCommunicationServiceTests.cpp + cluster/MetricsTests.cpp + cluster/RepeatedTaskTests.cpp + cluster/WriterDeciderTests.cpp + # ETL + etl/AmendmentBlockHandlerTests.cpp + etl/CacheLoaderSettingsTests.cpp + etl/CacheLoaderTests.cpp + etl/CursorFromAccountProviderTests.cpp + etl/CursorFromDiffProviderTests.cpp + etl/CursorFromFixDiffNumProviderTests.cpp + etl/CorruptionDetectorTests.cpp + etl/ETLStateTests.cpp + etl/ETLServiceTests.cpp + etl/ExtractionTests.cpp + etl/ForwardingSourceTests.cpp + etl/GrpcSourceTests.cpp + etl/LedgerPublisherTests.cpp + etl/LoadBalancerTests.cpp + etl/LoadingTests.cpp + etl/MonitorTests.cpp + etl/NetworkValidatedLedgersTests.cpp + etl/NFTHelpersTests.cpp + etl/RegistryTests.cpp + etl/SchedulingTests.cpp + etl/SourceImplTests.cpp + etl/SubscriptionSourceTests.cpp + etl/SystemStateTests.cpp + etl/TaskManagerTests.cpp + etl/WriterStateTests.cpp + etl/ext/CoreTests.cpp + etl/ext/CacheTests.cpp + etl/ext/MPTTests.cpp + etl/ext/NFTTests.cpp + etl/ext/SuccessorTests.cpp + # Feed + feed/BookChangesFeedTests.cpp + feed/ForwardFeedTests.cpp + feed/LedgerFeedTests.cpp + feed/ProposedTransactionFeedTests.cpp + feed/SingleFeedBaseTests.cpp + feed/SubscriptionManagerTests.cpp + feed/TrackableSignalTests.cpp + feed/TransactionFeedTests.cpp + # Logging + util/log/LogServiceInitTests.cpp + util/log/LoggerTests.cpp + util/log/PrettyPathTests.cpp + # Other + JsonUtilTests.cpp + Main.cpp + Playground.cpp + ProfilerTests.cpp + # Migration + migration/cassandra/FullTableScannerTests.cpp + migration/cassandra/SpecTests.cpp + migration/MigratorRegisterTests.cpp + migration/MigratorStatusTests.cpp + migration/MigrationInspectorFactoryTests.cpp + migration/MigrationInspectorBaseTests.cpp + migration/MigrationManagerBaseTests.cpp + migration/MigrationManagerFactoryTests.cpp + migration/SpecTests.cpp + # RPC + rpc/APIVersionTests.cpp + rpc/BaseTests.cpp + rpc/CountersTests.cpp + rpc/ErrorTests.cpp + rpc/ForwardingProxyTests.cpp + rpc/common/CheckersTests.cpp + rpc/common/SpecsTests.cpp + rpc/common/TypesTests.cpp + rpc/common/impl/HandlerProviderTests.cpp + rpc/handlers/AccountChannelsTests.cpp + rpc/handlers/AccountCurrenciesTests.cpp + rpc/handlers/AccountInfoTests.cpp + rpc/handlers/AccountLinesTests.cpp + rpc/handlers/AccountMPTokenIssuancesTests.cpp + rpc/handlers/AccountMPTokensTests.cpp + rpc/handlers/AccountNFTsTests.cpp + rpc/handlers/AccountObjectsTests.cpp + rpc/handlers/AccountOffersTests.cpp + rpc/handlers/AccountTxTests.cpp + rpc/handlers/AMMInfoTests.cpp + rpc/handlers/AllHandlerTests.cpp + rpc/handlers/BookChangesTests.cpp + rpc/handlers/BookOffersTests.cpp + rpc/handlers/CredentialHelpersTests.cpp + rpc/handlers/DefaultProcessorTests.cpp + rpc/handlers/DepositAuthorizedTests.cpp + rpc/handlers/FeatureTests.cpp + rpc/handlers/GatewayBalancesTests.cpp + rpc/handlers/GetAggregatePriceTests.cpp + rpc/handlers/LedgerDataTests.cpp + rpc/handlers/LedgerEntryTests.cpp + rpc/handlers/LedgerIndexTests.cpp + rpc/handlers/LedgerRangeTests.cpp + rpc/handlers/LedgerTests.cpp + rpc/handlers/MPTHoldersTests.cpp + rpc/handlers/NFTBuyOffersTests.cpp + rpc/handlers/NFTHistoryTests.cpp + rpc/handlers/NFTInfoTests.cpp + rpc/handlers/NFTsByIssuerTest.cpp + rpc/handlers/NFTSellOffersTests.cpp + rpc/handlers/NoRippleCheckTests.cpp + rpc/handlers/PingTests.cpp + rpc/handlers/RandomTests.cpp + rpc/handlers/ServerInfoTests.cpp + rpc/handlers/SubscribeTests.cpp + rpc/handlers/TestHandlerTests.cpp + rpc/handlers/TransactionEntryTests.cpp + rpc/handlers/TxTests.cpp + rpc/handlers/UnsubscribeTests.cpp + rpc/handlers/VersionHandlerTests.cpp + rpc/handlers/VaultInfoTests.cpp + rpc/JsonBoolTests.cpp + rpc/RPCEngineTests.cpp + rpc/RPCHelpersTests.cpp + rpc/WorkQueueTests.cpp + test_data/SslCert.cpp + # Async framework + util/async/AnyExecutionContextTests.cpp + util/async/AnyOperationTests.cpp + util/async/AnyStopTokenTests.cpp + util/async/AnyStrandTests.cpp + util/async/AsyncExecutionContextTests.cpp + util/BatchingTests.cpp + util/BlockingCacheTests.cpp + util/ConceptsTests.cpp + util/CoroutineGroupTests.cpp + util/LedgerUtilsTests.cpp + util/StringHashTests.cpp + # Prometheus support + util/prometheus/BoolTests.cpp + util/prometheus/CounterTests.cpp + util/prometheus/GaugeTests.cpp + util/prometheus/HistogramTests.cpp + util/prometheus/HttpTests.cpp + util/prometheus/LabelTests.cpp + util/prometheus/MetricBuilderTests.cpp + util/prometheus/MetricsFamilyTests.cpp + util/prometheus/OStreamTests.cpp + # Requests framework + util/requests/RequestBuilderTests.cpp + util/requests/SslContextTests.cpp + util/requests/WsConnectionTests.cpp + # Common utils + util/AccountUtilsTests.cpp + util/AssertTests.cpp + util/BytesConverterTests.cpp + util/ChannelTests.cpp + util/CoroutineTest.cpp + util/MoveTrackerTests.cpp + util/ObservableValueTest.cpp + util/ObservableValueAtomicTest.cpp + util/RandomTests.cpp + util/RepeatTests.cpp + util/ResponseExpirationCacheTests.cpp + util/RetryTests.cpp + util/ScopeGuardTests.cpp + util/SignalsHandlerTests.cpp + util/ShasumTests.cpp + util/SpawnTests.cpp + util/StopHelperTests.cpp + util/TimeUtilsTests.cpp + util/TxUtilTests.cpp + util/WithTimeout.cpp + # Webserver + web/AdminVerificationTests.cpp + web/dosguard/DOSGuardTests.cpp + web/dosguard/IntervalSweepHandlerTests.cpp + web/dosguard/WeightsTests.cpp + web/dosguard/WhitelistHandlerTests.cpp + web/impl/ErrorHandlingTests.cpp + web/ng/ResponseTests.cpp + web/ng/RequestTests.cpp + web/ng/RPCServerHandlerTests.cpp + web/ng/ServerTests.cpp + web/ng/SubscriptionContextTests.cpp + web/ng/impl/ConnectionHandlerTests.cpp + web/ng/impl/ErrorHandlingTests.cpp + web/ng/impl/HttpConnectionTests.cpp + web/ng/impl/ServerSslContextTests.cpp + web/ng/impl/WsConnectionTests.cpp + web/ProxyIpResolverTests.cpp + web/RPCServerHandlerTests.cpp + web/ServerTests.cpp + web/SubscriptionContextTests.cpp + # Config + util/config/ArrayTests.cpp + util/config/ArrayViewTests.cpp + util/config/ClioConfigDefinitionTests.cpp + util/config/ConfigValueTests.cpp + util/config/ObjectViewTests.cpp + util/config/ConfigFileJsonTests.cpp + util/config/ValueViewTests.cpp) # See https://github.com/google/googletest/issues/3475 gtest_discover_tests(clio_tests DISCOVERY_TIMEOUT 90) @@ -233,37 +231,36 @@ set_target_properties(clio_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BIN # Generate `coverage_report` target if coverage is enabled if (coverage) - if (DEFINED CODE_COVERAGE_REPORT_FORMAT) - set(CODE_COVERAGE_FORMAT ${CODE_COVERAGE_REPORT_FORMAT}) - else () - set(CODE_COVERAGE_FORMAT html-details) - endif () + if (DEFINED CODE_COVERAGE_REPORT_FORMAT) + set(CODE_COVERAGE_FORMAT ${CODE_COVERAGE_REPORT_FORMAT}) + else () + set(CODE_COVERAGE_FORMAT html-details) + endif () - if (DEFINED CODE_COVERAGE_TESTS_ARGS) - set(TESTS_ADDITIONAL_ARGS ${CODE_COVERAGE_TESTS_ARGS}) - separate_arguments(TESTS_ADDITIONAL_ARGS) - else () - set(TESTS_ADDITIONAL_ARGS "") - endif () + if (DEFINED CODE_COVERAGE_TESTS_ARGS) + set(TESTS_ADDITIONAL_ARGS ${CODE_COVERAGE_TESTS_ARGS}) + separate_arguments(TESTS_ADDITIONAL_ARGS) + else () + set(TESTS_ADDITIONAL_ARGS "") + endif () - set(GCOVR_ADDITIONAL_ARGS --exclude-throw-branches -s) + set(GCOVR_ADDITIONAL_ARGS --exclude-throw-branches -s) - setup_target_for_coverage_gcovr( - NAME - coverage_report - FORMAT - ${CODE_COVERAGE_FORMAT} - EXECUTABLE - clio_tests - EXECUTABLE_ARGS - --gtest_brief=1 - ${TESTS_ADDITIONAL_ARGS} - EXCLUDE - "tests" - "src/data/cassandra" - "src/data/CassandraBackend.hpp" - "src/data/BackendFactory.*" - DEPENDENCIES - clio_tests - ) + setup_target_for_coverage_gcovr( + NAME + coverage_report + FORMAT + ${CODE_COVERAGE_FORMAT} + EXECUTABLE + clio_tests + EXECUTABLE_ARGS + --gtest_brief=1 + ${TESTS_ADDITIONAL_ARGS} + EXCLUDE + "tests" + "src/data/cassandra" + "src/data/CassandraBackend.hpp" + "src/data/BackendFactory.*" + DEPENDENCIES + clio_tests) endif () diff --git a/tools/snapshot/CMakeLists.txt b/tools/snapshot/CMakeLists.txt index f150cd2d6..1d3eeeaf3 100644 --- a/tools/snapshot/CMakeLists.txt +++ b/tools/snapshot/CMakeLists.txt @@ -13,8 +13,7 @@ set(PROTO_FILES ${PROTO_SOURCE_DIR}/get_ledger.proto ${PROTO_SOURCE_DIR}/get_ledger_entry.proto ${PROTO_SOURCE_DIR}/get_ledger_data.proto - ${PROTO_SOURCE_DIR}/get_ledger_diff.proto -) + ${PROTO_SOURCE_DIR}/get_ledger_diff.proto) execute_process(COMMAND go env GOPATH OUTPUT_VARIABLE GOPATH_VALUE OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -27,45 +26,40 @@ set(GRPC_OPTS "") # Loop through each proto file foreach (proto ${PROTO_FILES}) - get_filename_component(proto_filename ${proto} NAME) + get_filename_component(proto_filename ${proto} NAME) - # Build the --go_opt and --go-grpc_opt mappings - set(GO_OPTS ${GO_OPTS} --go_opt=M${GO_IMPORT_PATH}/${proto_filename}=${GO_IMPORT_PATH}) - set(GRPC_OPTS ${GRPC_OPTS} --go-grpc_opt=M${GO_IMPORT_PATH}/${proto_filename}=${GO_IMPORT_PATH}) + # Build the --go_opt and --go-grpc_opt mappings + set(GO_OPTS ${GO_OPTS} --go_opt=M${GO_IMPORT_PATH}/${proto_filename}=${GO_IMPORT_PATH}) + set(GRPC_OPTS ${GRPC_OPTS} --go-grpc_opt=M${GO_IMPORT_PATH}/${proto_filename}=${GO_IMPORT_PATH}) endforeach () foreach (proto ${PROTO_FILES}) - get_filename_component(proto_name ${proto} NAME_WE) - add_custom_command( - OUTPUT ${GO_SOURCE_DIR}/${GO_IMPORT_PATH}/${proto_name}.pb.go - COMMAND - protoc ${GO_OPTS} ${GRPC_OPTS} --go-grpc_out=${GO_SOURCE_DIR} -I${PROTO_INC_DIR} ${proto} - --plugin=${GOPATH_VALUE}/bin/protoc-gen-go --plugin=${GOPATH_VALUE}/bin/protoc-gen-go-grpc - --go_out=${GO_SOURCE_DIR}/ - DEPENDS ${proto} - COMMENT "Generating Go code for ${proto}" - VERBATIM - ) + get_filename_component(proto_name ${proto} NAME_WE) + add_custom_command( + OUTPUT ${GO_SOURCE_DIR}/${GO_IMPORT_PATH}/${proto_name}.pb.go + COMMAND protoc ${GO_OPTS} ${GRPC_OPTS} --go-grpc_out=${GO_SOURCE_DIR} -I${PROTO_INC_DIR} ${proto} + --plugin=${GOPATH_VALUE}/bin/protoc-gen-go --plugin=${GOPATH_VALUE}/bin/protoc-gen-go-grpc + --go_out=${GO_SOURCE_DIR}/ + DEPENDS ${proto} + COMMENT "Generating Go code for ${proto}" + VERBATIM) - list(APPEND GENERATED_GO_FILES ${GO_SOURCE_DIR}/${GO_IMPORT_PATH}/${proto_name}.pb.go) + list(APPEND GENERATED_GO_FILES ${GO_SOURCE_DIR}/${GO_IMPORT_PATH}/${proto_name}.pb.go) endforeach () add_custom_target(build_clio_snapshot ALL DEPENDS run_go_tests ${GO_OUTPUT}) -add_custom_target( - run_go_tests - COMMAND go test ./... - WORKING_DIRECTORY ${GO_SOURCE_DIR} - DEPENDS ${GENERATED_GO_FILES} - COMMENT "Running clio_snapshot unittests" - VERBATIM -) +add_custom_target(run_go_tests + COMMAND go test ./... + WORKING_DIRECTORY ${GO_SOURCE_DIR} + DEPENDS ${GENERATED_GO_FILES} + COMMENT "Running clio_snapshot unittests" + VERBATIM) add_custom_command( - OUTPUT ${GO_OUTPUT} - COMMAND ${GO_EXECUTABLE} build -o ${GO_OUTPUT} ${GO_SOURCE_DIR} - WORKING_DIRECTORY ${GO_SOURCE_DIR} - DEPENDS ${GO_SOURCES} - COMMENT "Building clio_snapshot" - VERBATIM -) + OUTPUT ${GO_OUTPUT} + COMMAND ${GO_EXECUTABLE} build -o ${GO_OUTPUT} ${GO_SOURCE_DIR} + WORKING_DIRECTORY ${GO_SOURCE_DIR} + DEPENDS ${GO_SOURCES} + COMMENT "Building clio_snapshot" + VERBATIM)