mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-18 18:15:50 +00:00
* Speed up the generation of coverage reports by using multiple cores. * Add codecov step to coverage workflow.
131 lines
5.2 KiB
CMake
131 lines
5.2 KiB
CMake
#[===================================================================[
|
|
declare user options/settings
|
|
#]===================================================================]
|
|
|
|
include(ProcessorCount)
|
|
|
|
ProcessorCount(PROCESSOR_COUNT)
|
|
|
|
option(assert "Enables asserts, even in release builds" OFF)
|
|
|
|
option(reporting "Build rippled with reporting mode enabled" OFF)
|
|
|
|
option(tests "Build tests" ON)
|
|
|
|
option(unity "Creates a build using UNITY support in cmake. This is the default" ON)
|
|
if(unity)
|
|
if(NOT is_ci)
|
|
set(CMAKE_UNITY_BUILD_BATCH_SIZE 15 CACHE STRING "")
|
|
endif()
|
|
endif()
|
|
if(is_gcc OR is_clang)
|
|
option(coverage "Generates coverage info." OFF)
|
|
option(profile "Add profiling flags" OFF)
|
|
set(coverage_test_parallelism "${PROCESSOR_COUNT}" CACHE STRING
|
|
"Unit tests parallelism for the purpose of coverage report.")
|
|
set(coverage_format "html-details" CACHE STRING
|
|
"Output format of the coverage report.")
|
|
set(coverage_extra_args "" CACHE STRING
|
|
"Additional arguments to pass to gcovr.")
|
|
set(coverage_test "" CACHE STRING
|
|
"On gcc & clang, the specific unit test(s) to run for coverage. Default is all tests.")
|
|
if(coverage_test AND NOT coverage)
|
|
set(coverage ON CACHE BOOL "gcc/clang only" FORCE)
|
|
endif()
|
|
option(wextra "compile with extra gcc/clang warnings enabled" ON)
|
|
else()
|
|
set(profile OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
set(coverage OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
set(wextra OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
endif()
|
|
if(is_linux)
|
|
option(BUILD_SHARED_LIBS "build shared ripple libraries" OFF)
|
|
option(static "link protobuf, openssl, libc++, and boost statically" ON)
|
|
option(perf "Enables flags that assist with perf recording" OFF)
|
|
option(use_gold "enables detection of gold (binutils) linker" ON)
|
|
option(use_mold "enables detection of mold (binutils) linker" ON)
|
|
else()
|
|
# we are not ready to allow shared-libs on windows because it would require
|
|
# export declarations. On macos it's more feasible, but static openssl
|
|
# produces odd linker errors, thus we disable shared lib builds for now.
|
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "build shared ripple libraries - OFF for win/macos" FORCE)
|
|
set(static ON CACHE BOOL "static link, linux only. ON for WIN/macos" FORCE)
|
|
set(perf OFF CACHE BOOL "perf flags, linux only" FORCE)
|
|
set(use_gold OFF CACHE BOOL "gold linker, linux only" FORCE)
|
|
set(use_mold OFF CACHE BOOL "mold linker, linux only" FORCE)
|
|
endif()
|
|
if(is_clang)
|
|
option(use_lld "enables detection of lld linker" ON)
|
|
else()
|
|
set(use_lld OFF CACHE BOOL "try lld linker, clang only" FORCE)
|
|
endif()
|
|
option(jemalloc "Enables jemalloc for heap profiling" OFF)
|
|
option(werr "treat warnings as errors" OFF)
|
|
option(local_protobuf
|
|
"Force a local build of protobuf instead of looking for an installed version." OFF)
|
|
option(local_grpc
|
|
"Force a local build of gRPC instead of looking for an installed version." OFF)
|
|
|
|
# this one is a string and therefore can't be an option
|
|
set(san "" CACHE STRING "On gcc & clang, add sanitizer instrumentation")
|
|
set_property(CACHE san PROPERTY STRINGS ";undefined;memory;address;thread")
|
|
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")
|
|
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(container_label "" CACHE STRING "tag to use for package building containers")
|
|
option(packages_only
|
|
"ONLY generate package building targets. This is special use-case and almost \
|
|
certainly not what you want. Use with caution as you won't be able to build \
|
|
any compiled targets locally." OFF)
|
|
option(have_package_container
|
|
"Sometimes you already have the tagged container you want to use for package \
|
|
building and you don't want docker to rebuild it. This flag will detach the \
|
|
dependency of the package build from the container build. It's an advanced \
|
|
use case and most likely you should not be touching this flag." OFF)
|
|
|
|
# the remaining options are obscure and rarely used
|
|
option(beast_no_unit_test_inline
|
|
"Prevents unit test definitions from being inserted into global table"
|
|
OFF)
|
|
option(single_io_service_thread
|
|
"Restricts the number of threads calling io_service::run to one. \
|
|
This can be useful when debugging."
|
|
OFF)
|
|
option(boost_show_deprecated
|
|
"Allow boost to fail on deprecated usage. Only useful if you're trying\
|
|
to find deprecated calls."
|
|
OFF)
|
|
option(beast_hashers
|
|
"Use local implementations for sha/ripemd hashes (experimental, not recommended)"
|
|
OFF)
|
|
|
|
if(WIN32)
|
|
option(beast_disable_autolink "Disables autolinking of system libraries on WIN32" OFF)
|
|
else()
|
|
set(beast_disable_autolink OFF CACHE BOOL "WIN32 only" FORCE)
|
|
endif()
|
|
if(coverage)
|
|
message(STATUS "coverage build requested - forcing Debug build")
|
|
set(CMAKE_BUILD_TYPE Debug CACHE STRING "build type" FORCE)
|
|
endif()
|