mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
152 lines
4.3 KiB
CMake
152 lines
4.3 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)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 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 ()
|