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 ()