mirror of
https://github.com/XRPLF/rippled.git
synced 2026-02-06 23:15:32 +00:00
This change adds `cmake-format` as. a pre-commit hook. The style file closely matches that in Clio, and they will be made to be equivalent over time. For now, some files have been excluded, as those need some manual adjustments, which will be done in future changes.
148 lines
4.2 KiB
CMake
148 lines
4.2 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
|
|
if (POLICY CMP0074)
|
|
cmake_policy(SET CMP0074 NEW)
|
|
endif ()
|
|
if (POLICY CMP0077)
|
|
cmake_policy(SET CMP0077 NEW)
|
|
endif ()
|
|
|
|
# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
|
|
if (DEFINED CMAKE_MODULE_PATH)
|
|
file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH)
|
|
endif ()
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
project(xrpl)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
include(CompilationEnv)
|
|
|
|
if (is_gcc)
|
|
# GCC-specific fixes
|
|
add_compile_options(-Wno-unknown-pragmas -Wno-subobject-linkage)
|
|
# -Wno-subobject-linkage can be removed when we upgrade GCC version to at least 13.3
|
|
elseif (is_clang)
|
|
# Clang-specific fixes
|
|
add_compile_options(-Wno-unknown-warning-option) # Ignore unknown warning options
|
|
elseif (is_msvc)
|
|
# MSVC-specific fixes
|
|
add_compile_options(/wd4068) # Ignore unknown pragmas
|
|
endif ()
|
|
|
|
# Enable ccache to speed up builds.
|
|
include(Ccache)
|
|
|
|
# make GIT_COMMIT_HASH define available to all sources
|
|
find_package(Git)
|
|
if (Git_FOUND)
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse HEAD
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gch)
|
|
if (gch)
|
|
set(GIT_COMMIT_HASH "${gch}")
|
|
message(STATUS gch: ${GIT_COMMIT_HASH})
|
|
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
|
endif ()
|
|
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse --abbrev-ref HEAD
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gb)
|
|
if (gb)
|
|
set(GIT_BRANCH "${gb}")
|
|
message(STATUS gb: ${GIT_BRANCH})
|
|
add_definitions(-DGIT_BRANCH="${GIT_BRANCH}")
|
|
endif ()
|
|
endif () # git
|
|
|
|
if (thread_safety_analysis)
|
|
add_compile_options(-Wthread-safety -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS
|
|
-DXRPL_ENABLE_THREAD_SAFETY_ANNOTATIONS)
|
|
add_compile_options("-stdlib=libc++")
|
|
add_link_options("-stdlib=libc++")
|
|
endif ()
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
include(FetchContent)
|
|
include(ExternalProject)
|
|
include(CMakeFuncs) # must come *after* ExternalProject b/c it overrides one function in EP
|
|
if (target)
|
|
message(FATAL_ERROR "The target option has been removed - use native cmake options to control build")
|
|
endif ()
|
|
|
|
include(XrplSanity)
|
|
include(XrplVersion)
|
|
include(XrplSettings)
|
|
# this check has to remain in the top-level cmake because of the early return statement
|
|
if (packages_only)
|
|
if (NOT TARGET rpm)
|
|
message(FATAL_ERROR "packages_only requested, but targets were not created - is docker installed?")
|
|
endif ()
|
|
return()
|
|
endif ()
|
|
include(XrplCompiler)
|
|
include(XrplSanitizers)
|
|
include(XrplInterface)
|
|
|
|
option(only_docs "Include only the docs target?" FALSE)
|
|
include(XrplDocs)
|
|
if (only_docs)
|
|
return()
|
|
endif ()
|
|
|
|
include(deps/Boost)
|
|
|
|
add_subdirectory(external/antithesis-sdk)
|
|
find_package(date REQUIRED)
|
|
find_package(ed25519 REQUIRED)
|
|
find_package(gRPC REQUIRED)
|
|
find_package(LibArchive REQUIRED)
|
|
find_package(lz4 REQUIRED)
|
|
find_package(nudb REQUIRED)
|
|
find_package(OpenSSL REQUIRED)
|
|
find_package(secp256k1 REQUIRED)
|
|
find_package(SOCI REQUIRED)
|
|
find_package(SQLite3 REQUIRED)
|
|
find_package(xxHash REQUIRED)
|
|
|
|
target_link_libraries(
|
|
xrpl_libs
|
|
INTERFACE ed25519::ed25519
|
|
lz4::lz4
|
|
OpenSSL::Crypto
|
|
OpenSSL::SSL
|
|
secp256k1::secp256k1
|
|
soci::soci
|
|
SQLite::SQLite3)
|
|
|
|
option(rocksdb "Enable RocksDB" ON)
|
|
if (rocksdb)
|
|
find_package(RocksDB REQUIRED)
|
|
set_target_properties(RocksDB::rocksdb PROPERTIES INTERFACE_COMPILE_DEFINITIONS XRPL_ROCKSDB_AVAILABLE=1)
|
|
target_link_libraries(xrpl_libs INTERFACE RocksDB::rocksdb)
|
|
endif ()
|
|
|
|
# Work around changes to Conan recipe for now.
|
|
if (TARGET nudb::core)
|
|
set(nudb nudb::core)
|
|
elseif (TARGET NuDB::nudb)
|
|
set(nudb NuDB::nudb)
|
|
else ()
|
|
message(FATAL_ERROR "unknown nudb target")
|
|
endif ()
|
|
target_link_libraries(xrpl_libs INTERFACE ${nudb})
|
|
|
|
if (coverage)
|
|
include(XrplCov)
|
|
endif ()
|
|
|
|
set(PROJECT_EXPORT_SET XrplExports)
|
|
include(XrplCore)
|
|
include(XrplInstall)
|
|
include(XrplValidatorKeys)
|
|
|
|
if (tests)
|
|
include(CTest)
|
|
add_subdirectory(src/tests/libxrpl)
|
|
endif ()
|