mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
In certain cases, such as when modifying headers used by many compilation units, performing a unity build is slower than when performing a regular build with `ccache` enabled. There is also a benefit to a unity build in that it can detect things such as macro redefinitions within the group of files that are compiled together as a unit. This change therefore restores the ability to perform unity builds. However, instead of running every configuration with and without unity enabled, it is now only enabled for a single configuration to maintain lower computational use. As part of restoring the code, it became clear that currently two configurations have coverage enabled, since the check doesn't focus specifically on Debian Bookworm so it also applies to Debian Trixie. This has been fixed too in this change.
115 lines
4.5 KiB
CMake
115 lines
4.5 KiB
CMake
#[===================================================================[
|
|
declare options and variables
|
|
#]===================================================================]
|
|
|
|
include(CompilationEnv)
|
|
|
|
set(is_ci FALSE)
|
|
if (DEFINED ENV{CI})
|
|
if ("$ENV{CI}" STREQUAL "true")
|
|
set(is_ci TRUE)
|
|
endif ()
|
|
endif ()
|
|
|
|
get_directory_property(has_parent PARENT_DIRECTORY)
|
|
if (has_parent)
|
|
set(is_root_project OFF)
|
|
else ()
|
|
set(is_root_project ON)
|
|
endif ()
|
|
|
|
option(assert "Enables asserts, even in release builds" OFF)
|
|
|
|
option(xrpld "Build xrpld" ON)
|
|
|
|
option(tests "Build tests" ON)
|
|
if (tests)
|
|
# This setting allows making a separate workflow to test fees other than default 10
|
|
if (NOT UNIT_TEST_REFERENCE_FEE)
|
|
set(UNIT_TEST_REFERENCE_FEE "10" CACHE STRING "")
|
|
endif ()
|
|
endif ()
|
|
|
|
option(unity "Creates a build using UNITY support in cmake." OFF)
|
|
if (unity)
|
|
if (NOT is_ci)
|
|
set(CMAKE_UNITY_BUILD_BATCH_SIZE 15 CACHE STRING "")
|
|
endif ()
|
|
set(CMAKE_UNITY_BUILD ON CACHE BOOL "Do a unity build")
|
|
endif ()
|
|
|
|
if (is_clang AND is_linux)
|
|
option(voidstar "Enable Antithesis instrumentation." OFF)
|
|
endif ()
|
|
|
|
if (is_gcc OR is_clang)
|
|
include(ProcessorCount)
|
|
ProcessorCount(PROCESSOR_COUNT)
|
|
|
|
option(coverage "Generates coverage info." OFF)
|
|
option(profile "Add profiling flags" OFF)
|
|
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.")
|
|
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 AND NOT SANITIZER)
|
|
option(BUILD_SHARED_LIBS "build shared xrpl 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)
|
|
# Set a default value for the log flag based on the build type. This provides a sensible default (on for debug, off
|
|
# for release) while still allowing the user to override it for any build.
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(TRUNCATED_LOGS_DEFAULT ON)
|
|
else ()
|
|
set(TRUNCATED_LOGS_DEFAULT OFF)
|
|
endif ()
|
|
option(TRUNCATED_THREAD_NAME_LOGS "Show warnings about truncated thread names on Linux." ${TRUNCATED_LOGS_DEFAULT})
|
|
if (TRUNCATED_THREAD_NAME_LOGS)
|
|
add_compile_definitions(TRUNCATED_THREAD_NAME_LOGS)
|
|
endif ()
|
|
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 xrpl 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)
|
|
|
|
# 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_context::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)
|
|
|
|
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 ()
|