From 905f631b716d1bbc91caad48b207c8d2e76e5c5b Mon Sep 17 00:00:00 2001 From: Mo Morsi Date: Thu, 29 Aug 2019 13:58:29 -0400 Subject: [PATCH] Modularize cmake build config --- .travis.yml | 1 + Builds/CMake/RippledCompiler.cmake | 165 + Builds/CMake/RippledCore.cmake | 1016 ++++++ Builds/CMake/RippledCov.cmake | 98 + Builds/CMake/RippledDocs.cmake | 31 + Builds/CMake/RippledInstall.cmake | 51 + Builds/CMake/RippledInterface.cmake | 108 + Builds/CMake/RippledMultiConfig.cmake | 39 + Builds/CMake/RippledNIH.cmake | 33 + Builds/CMake/RippledRelease.cmake | 181 + Builds/CMake/RippledSanity.cmake | 88 + Builds/CMake/RippledSettings.cmake | 114 + Builds/CMake/RippledValidatorKeys.cmake | 24 + Builds/CMake/RippledVersion.cmake | 15 + Builds/CMake/deps/Boost.cmake | 92 + Builds/CMake/deps/Ed25519-donna.cmake | 28 + Builds/CMake/deps/Libarchive.cmake | 101 + Builds/CMake/deps/Lz4.cmake | 60 + Builds/CMake/deps/Nudb.cmake | 47 + Builds/CMake/deps/OpenSSL.cmake | 48 + Builds/CMake/deps/Protobuf.cmake | 124 + Builds/CMake/deps/Rocksdb.cmake | 115 + Builds/CMake/deps/Secp256k1.cmake | 35 + Builds/CMake/deps/Snappy.cmake | 59 + Builds/CMake/deps/Soci.cmake | 121 + Builds/CMake/deps/Sqlite.cmake | 67 + Builds/containers/packaging/dpkg/debian/rules | 1 + Builds/containers/packaging/rpm/rippled.spec | 2 +- CMakeLists.txt | 2922 +---------------- 29 files changed, 2898 insertions(+), 2888 deletions(-) create mode 100644 Builds/CMake/RippledCompiler.cmake create mode 100644 Builds/CMake/RippledCore.cmake create mode 100644 Builds/CMake/RippledCov.cmake create mode 100644 Builds/CMake/RippledDocs.cmake create mode 100644 Builds/CMake/RippledInstall.cmake create mode 100644 Builds/CMake/RippledInterface.cmake create mode 100644 Builds/CMake/RippledMultiConfig.cmake create mode 100644 Builds/CMake/RippledNIH.cmake create mode 100644 Builds/CMake/RippledRelease.cmake create mode 100644 Builds/CMake/RippledSanity.cmake create mode 100644 Builds/CMake/RippledSettings.cmake create mode 100644 Builds/CMake/RippledValidatorKeys.cmake create mode 100644 Builds/CMake/RippledVersion.cmake create mode 100644 Builds/CMake/deps/Boost.cmake create mode 100644 Builds/CMake/deps/Ed25519-donna.cmake create mode 100644 Builds/CMake/deps/Libarchive.cmake create mode 100644 Builds/CMake/deps/Lz4.cmake create mode 100644 Builds/CMake/deps/Nudb.cmake create mode 100644 Builds/CMake/deps/OpenSSL.cmake create mode 100644 Builds/CMake/deps/Protobuf.cmake create mode 100644 Builds/CMake/deps/Rocksdb.cmake create mode 100644 Builds/CMake/deps/Secp256k1.cmake create mode 100644 Builds/CMake/deps/Snappy.cmake create mode 100644 Builds/CMake/deps/Soci.cmake create mode 100644 Builds/CMake/deps/Sqlite.cmake diff --git a/.travis.yml b/.travis.yml index 76810d1dca..2e7ae018d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -205,6 +205,7 @@ matrix: env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug + - CMAKE_ADD="-Dvalidator_keys=ON" - TARGET=validator-keys # macos - &macos diff --git a/Builds/CMake/RippledCompiler.cmake b/Builds/CMake/RippledCompiler.cmake new file mode 100644 index 0000000000..af96d59da4 --- /dev/null +++ b/Builds/CMake/RippledCompiler.cmake @@ -0,0 +1,165 @@ +#[===================================================================[ + setup project-wide compiler settings +#]===================================================================] + +#[=========================================================[ + TODO some/most of these common settings belong in a + toolchain file, especially the ABI-impacting ones +#]=========================================================] +add_library (common INTERFACE) +add_library (Ripple::common ALIAS common) +# add a single global dependency on this interface lib +link_libraries (Ripple::common) +set_target_properties (common + PROPERTIES INTERFACE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_CXX_EXTENSIONS OFF) +target_compile_features (common INTERFACE cxx_std_17) +target_compile_definitions (common + INTERFACE + $<$:DEBUG _DEBUG> + $<$,$>>:NDEBUG>) + # ^^^^ NOTE: CMAKE release builds already have NDEBUG + # defined, so no need to add it explicitly except for + # this special case of (profile ON) and (assert OFF) + # -- presumably this is because we don't want profile + # builds asserting unless asserts were specifically + # requested + +if (MSVC) + # remove existing exception flag since we set it to -EHa + string (REGEX REPLACE "[-/]EH[a-z]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + # also remove dynamic runtime + foreach (var_ + CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE) + string (REGEX REPLACE "[-/]MD[d]*" " " ${var_} "${${var_}}") + endforeach () + + target_compile_options (common + INTERFACE + -bigobj # Increase object file max size + -fp:precise # Floating point behavior + -Gd # __cdecl calling convention + -Gm- # Minimal rebuild: disabled + -Gy- # Function level linking: disabled + -MP # Multiprocessor compilation + -openmp- # pragma omp: disabled + -errorReport:none # No error reporting to Internet + -nologo # Suppress login banner + -wd4018 # Disable signed/unsigned comparison warnings + -wd4244 # Disable float to int possible loss of data warnings + -wd4267 # Disable size_t to T possible loss of data warnings + -wd4800 # Disable C4800(int to bool performance) + -wd4503 # Decorated name length exceeded, name was truncated + $<$: + -EHa + -GR + > + $<$:-Ox> + $<$,$>: + -GS + -Zc:forScope + > + # static runtime + $<$:-MTd> + $<$>:-MT> + $<$:-WX> + ) + target_compile_definitions (common + INTERFACE + _WIN32_WINNT=0x6000 + _SCL_SECURE_NO_WARNINGS + _CRT_SECURE_NO_WARNINGS + WIN32_CONSOLE + NOMINMAX + # TODO: Resolve these warnings, don't just silence them + _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS + $<$,$>:_CRTDBG_MAP_ALLOC>) + target_link_libraries (common + INTERFACE + -errorreport:none + -machine:X64) +else () + # HACK : because these need to come first, before any warning demotion + string (APPEND CMAKE_CXX_FLAGS " -Wall -Wdeprecated") + # not MSVC + target_compile_options (common + INTERFACE + $<$:-Werror> + $<$: + -frtti + -Wnon-virtual-dtor + > + -Wno-sign-compare + -Wno-char-subscripts + -Wno-format + -Wno-unused-local-typedefs + $<$: + -Wno-unused-but-set-variable + -Wno-deprecated + > + $<$>:-fno-strict-aliasing> + # tweak gcc optimization for debug + $<$,$>:-O0> + # Add debug symbols to release config + $<$:-g>) + target_link_libraries (common + INTERFACE + -rdynamic + # link to static libc/c++ iff: + # * static option set and + # * NOT APPLE (AppleClang does not support static libc/c++) and + # * NOT san (sanitizers typically don't work with static libc/c++) + $<$,$>,$>>:-static-libstdc++>) +endif () + +if (use_gold AND is_gcc) + # use gold linker if available + execute_process ( + COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=gold -Wl,--version + ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + #[=========================================================[ + NOTE: THE gold linker inserts -rpath as DT_RUNPATH by + default intead of DT_RPATH, so you might have slightly + unexpected runtime ld behavior if you were expecting + DT_RPATH. Specify --disable-new-dtags to gold if you do + not want the default DT_RUNPATH behavior. This rpath + treatment as well as static/dynamic selection means that + gold does not currently have ideal default behavior when + we are using jemalloc. Thus for simplicity we don't use + it when jemalloc is requested. An alternative to + disabling would be to figure out all the settings + required to make gold play nicely with jemalloc. + #]=========================================================] + if (("${LD_VERSION}" MATCHES "GNU gold") AND (NOT jemalloc)) + target_link_libraries (common + INTERFACE + -fuse-ld=gold + -Wl,--no-as-needed + #[=========================================================[ + see https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1253638/comments/5 + DT_RUNPATH does not work great for transitive + dependencies (of which boost has a few) - so just + switch to DT_RPATH if doing dynamic linking with gold + #]=========================================================] + $<$>:-Wl,--disable-new-dtags>) + endif () + unset (LD_VERSION) +endif () + +if (use_lld) + # use lld linker if available + execute_process ( + COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=lld -Wl,--version + ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + if ("${LD_VERSION}" MATCHES "LLD") + target_link_libraries (common INTERFACE -fuse-ld=lld) + endif () + unset (LD_VERSION) +endif() + +if (assert) + foreach (var_ CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE) + STRING (REGEX REPLACE "[-/]DNDEBUG" "" ${var_} "${${var_}}") + endforeach () +endif () diff --git a/Builds/CMake/RippledCore.cmake b/Builds/CMake/RippledCore.cmake new file mode 100644 index 0000000000..cd8cb787e6 --- /dev/null +++ b/Builds/CMake/RippledCore.cmake @@ -0,0 +1,1016 @@ +#[===================================================================[ + xrpl_core + core functionality, useable by some client software perhaps +#]===================================================================] + +file (GLOB_RECURSE rb_headers + src/ripple/beast/*.h + src/ripple/beast/*.hpp) + +add_library (xrpl_core + ${rb_headers}) ## headers added here for benefit of IDEs + +#[===============================[ + beast/legacy FILES: + TODO: review these sources for removal or replacement +#]===============================] +if (unity) + target_sources (xrpl_core PRIVATE + src/ripple/beast/core/core.unity.cpp + src/ripple/beast/unity/beast_hash_unity.cpp + src/ripple/beast/unity/beast_insight_unity.cpp + src/ripple/beast/unity/beast_net_unity.cpp + src/ripple/beast/unity/beast_utility_unity.cpp) +else () + target_sources (xrpl_core PRIVATE + src/ripple/beast/core/CurrentThreadName.cpp + src/ripple/beast/core/SemanticVersion.cpp + src/ripple/beast/hash/impl/xxhash.cpp + src/ripple/beast/insight/impl/Collector.cpp + src/ripple/beast/insight/impl/Groups.cpp + src/ripple/beast/insight/impl/Hook.cpp + src/ripple/beast/insight/impl/Metric.cpp + src/ripple/beast/insight/impl/NullCollector.cpp + src/ripple/beast/insight/impl/StatsDCollector.cpp + src/ripple/beast/net/impl/IPAddressConversion.cpp + src/ripple/beast/net/impl/IPAddressV4.cpp + src/ripple/beast/net/impl/IPAddressV6.cpp + src/ripple/beast/net/impl/IPEndpoint.cpp + src/ripple/beast/utility/src/beast_Journal.cpp + src/ripple/beast/utility/src/beast_PropertyStream.cpp) +endif () + +#[===============================[ + core sources +#]===============================] +if (unity) + target_sources (xrpl_core PRIVATE + src/ripple/unity/basics1.cpp + src/ripple/unity/json.cpp + src/ripple/unity/protocol.cpp + src/ripple/unity/crypto.cpp) +else () + target_sources (xrpl_core PRIVATE + #[===============================[ + nounity, main sources: + subdir: basics (partial) + #]===============================] + src/ripple/basics/impl/base64.cpp + src/ripple/basics/impl/contract.cpp + src/ripple/basics/impl/CountedObject.cpp + src/ripple/basics/impl/FileUtilities.cpp + src/ripple/basics/impl/Log.cpp + src/ripple/basics/impl/strHex.cpp + src/ripple/basics/impl/StringUtilities.cpp + #[===============================[ + nounity, main sources: + subdir: json + #]===============================] + src/ripple/json/impl/JsonPropertyStream.cpp + src/ripple/json/impl/Object.cpp + src/ripple/json/impl/Output.cpp + src/ripple/json/impl/Writer.cpp + src/ripple/json/impl/json_reader.cpp + src/ripple/json/impl/json_value.cpp + src/ripple/json/impl/json_valueiterator.cpp + src/ripple/json/impl/json_writer.cpp + src/ripple/json/impl/to_string.cpp + #[===============================[ + nounity, main sources: + subdir: protocol + #]===============================] + src/ripple/protocol/impl/AccountID.cpp + src/ripple/protocol/impl/Book.cpp + src/ripple/protocol/impl/BuildInfo.cpp + src/ripple/protocol/impl/ErrorCodes.cpp + src/ripple/protocol/impl/Feature.cpp + src/ripple/protocol/impl/HashPrefix.cpp + src/ripple/protocol/impl/IOUAmount.cpp + src/ripple/protocol/impl/Indexes.cpp + src/ripple/protocol/impl/InnerObjectFormats.cpp + src/ripple/protocol/impl/Issue.cpp + src/ripple/protocol/impl/Keylet.cpp + src/ripple/protocol/impl/LedgerFormats.cpp + src/ripple/protocol/impl/PublicKey.cpp + src/ripple/protocol/impl/Quality.cpp + src/ripple/protocol/impl/Rate2.cpp + src/ripple/protocol/impl/SField.cpp + src/ripple/protocol/impl/SOTemplate.cpp + src/ripple/protocol/impl/STAccount.cpp + src/ripple/protocol/impl/STAmount.cpp + src/ripple/protocol/impl/STArray.cpp + src/ripple/protocol/impl/STBase.cpp + src/ripple/protocol/impl/STBlob.cpp + src/ripple/protocol/impl/STInteger.cpp + src/ripple/protocol/impl/STLedgerEntry.cpp + src/ripple/protocol/impl/STObject.cpp + src/ripple/protocol/impl/STParsedJSON.cpp + src/ripple/protocol/impl/STPathSet.cpp + src/ripple/protocol/impl/STTx.cpp + src/ripple/protocol/impl/STValidation.cpp + src/ripple/protocol/impl/STVar.cpp + src/ripple/protocol/impl/STVector256.cpp + src/ripple/protocol/impl/SecretKey.cpp + src/ripple/protocol/impl/Seed.cpp + src/ripple/protocol/impl/Serializer.cpp + src/ripple/protocol/impl/Sign.cpp + src/ripple/protocol/impl/TER.cpp + src/ripple/protocol/impl/TxFormats.cpp + src/ripple/protocol/impl/UintTypes.cpp + src/ripple/protocol/impl/digest.cpp + src/ripple/protocol/impl/tokens.cpp + #[===============================[ + nounity, main sources: + subdir: crypto + #]===============================] + src/ripple/crypto/impl/GenerateDeterministicKey.cpp + src/ripple/crypto/impl/RFC1751.cpp + src/ripple/crypto/impl/csprng.cpp + src/ripple/crypto/impl/ec_key.cpp + src/ripple/crypto/impl/openssl.cpp) +endif () +add_library (Ripple::xrpl_core ALIAS xrpl_core) +target_include_directories (xrpl_core + PUBLIC + $ + $ + # this one is for beast/legacy files: + $ + $) +target_compile_options (xrpl_core + PUBLIC + $<$:-Wno-maybe-uninitialized>) +target_link_libraries (xrpl_core + PUBLIC + OpenSSL::Crypto + NIH::secp256k1 + NIH::ed25519-donna + Ripple::syslibs + Ripple::boost + Ripple::opts) +#[=================================[ + main/core headers installation +#]=================================] +install ( + FILES + src/ripple/basics/base64.h + src/ripple/basics/Blob.h + src/ripple/basics/Buffer.h + src/ripple/basics/CountedObject.h + src/ripple/basics/FileUtilities.h + src/ripple/basics/LocalValue.h + src/ripple/basics/Log.h + src/ripple/basics/safe_cast.h + src/ripple/basics/Slice.h + src/ripple/basics/StringUtilities.h + src/ripple/basics/ToString.h + src/ripple/basics/UnorderedContainers.h + src/ripple/basics/algorithm.h + src/ripple/basics/base_uint.h + src/ripple/basics/chrono.h + src/ripple/basics/contract.h + src/ripple/basics/date.h + src/ripple/basics/hardened_hash.h + src/ripple/basics/strHex.h + DESTINATION include/ripple/basics) +install ( + FILES + src/ripple/crypto/GenerateDeterministicKey.h + src/ripple/crypto/KeyType.h + src/ripple/crypto/RFC1751.h + src/ripple/crypto/csprng.h + DESTINATION include/ripple/crypto) +install ( + FILES + src/ripple/crypto/impl/ec_key.h + src/ripple/crypto/impl/openssl.h + DESTINATION include/ripple/crypto/impl) +install ( + FILES + src/ripple/json/JsonPropertyStream.h + src/ripple/json/Object.h + src/ripple/json/Output.h + src/ripple/json/Writer.h + src/ripple/json/json_forwards.h + src/ripple/json/json_reader.h + src/ripple/json/json_value.h + src/ripple/json/json_writer.h + src/ripple/json/to_string.h + DESTINATION include/ripple/json) +install ( + FILES + src/ripple/json/impl/json_assert.h + DESTINATION include/ripple/json/impl) +install ( + FILES + src/ripple/protocol/AccountID.h + src/ripple/protocol/AmountConversions.h + src/ripple/protocol/Book.h + src/ripple/protocol/BuildInfo.h + src/ripple/protocol/ErrorCodes.h + src/ripple/protocol/Feature.h + src/ripple/protocol/HashPrefix.h + src/ripple/protocol/IOUAmount.h + src/ripple/protocol/Indexes.h + src/ripple/protocol/InnerObjectFormats.h + src/ripple/protocol/Issue.h + src/ripple/protocol/Keylet.h + src/ripple/protocol/KnownFormats.h + src/ripple/protocol/LedgerFormats.h + src/ripple/protocol/Protocol.h + src/ripple/protocol/PublicKey.h + src/ripple/protocol/Quality.h + src/ripple/protocol/Rate.h + src/ripple/protocol/SField.h + src/ripple/protocol/SOTemplate.h + src/ripple/protocol/STAccount.h + src/ripple/protocol/STAmount.h + src/ripple/protocol/STArray.h + src/ripple/protocol/STBase.h + src/ripple/protocol/STBitString.h + src/ripple/protocol/STBlob.h + src/ripple/protocol/STExchange.h + src/ripple/protocol/STInteger.h + src/ripple/protocol/STLedgerEntry.h + src/ripple/protocol/STObject.h + src/ripple/protocol/STParsedJSON.h + src/ripple/protocol/STPathSet.h + src/ripple/protocol/STTx.h + src/ripple/protocol/STValidation.h + src/ripple/protocol/STVector256.h + src/ripple/protocol/SecretKey.h + src/ripple/protocol/Seed.h + src/ripple/protocol/Serializer.h + src/ripple/protocol/Sign.h + src/ripple/protocol/SystemParameters.h + src/ripple/protocol/TER.h + src/ripple/protocol/TxFlags.h + src/ripple/protocol/TxFormats.h + src/ripple/protocol/UintTypes.h + src/ripple/protocol/XRPAmount.h + src/ripple/protocol/digest.h + src/ripple/protocol/jss.h + src/ripple/protocol/tokens.h + DESTINATION include/ripple/protocol) +install ( + FILES + src/ripple/protocol/impl/STVar.h + src/ripple/protocol/impl/secp256k1.h + DESTINATION include/ripple/protocol/impl) + +#[===================================[ + beast/legacy headers installation +#]===================================] +install ( + FILES + src/ripple/beast/clock/abstract_clock.h + src/ripple/beast/clock/basic_seconds_clock.h + src/ripple/beast/clock/manual_clock.h + DESTINATION include/ripple/beast/clock) +install ( + FILES + src/ripple/beast/core/Config.h + src/ripple/beast/core/ConfigCheck.h + src/ripple/beast/core/LexicalCast.h + src/ripple/beast/core/List.h + src/ripple/beast/core/PlatformConfig.h + src/ripple/beast/core/SemanticVersion.h + src/ripple/beast/core/StandardConfig.h + DESTINATION include/ripple/beast/core) +install ( + FILES + src/ripple/beast/crypto/detail/mac_facade.h + src/ripple/beast/crypto/detail/ripemd_context.h + src/ripple/beast/crypto/detail/sha2_context.h + src/ripple/beast/crypto/ripemd.h + src/ripple/beast/crypto/secure_erase.h + src/ripple/beast/crypto/sha2.h + DESTINATION include/ripple/beast/crypto) +install ( + FILES + src/ripple/beast/cxx17/type_traits.h + DESTINATION include/ripple/beast/cxx17) +install ( + FILES + src/ripple/beast/hash/endian.h + src/ripple/beast/hash/hash_append.h + src/ripple/beast/hash/meta.h + src/ripple/beast/hash/uhash.h + src/ripple/beast/hash/xxhasher.h + DESTINATION include/ripple/beast/hash) +install ( + FILES src/ripple/beast/hash/impl/xxhash.h + DESTINATION include/ripple/beast/hash/impl) +install ( + FILES + src/ripple/beast/rfc2616.h + src/ripple/beast/type_name.h + src/ripple/beast/unit_test.h + src/ripple/beast/xor_shift_engine.h + DESTINATION include/ripple/beast) +install ( + FILES + src/ripple/beast/utility/Journal.h + src/ripple/beast/utility/PropertyStream.h + src/ripple/beast/utility/Zero.h + src/ripple/beast/utility/rngfill.h + DESTINATION include/ripple/beast/utility) +# WARNING!! -- horrible levelization ahead +# (these files should be isolated or moved...but +# unfortunately unit_test.h above creates this dependency) +install ( + FILES + src/beast/extras/beast/unit_test/amount.hpp + src/beast/extras/beast/unit_test/dstream.hpp + src/beast/extras/beast/unit_test/global_suites.hpp + src/beast/extras/beast/unit_test/match.hpp + src/beast/extras/beast/unit_test/recorder.hpp + src/beast/extras/beast/unit_test/reporter.hpp + src/beast/extras/beast/unit_test/results.hpp + src/beast/extras/beast/unit_test/runner.hpp + src/beast/extras/beast/unit_test/suite.hpp + src/beast/extras/beast/unit_test/suite_info.hpp + src/beast/extras/beast/unit_test/suite_list.hpp + src/beast/extras/beast/unit_test/thread.hpp + DESTINATION include/beast/unit_test) +install ( + FILES + src/beast/extras/beast/unit_test/detail/const_container.hpp + DESTINATION include/beast/unit_test/detail) + +#[===================================================================[ + rippled executable +#]===================================================================] + +#[=========================================================[ + this one header is added as source just to keep older + versions of cmake happy. cmake 3.10+ allows + add_executable with no sources +#]=========================================================] +add_executable (rippled src/ripple/app/main/Application.h) +if (unity) + target_sources (rippled PRIVATE + #[===============================[ + unity, main sources + #]===============================] + src/ripple/unity/app_consensus.cpp + src/ripple/unity/app_ledger.cpp + src/ripple/unity/app_ledger_impl.cpp + src/ripple/unity/app_main1.cpp + src/ripple/unity/app_main2.cpp + src/ripple/unity/app_misc.cpp + src/ripple/unity/app_misc_impl.cpp + src/ripple/unity/app_paths.cpp + src/ripple/unity/app_tx.cpp + src/ripple/unity/conditions.cpp + src/ripple/unity/consensus.cpp + src/ripple/unity/core.cpp + src/ripple/unity/basics2.cpp + src/ripple/unity/ledger.cpp + src/ripple/unity/net.cpp + src/ripple/unity/nodestore.cpp + src/ripple/unity/overlay1.cpp + src/ripple/unity/overlay2.cpp + src/ripple/unity/peerfinder.cpp + src/ripple/unity/resource.cpp + src/ripple/unity/rpcx1.cpp + src/ripple/unity/rpcx2.cpp + src/ripple/unity/shamap.cpp + src/ripple/unity/server.cpp + src/ripple/unity/soci_ripple.cpp + #[===============================[ + unity, test sources + #]===============================] + src/test/unity/app_test_unity1.cpp + src/test/unity/app_test_unity2.cpp + src/test/unity/basics_test_unity.cpp + src/test/unity/beast_test_unity1.cpp + src/test/unity/beast_test_unity2.cpp + src/test/unity/conditions_test_unity.cpp + src/test/unity/consensus_test_unity.cpp + src/test/unity/core_test_unity.cpp + src/test/unity/crypto_test_unity.cpp + src/test/unity/json_test_unity.cpp + src/test/unity/ledger_test_unity.cpp + src/test/unity/nodestore_test_unity.cpp + src/test/unity/overlay_test_unity.cpp + src/test/unity/peerfinder_test_unity.cpp + src/test/unity/protocol_test_unity.cpp + src/test/unity/resource_test_unity.cpp + src/test/unity/rpc_test_unity.cpp + src/test/unity/server_test_unity.cpp + src/test/unity/server_status_test_unity.cpp + src/test/unity/shamap_test_unity.cpp + src/test/unity/jtx_unity1.cpp + src/test/unity/jtx_unity2.cpp + src/test/unity/csf_unity.cpp) +else () + target_sources (rippled PRIVATE + #[===============================[ + nounity, main sources: + subdir: app + #]===============================] + src/ripple/app/consensus/RCLConsensus.cpp + src/ripple/app/consensus/RCLCxPeerPos.cpp + src/ripple/app/consensus/RCLValidations.cpp + src/ripple/app/ledger/AcceptedLedger.cpp + src/ripple/app/ledger/AcceptedLedgerTx.cpp + src/ripple/app/ledger/AccountStateSF.cpp + src/ripple/app/ledger/BookListeners.cpp + src/ripple/app/ledger/ConsensusTransSetSF.cpp + src/ripple/app/ledger/Ledger.cpp + src/ripple/app/ledger/LedgerHistory.cpp + src/ripple/app/ledger/OrderBookDB.cpp + src/ripple/app/ledger/TransactionStateSF.cpp + src/ripple/app/ledger/impl/BuildLedger.cpp + src/ripple/app/ledger/impl/InboundLedger.cpp + src/ripple/app/ledger/impl/InboundLedgers.cpp + src/ripple/app/ledger/impl/InboundTransactions.cpp + src/ripple/app/ledger/impl/LedgerCleaner.cpp + src/ripple/app/ledger/impl/LedgerMaster.cpp + src/ripple/app/ledger/impl/LedgerReplay.cpp + src/ripple/app/ledger/impl/LedgerToJson.cpp + src/ripple/app/ledger/impl/LocalTxs.cpp + src/ripple/app/ledger/impl/OpenLedger.cpp + src/ripple/app/ledger/impl/TransactionAcquire.cpp + src/ripple/app/ledger/impl/TransactionMaster.cpp + src/ripple/app/main/Application.cpp + src/ripple/app/main/BasicApp.cpp + src/ripple/app/main/CollectorManager.cpp + src/ripple/app/main/LoadManager.cpp + src/ripple/app/main/Main.cpp + src/ripple/app/main/NodeIdentity.cpp + src/ripple/app/main/NodeStoreScheduler.cpp + src/ripple/app/misc/CanonicalTXSet.cpp + src/ripple/app/misc/FeeVoteImpl.cpp + src/ripple/app/misc/HashRouter.cpp + src/ripple/app/misc/NetworkOPs.cpp + src/ripple/app/misc/SHAMapStoreImp.cpp + src/ripple/app/misc/impl/AccountTxPaging.cpp + src/ripple/app/misc/impl/AmendmentTable.cpp + src/ripple/app/misc/impl/LoadFeeTrack.cpp + src/ripple/app/misc/impl/Manifest.cpp + src/ripple/app/misc/impl/Transaction.cpp + src/ripple/app/misc/impl/TxQ.cpp + src/ripple/app/misc/impl/ValidatorKeys.cpp + src/ripple/app/misc/impl/ValidatorList.cpp + src/ripple/app/misc/impl/ValidatorSite.cpp + src/ripple/app/paths/AccountCurrencies.cpp + src/ripple/app/paths/Credit.cpp + src/ripple/app/paths/Flow.cpp + src/ripple/app/paths/Node.cpp + src/ripple/app/paths/PathRequest.cpp + src/ripple/app/paths/PathRequests.cpp + src/ripple/app/paths/PathState.cpp + src/ripple/app/paths/Pathfinder.cpp + src/ripple/app/paths/RippleCalc.cpp + src/ripple/app/paths/RippleLineCache.cpp + src/ripple/app/paths/RippleState.cpp + src/ripple/app/paths/cursor/AdvanceNode.cpp + src/ripple/app/paths/cursor/DeliverNodeForward.cpp + src/ripple/app/paths/cursor/DeliverNodeReverse.cpp + src/ripple/app/paths/cursor/EffectiveRate.cpp + src/ripple/app/paths/cursor/ForwardLiquidity.cpp + src/ripple/app/paths/cursor/ForwardLiquidityForAccount.cpp + src/ripple/app/paths/cursor/Liquidity.cpp + src/ripple/app/paths/cursor/NextIncrement.cpp + src/ripple/app/paths/cursor/ReverseLiquidity.cpp + src/ripple/app/paths/cursor/ReverseLiquidityForAccount.cpp + src/ripple/app/paths/cursor/RippleLiquidity.cpp + src/ripple/app/paths/impl/BookStep.cpp + src/ripple/app/paths/impl/DirectStep.cpp + src/ripple/app/paths/impl/PaySteps.cpp + src/ripple/app/paths/impl/XRPEndpointStep.cpp + src/ripple/app/tx/impl/ApplyContext.cpp + src/ripple/app/tx/impl/BookTip.cpp + src/ripple/app/tx/impl/CancelCheck.cpp + src/ripple/app/tx/impl/CancelOffer.cpp + src/ripple/app/tx/impl/CancelTicket.cpp + src/ripple/app/tx/impl/CashCheck.cpp + src/ripple/app/tx/impl/Change.cpp + src/ripple/app/tx/impl/CreateCheck.cpp + src/ripple/app/tx/impl/CreateOffer.cpp + src/ripple/app/tx/impl/CreateTicket.cpp + src/ripple/app/tx/impl/DepositPreauth.cpp + src/ripple/app/tx/impl/Escrow.cpp + src/ripple/app/tx/impl/InvariantCheck.cpp + src/ripple/app/tx/impl/OfferStream.cpp + src/ripple/app/tx/impl/PayChan.cpp + src/ripple/app/tx/impl/Payment.cpp + src/ripple/app/tx/impl/SetAccount.cpp + src/ripple/app/tx/impl/SetRegularKey.cpp + src/ripple/app/tx/impl/SetSignerList.cpp + src/ripple/app/tx/impl/SetTrust.cpp + src/ripple/app/tx/impl/SignerEntries.cpp + src/ripple/app/tx/impl/Taker.cpp + src/ripple/app/tx/impl/Transactor.cpp + src/ripple/app/tx/impl/apply.cpp + src/ripple/app/tx/impl/applySteps.cpp + #[===============================[ + nounity, main sources: + subdir: basics (partial) + #]===============================] + src/ripple/basics/impl/Archive.cpp + src/ripple/basics/impl/BasicConfig.cpp + src/ripple/basics/impl/PerfLogImp.cpp + src/ripple/basics/impl/ResolverAsio.cpp + src/ripple/basics/impl/Sustain.cpp + src/ripple/basics/impl/UptimeClock.cpp + src/ripple/basics/impl/make_SSLContext.cpp + src/ripple/basics/impl/mulDiv.cpp + #[===============================[ + nounity, main sources: + subdir: conditions + #]===============================] + src/ripple/conditions/impl/Condition.cpp + src/ripple/conditions/impl/Fulfillment.cpp + src/ripple/conditions/impl/error.cpp + #[===============================[ + nounity, main sources: + subdir: core + #]===============================] + src/ripple/core/impl/Config.cpp + src/ripple/core/impl/DatabaseCon.cpp + src/ripple/core/impl/Job.cpp + src/ripple/core/impl/JobQueue.cpp + src/ripple/core/impl/LoadEvent.cpp + src/ripple/core/impl/LoadMonitor.cpp + src/ripple/core/impl/SNTPClock.cpp + src/ripple/core/impl/SociDB.cpp + src/ripple/core/impl/Stoppable.cpp + src/ripple/core/impl/TimeKeeper.cpp + src/ripple/core/impl/Workers.cpp + #[===============================[ + nounity, main sources: + subdir: consensus + #]===============================] + src/ripple/consensus/Consensus.cpp + #[===============================[ + nounity, main sources: + subdir: ledger + #]===============================] + src/ripple/ledger/impl/ApplyStateTable.cpp + src/ripple/ledger/impl/ApplyView.cpp + src/ripple/ledger/impl/ApplyViewBase.cpp + src/ripple/ledger/impl/ApplyViewImpl.cpp + src/ripple/ledger/impl/BookDirs.cpp + src/ripple/ledger/impl/CachedSLEs.cpp + src/ripple/ledger/impl/CachedView.cpp + src/ripple/ledger/impl/CashDiff.cpp + src/ripple/ledger/impl/Directory.cpp + src/ripple/ledger/impl/OpenView.cpp + src/ripple/ledger/impl/PaymentSandbox.cpp + src/ripple/ledger/impl/RawStateTable.cpp + src/ripple/ledger/impl/ReadView.cpp + src/ripple/ledger/impl/TxMeta.cpp + src/ripple/ledger/impl/View.cpp + #[===============================[ + nounity, main sources: + subdir: net + #]===============================] + src/ripple/net/impl/HTTPClient.cpp + src/ripple/net/impl/InfoSub.cpp + src/ripple/net/impl/RPCCall.cpp + src/ripple/net/impl/RPCErr.cpp + src/ripple/net/impl/RPCSub.cpp + src/ripple/net/impl/RegisterSSLCerts.cpp + src/ripple/net/impl/SSLHTTPDownloader.cpp + #[===============================[ + nounity, main sources: + subdir: nodestore + #]===============================] + src/ripple/nodestore/backend/MemoryFactory.cpp + src/ripple/nodestore/backend/NuDBFactory.cpp + src/ripple/nodestore/backend/NullFactory.cpp + src/ripple/nodestore/backend/RocksDBFactory.cpp + src/ripple/nodestore/impl/BatchWriter.cpp + src/ripple/nodestore/impl/Database.cpp + src/ripple/nodestore/impl/DatabaseNodeImp.cpp + src/ripple/nodestore/impl/DatabaseRotatingImp.cpp + src/ripple/nodestore/impl/DatabaseShardImp.cpp + src/ripple/nodestore/impl/DecodedBlob.cpp + src/ripple/nodestore/impl/DummyScheduler.cpp + src/ripple/nodestore/impl/EncodedBlob.cpp + src/ripple/nodestore/impl/ManagerImp.cpp + src/ripple/nodestore/impl/NodeObject.cpp + src/ripple/nodestore/impl/Shard.cpp + #[===============================[ + nounity, main sources: + subdir: overlay + #]===============================] + src/ripple/overlay/impl/Cluster.cpp + src/ripple/overlay/impl/ConnectAttempt.cpp + src/ripple/overlay/impl/Message.cpp + src/ripple/overlay/impl/OverlayImpl.cpp + src/ripple/overlay/impl/PeerImp.cpp + src/ripple/overlay/impl/PeerReservationTable.cpp + src/ripple/overlay/impl/PeerSet.cpp + src/ripple/overlay/impl/TMHello.cpp + src/ripple/overlay/impl/TrafficCount.cpp + #[===============================[ + nounity, main sources: + subdir: peerfinder + #]===============================] + src/ripple/peerfinder/impl/Bootcache.cpp + src/ripple/peerfinder/impl/Endpoint.cpp + src/ripple/peerfinder/impl/PeerfinderConfig.cpp + src/ripple/peerfinder/impl/PeerfinderManager.cpp + src/ripple/peerfinder/impl/SlotImp.cpp + src/ripple/peerfinder/impl/SourceStrings.cpp + #[===============================[ + nounity, main sources: + subdir: resource + #]===============================] + src/ripple/resource/impl/Charge.cpp + src/ripple/resource/impl/Consumer.cpp + src/ripple/resource/impl/Fees.cpp + src/ripple/resource/impl/ResourceManager.cpp + #[===============================[ + nounity, main sources: + subdir: rpc + #]===============================] + src/ripple/rpc/handlers/AccountChannels.cpp + src/ripple/rpc/handlers/AccountCurrenciesHandler.cpp + src/ripple/rpc/handlers/AccountInfo.cpp + src/ripple/rpc/handlers/AccountLines.cpp + src/ripple/rpc/handlers/AccountObjects.cpp + src/ripple/rpc/handlers/AccountOffers.cpp + src/ripple/rpc/handlers/AccountTx.cpp + src/ripple/rpc/handlers/AccountTxOld.cpp + src/ripple/rpc/handlers/AccountTxSwitch.cpp + src/ripple/rpc/handlers/BlackList.cpp + src/ripple/rpc/handlers/BookOffers.cpp + src/ripple/rpc/handlers/CanDelete.cpp + src/ripple/rpc/handlers/Connect.cpp + src/ripple/rpc/handlers/ConsensusInfo.cpp + src/ripple/rpc/handlers/CrawlShards.cpp + src/ripple/rpc/handlers/DepositAuthorized.cpp + src/ripple/rpc/handlers/DownloadShard.cpp + src/ripple/rpc/handlers/Feature1.cpp + src/ripple/rpc/handlers/Fee1.cpp + src/ripple/rpc/handlers/FetchInfo.cpp + src/ripple/rpc/handlers/GatewayBalances.cpp + src/ripple/rpc/handlers/GetCounts.cpp + src/ripple/rpc/handlers/LedgerAccept.cpp + src/ripple/rpc/handlers/LedgerCleanerHandler.cpp + src/ripple/rpc/handlers/LedgerClosed.cpp + src/ripple/rpc/handlers/LedgerCurrent.cpp + src/ripple/rpc/handlers/LedgerData.cpp + src/ripple/rpc/handlers/LedgerEntry.cpp + src/ripple/rpc/handlers/LedgerHandler.cpp + src/ripple/rpc/handlers/LedgerHeader.cpp + src/ripple/rpc/handlers/LedgerRequest.cpp + src/ripple/rpc/handlers/LogLevel.cpp + src/ripple/rpc/handlers/LogRotate.cpp + src/ripple/rpc/handlers/NoRippleCheck.cpp + src/ripple/rpc/handlers/OwnerInfo.cpp + src/ripple/rpc/handlers/PathFind.cpp + src/ripple/rpc/handlers/PayChanClaim.cpp + src/ripple/rpc/handlers/Peers.cpp + src/ripple/rpc/handlers/Ping.cpp + src/ripple/rpc/handlers/Print.cpp + src/ripple/rpc/handlers/Random.cpp + src/ripple/rpc/handlers/Reservations.cpp + src/ripple/rpc/handlers/RipplePathFind.cpp + src/ripple/rpc/handlers/ServerInfo.cpp + src/ripple/rpc/handlers/ServerState.cpp + src/ripple/rpc/handlers/SignFor.cpp + src/ripple/rpc/handlers/SignHandler.cpp + src/ripple/rpc/handlers/Stop.cpp + src/ripple/rpc/handlers/Submit.cpp + src/ripple/rpc/handlers/SubmitMultiSigned.cpp + src/ripple/rpc/handlers/Subscribe.cpp + src/ripple/rpc/handlers/TransactionEntry.cpp + src/ripple/rpc/handlers/Tx.cpp + src/ripple/rpc/handlers/TxHistory.cpp + src/ripple/rpc/handlers/UnlList.cpp + src/ripple/rpc/handlers/Unsubscribe.cpp + src/ripple/rpc/handlers/ValidationCreate.cpp + src/ripple/rpc/handlers/ValidatorListSites.cpp + src/ripple/rpc/handlers/Validators.cpp + src/ripple/rpc/handlers/WalletPropose.cpp + src/ripple/rpc/impl/DeliveredAmount.cpp + src/ripple/rpc/impl/Handler.cpp + src/ripple/rpc/impl/LegacyPathFind.cpp + src/ripple/rpc/impl/RPCHandler.cpp + src/ripple/rpc/impl/RPCHelpers.cpp + src/ripple/rpc/impl/Role.cpp + src/ripple/rpc/impl/ServerHandlerImp.cpp + src/ripple/rpc/impl/ShardArchiveHandler.cpp + src/ripple/rpc/impl/Status.cpp + src/ripple/rpc/impl/TransactionSign.cpp + #[===============================[ + nounity, main sources: + subdir: server + #]===============================] + src/ripple/server/impl/JSONRPCUtil.cpp + src/ripple/server/impl/Port.cpp + #[===============================[ + nounity, main sources: + subdir: shamap + #]===============================] + src/ripple/shamap/impl/SHAMap.cpp + src/ripple/shamap/impl/SHAMapDelta.cpp + src/ripple/shamap/impl/SHAMapItem.cpp + src/ripple/shamap/impl/SHAMapMissingNode.cpp + src/ripple/shamap/impl/SHAMapNodeID.cpp + src/ripple/shamap/impl/SHAMapSync.cpp + src/ripple/shamap/impl/SHAMapTreeNode.cpp + #[===============================[ + nounity, test sources: + subdir: app + #]===============================] + src/test/app/AccountTxPaging_test.cpp + src/test/app/AmendmentTable_test.cpp + src/test/app/Check_test.cpp + src/test/app/CrossingLimits_test.cpp + src/test/app/DeliverMin_test.cpp + src/test/app/DepositAuth_test.cpp + src/test/app/Discrepancy_test.cpp + src/test/app/Escrow_test.cpp + src/test/app/Flow_test.cpp + src/test/app/Freeze_test.cpp + src/test/app/HashRouter_test.cpp + src/test/app/LedgerHistory_test.cpp + src/test/app/LedgerLoad_test.cpp + src/test/app/LedgerReplay_test.cpp + src/test/app/LoadFeeTrack_test.cpp + src/test/app/Manifest_test.cpp + src/test/app/MultiSign_test.cpp + src/test/app/OfferStream_test.cpp + src/test/app/Offer_test.cpp + src/test/app/OversizeMeta_test.cpp + src/test/app/Path_test.cpp + src/test/app/PayChan_test.cpp + src/test/app/PayStrand_test.cpp + src/test/app/PseudoTx_test.cpp + src/test/app/RCLCensorshipDetector_test.cpp + src/test/app/RCLValidations_test.cpp + src/test/app/Regression_test.cpp + src/test/app/SHAMapStore_test.cpp + src/test/app/SetAuth_test.cpp + src/test/app/SetRegularKey_test.cpp + src/test/app/SetTrust_test.cpp + src/test/app/Taker_test.cpp + src/test/app/Ticket_test.cpp + src/test/app/Transaction_ordering_test.cpp + src/test/app/TrustAndBalance_test.cpp + src/test/app/TxQ_test.cpp + src/test/app/ValidatorKeys_test.cpp + src/test/app/ValidatorList_test.cpp + src/test/app/ValidatorSite_test.cpp + #[===============================[ + nounity, test sources: + subdir: basics + #]===============================] + src/test/basics/Buffer_test.cpp + src/test/basics/DetectCrash_test.cpp + src/test/basics/FileUtilities_test.cpp + src/test/basics/KeyCache_test.cpp + src/test/basics/PerfLog_test.cpp + src/test/basics/RangeSet_test.cpp + src/test/basics/Slice_test.cpp + src/test/basics/StringUtilities_test.cpp + src/test/basics/TaggedCache_test.cpp + src/test/basics/base64_test.cpp + src/test/basics/base_uint_test.cpp + src/test/basics/contract_test.cpp + src/test/basics/hardened_hash_test.cpp + src/test/basics/mulDiv_test.cpp + src/test/basics/qalloc_test.cpp + src/test/basics/tagged_integer_test.cpp + #[===============================[ + nounity, test sources: + subdir: beast + #]===============================] + src/test/beast/IPEndpoint_test.cpp + src/test/beast/LexicalCast_test.cpp + src/test/beast/SemanticVersion_test.cpp + src/test/beast/aged_associative_container_test.cpp + src/test/beast/beast_CurrentThreadName_test.cpp + src/test/beast/beast_Debug_test.cpp + src/test/beast/beast_Journal_test.cpp + src/test/beast/beast_PropertyStream_test.cpp + src/test/beast/beast_Zero_test.cpp + src/test/beast/beast_abstract_clock_test.cpp + src/test/beast/beast_asio_error_test.cpp + src/test/beast/beast_basic_seconds_clock_test.cpp + src/test/beast/beast_io_latency_probe_test.cpp + src/test/beast/define_print.cpp + #[===============================[ + nounity, test sources: + subdir: conditions + #]===============================] + src/test/conditions/PreimageSha256_test.cpp + #[===============================[ + nounity, test sources: + subdir: consensus + #]===============================] + src/test/consensus/ByzantineFailureSim_test.cpp + src/test/consensus/Consensus_test.cpp + src/test/consensus/DistributedValidatorsSim_test.cpp + src/test/consensus/LedgerTiming_test.cpp + src/test/consensus/LedgerTrie_test.cpp + src/test/consensus/ScaleFreeSim_test.cpp + src/test/consensus/Validations_test.cpp + #[===============================[ + nounity, test sources: + subdir: core + #]===============================] + src/test/core/ClosureCounter_test.cpp + src/test/core/Config_test.cpp + src/test/core/Coroutine_test.cpp + src/test/core/CryptoPRNG_test.cpp + src/test/core/JobQueue_test.cpp + src/test/core/SociDB_test.cpp + src/test/core/Stoppable_test.cpp + src/test/core/Workers_test.cpp + #[===============================[ + nounity, test sources: + subdir: crypto + #]===============================] + src/test/crypto/Openssl_test.cpp + #[===============================[ + nounity, test sources: + subdir: csf + #]===============================] + src/test/csf/BasicNetwork_test.cpp + src/test/csf/Digraph_test.cpp + src/test/csf/Histogram_test.cpp + src/test/csf/Scheduler_test.cpp + src/test/csf/impl/Sim.cpp + src/test/csf/impl/ledgers.cpp + #[===============================[ + nounity, test sources: + subdir: json + #]===============================] + src/test/json/Object_test.cpp + src/test/json/Output_test.cpp + src/test/json/Writer_test.cpp + src/test/json/json_value_test.cpp + #[===============================[ + nounity, test sources: + subdir: jtx + #]===============================] + src/test/jtx/Env_test.cpp + src/test/jtx/WSClient_test.cpp + src/test/jtx/impl/Account.cpp + src/test/jtx/impl/Env.cpp + src/test/jtx/impl/JSONRPCClient.cpp + src/test/jtx/impl/ManualTimeKeeper.cpp + src/test/jtx/impl/WSClient.cpp + src/test/jtx/impl/amount.cpp + src/test/jtx/impl/balance.cpp + src/test/jtx/impl/check.cpp + src/test/jtx/impl/delivermin.cpp + src/test/jtx/impl/deposit.cpp + src/test/jtx/impl/envconfig.cpp + src/test/jtx/impl/fee.cpp + src/test/jtx/impl/flags.cpp + src/test/jtx/impl/jtx_json.cpp + src/test/jtx/impl/memo.cpp + src/test/jtx/impl/multisign.cpp + src/test/jtx/impl/offer.cpp + src/test/jtx/impl/owners.cpp + src/test/jtx/impl/paths.cpp + src/test/jtx/impl/pay.cpp + src/test/jtx/impl/quality2.cpp + src/test/jtx/impl/rate.cpp + src/test/jtx/impl/regkey.cpp + src/test/jtx/impl/sendmax.cpp + src/test/jtx/impl/seq.cpp + src/test/jtx/impl/sig.cpp + src/test/jtx/impl/tag.cpp + src/test/jtx/impl/ticket.cpp + src/test/jtx/impl/trust.cpp + src/test/jtx/impl/txflags.cpp + src/test/jtx/impl/utility.cpp + #[===============================[ + nounity, test sources: + subdir: ledger + #]===============================] + src/test/ledger/BookDirs_test.cpp + src/test/ledger/CashDiff_test.cpp + src/test/ledger/Directory_test.cpp + src/test/ledger/Invariants_test.cpp + src/test/ledger/PaymentSandbox_test.cpp + src/test/ledger/PendingSaves_test.cpp + src/test/ledger/SHAMapV2_test.cpp + src/test/ledger/SkipList_test.cpp + src/test/ledger/View_test.cpp + #[===============================[ + nounity, test sources: + subdir: nodestore + #]===============================] + src/test/nodestore/Backend_test.cpp + src/test/nodestore/Basics_test.cpp + src/test/nodestore/Database_test.cpp + src/test/nodestore/Timing_test.cpp + src/test/nodestore/import_test.cpp + src/test/nodestore/varint_test.cpp + #[===============================[ + nounity, test sources: + subdir: overlay + #]===============================] + src/test/overlay/TMHello_test.cpp + src/test/overlay/cluster_test.cpp + src/test/overlay/short_read_test.cpp + #[===============================[ + nounity, test sources: + subdir: peerfinder + #]===============================] + src/test/peerfinder/Livecache_test.cpp + src/test/peerfinder/PeerFinder_test.cpp + #[===============================[ + nounity, test sources: + subdir: protocol + #]===============================] + src/test/protocol/BuildInfo_test.cpp + src/test/protocol/IOUAmount_test.cpp + src/test/protocol/InnerObjectFormats_test.cpp + src/test/protocol/Issue_test.cpp + src/test/protocol/PublicKey_test.cpp + src/test/protocol/Quality_test.cpp + src/test/protocol/STAccount_test.cpp + src/test/protocol/STAmount_test.cpp + src/test/protocol/STObject_test.cpp + src/test/protocol/STTx_test.cpp + src/test/protocol/STValidation_test.cpp + src/test/protocol/SecretKey_test.cpp + src/test/protocol/Seed_test.cpp + src/test/protocol/TER_test.cpp + src/test/protocol/XRPAmount_test.cpp + src/test/protocol/digest_test.cpp + src/test/protocol/types_test.cpp + #[===============================[ + nounity, test sources: + subdir: resource + #]===============================] + src/test/resource/Logic_test.cpp + #[===============================[ + nounity, test sources: + subdir: rpc + #]===============================] + src/test/rpc/AccountCurrencies_test.cpp + src/test/rpc/AccountInfo_test.cpp + src/test/rpc/AccountLinesRPC_test.cpp + src/test/rpc/AccountObjects_test.cpp + src/test/rpc/AccountOffers_test.cpp + src/test/rpc/AccountSet_test.cpp + src/test/rpc/AccountTx_test.cpp + src/test/rpc/AmendmentBlocked_test.cpp + src/test/rpc/Book_test.cpp + src/test/rpc/DepositAuthorized_test.cpp + src/test/rpc/DeliveredAmount_test.cpp + src/test/rpc/Feature_test.cpp + src/test/rpc/GatewayBalances_test.cpp + src/test/rpc/GetCounts_test.cpp + src/test/rpc/JSONRPC_test.cpp + src/test/rpc/KeyGeneration_test.cpp + src/test/rpc/LedgerClosed_test.cpp + src/test/rpc/LedgerData_test.cpp + src/test/rpc/LedgerRPC_test.cpp + src/test/rpc/LedgerRequestRPC_test.cpp + src/test/rpc/NoRippleCheck_test.cpp + src/test/rpc/NoRipple_test.cpp + src/test/rpc/OwnerInfo_test.cpp + src/test/rpc/Peers_test.cpp + src/test/rpc/RPCCall_test.cpp + src/test/rpc/RPCOverload_test.cpp + src/test/rpc/RobustTransaction_test.cpp + src/test/rpc/ServerInfo_test.cpp + src/test/rpc/Status_test.cpp + src/test/rpc/Subscribe_test.cpp + src/test/rpc/TransactionEntry_test.cpp + src/test/rpc/TransactionHistory_test.cpp + src/test/rpc/ValidatorRPC_test.cpp + #[===============================[ + nounity, test sources: + subdir: server + #]===============================] + src/test/server/ServerStatus_test.cpp + src/test/server/Server_test.cpp + #[===============================[ + nounity, test sources: + subdir: shamap + #]===============================] + src/test/shamap/FetchPack_test.cpp + src/test/shamap/SHAMapSync_test.cpp + src/test/shamap/SHAMap_test.cpp + #[===============================[ + nounity, test sources: + subdir: unit_test + #]===============================] + src/test/unit_test/multi_runner.cpp) +endif () +target_link_libraries (rippled + Ripple::boost + Ripple::opts + Ripple::libs + Ripple::xrpl_core) +exclude_if_included (rippled) +# define a macro for tests that might need to +# be exluded or run differently in CI environment +if (is_ci) + target_compile_definitions(rippled PRIVATE RIPPLED_RUNNING_IN_CI) +endif () diff --git a/Builds/CMake/RippledCov.cmake b/Builds/CMake/RippledCov.cmake new file mode 100644 index 0000000000..b9d93f41af --- /dev/null +++ b/Builds/CMake/RippledCov.cmake @@ -0,0 +1,98 @@ +#[===================================================================[ + coverage report target +#]===================================================================] + +if (coverage) + if (is_clang) + if (APPLE) + execute_process (COMMAND xcrun -f llvm-profdata + OUTPUT_VARIABLE LLVM_PROFDATA + OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + find_program (LLVM_PROFDATA llvm-profdata) + endif () + if (NOT LLVM_PROFDATA) + message (WARNING "unable to find llvm-profdata - skipping coverage_report target") + endif () + + if (APPLE) + execute_process (COMMAND xcrun -f llvm-cov + OUTPUT_VARIABLE LLVM_COV + OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + find_program (LLVM_COV llvm-cov) + endif () + if (NOT LLVM_COV) + message (WARNING "unable to find llvm-cov - skipping coverage_report target") + endif () + + set (extract_pattern "") + if (coverage_core_only) + set (extract_pattern "${CMAKE_SOURCE_DIR}/src/ripple/") + endif () + + if (LLVM_COV AND LLVM_PROFDATA) + add_custom_target (coverage_report + USES_TERMINAL + COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage - results will be in ${CMAKE_BINARY_DIR}/coverage/index.html." + COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests." + COMMAND rippled --unittest$<$:=${coverage_test}> --quiet --unittest-log + COMMAND ${LLVM_PROFDATA} + merge -sparse default.profraw -o rip.profdata + COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:" + COMMAND ${LLVM_COV} + report -instr-profile=rip.profdata + $ ${extract_pattern} + # generate html report + COMMAND ${LLVM_COV} + show -format=html -output-dir=${CMAKE_BINARY_DIR}/coverage + -instr-profile=rip.profdata + $ ${extract_pattern} + BYPRODUCTS coverage/index.html) + endif () + elseif (is_gcc) + find_program (LCOV lcov) + if (NOT LCOV) + message (WARNING "unable to find lcov - skipping coverage_report target") + endif () + + find_program (GENHTML genhtml) + if (NOT GENHTML) + message (WARNING "unable to find genhtml - skipping coverage_report target") + endif () + + set (extract_pattern "*") + if (coverage_core_only) + set (extract_pattern "*/src/ripple/*") + endif () + + if (LCOV AND GENHTML) + add_custom_target (coverage_report + USES_TERMINAL + COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage- results will be in ${CMAKE_BINARY_DIR}/coverage/index.html." + # create baseline info file + COMMAND ${LCOV} + --no-external -d "${CMAKE_SOURCE_DIR}" -c -d . -i -o baseline.info + | grep -v "ignoring data for external file" + # run tests + COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests for coverage report." + COMMAND rippled --unittest$<$:=${coverage_test}> --quiet --unittest-log + # Create test coverage data file + COMMAND ${LCOV} + --no-external -d "${CMAKE_SOURCE_DIR}" -c -d . -o tests.info + | grep -v "ignoring data for external file" + # Combine baseline and test coverage data + COMMAND ${LCOV} + -a baseline.info -a tests.info -o lcov-all.info + # extract our files + COMMAND ${LCOV} + -e lcov-all.info "${extract_pattern}" -o lcov.info + COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:" + COMMAND ${LCOV} --summary lcov.info + # generate HTML report + COMMAND ${GENHTML} + -o ${CMAKE_BINARY_DIR}/coverage lcov.info + BYPRODUCTS coverage/index.html) + endif () + endif () +endif () diff --git a/Builds/CMake/RippledDocs.cmake b/Builds/CMake/RippledDocs.cmake new file mode 100644 index 0000000000..be964a5604 --- /dev/null +++ b/Builds/CMake/RippledDocs.cmake @@ -0,0 +1,31 @@ +#[===================================================================[ + docs target (optional) +#]===================================================================] + +find_package (Doxygen) +if (TARGET Doxygen::doxygen) + set (doc_srcs docs/source.dox) + file (GLOB_RECURSE other_docs docs/*.md) + list (APPEND doc_srcs "${other_docs}") + # read the source config and make a modified one + # that points the output files to our build directory + file (READ "${CMAKE_CURRENT_SOURCE_DIR}/docs/source.dox" dox_content) + string (REGEX REPLACE "[\t ]*OUTPUT_DIRECTORY[\t ]*=(.*)" + "OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}\n\\1" + new_config "${dox_content}") + file (WRITE "${CMAKE_BINARY_DIR}/source.dox" "${new_config}") + add_custom_target (docs + COMMAND "${DOXYGEN_EXECUTABLE}" "${CMAKE_BINARY_DIR}/source.dox" + BYPRODUCTS "${CMAKE_BINARY_DIR}/html_doc/index.html" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/docs" + SOURCES "${doc_srcs}") + if (is_multiconfig) + set_property ( + SOURCE ${doc_srcs} + APPEND + PROPERTY HEADER_FILE_ONLY + true) + endif () +else () + message (STATUS "doxygen executable not found -- skipping docs target") +endif () diff --git a/Builds/CMake/RippledInstall.cmake b/Builds/CMake/RippledInstall.cmake new file mode 100644 index 0000000000..883704a9a3 --- /dev/null +++ b/Builds/CMake/RippledInstall.cmake @@ -0,0 +1,51 @@ +#[===================================================================[ + install stuff +#]===================================================================] + +install ( + TARGETS + secp256k1 + ed25519-donna + common + opts + ripple_syslibs + ripple_boost + xrpl_core + EXPORT RippleExports + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include) +install (EXPORT RippleExports + FILE RippleTargets.cmake + NAMESPACE Ripple:: + DESTINATION lib/cmake/ripple) +include (CMakePackageConfigHelpers) +write_basic_package_version_file ( + RippleConfigVersion.cmake + VERSION ${rippled_version} + COMPATIBILITY SameMajorVersion) + +if (is_root_project) + install (TARGETS rippled RUNTIME DESTINATION bin) + set_target_properties(rippled PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON) + install ( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/RippleConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/RippleConfigVersion.cmake + DESTINATION lib/cmake/ripple) + # sample configs should not overwrite existing files + # install if-not-exists workaround as suggested by + # https://cmake.org/Bug/view.php?id=12646 + install(CODE " + macro (copy_if_not_exists SRC DEST NEWNAME) + if (NOT EXISTS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") + file (INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/\${DEST}\" FILES \"\${SRC}\" RENAME \"\${NEWNAME}\") + else () + message (\"-- Skipping : \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") + endif () + endmacro() + copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/rippled-example.cfg\" etc rippled.cfg) + copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt\" etc validators.txt) + ") +endif () diff --git a/Builds/CMake/RippledInterface.cmake b/Builds/CMake/RippledInterface.cmake new file mode 100644 index 0000000000..c28896087e --- /dev/null +++ b/Builds/CMake/RippledInterface.cmake @@ -0,0 +1,108 @@ +#[===================================================================[ + rippled compile options/settings via an interface library +#]===================================================================] + +add_library (opts INTERFACE) +add_library (Ripple::opts ALIAS opts) +target_compile_definitions (opts + INTERFACE + BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS + $<$: + BOOST_ASIO_NO_DEPRECATED + BOOST_FILESYSTEM_NO_DEPRECATED + > + $<$>: + BOOST_COROUTINES_NO_DEPRECATION_WARNING + BOOST_BEAST_ALLOW_DEPRECATED + BOOST_FILESYSTEM_DEPRECATED + > + $<$: + USE_BEAST_HASHER + > + $<$:BEAST_NO_UNIT_TEST_INLINE=1> + $<$:BEAST_DONT_AUTOLINK_TO_WIN32_LIBRARIES=1> + $<$:RIPPLE_SINGLE_IO_SERVICE_THREAD=1> + # doesn't currently compile ? : + $<$:RIPPLE_VERIFY_NODEOBJECT_KEYS=1>) +target_compile_options (opts + INTERFACE + $<$,$>:-Wsuggest-override> + $<$:-fno-omit-frame-pointer> + $<$,$>:-fprofile-arcs -ftest-coverage> + $<$,$>:-fprofile-instr-generate -fcoverage-mapping> + $<$:-pg> + $<$,$>:-p>) + +target_link_libraries (opts + INTERFACE + $<$,$>:-fprofile-arcs -ftest-coverage> + $<$,$>:-fprofile-instr-generate -fcoverage-mapping> + $<$:-pg> + $<$,$>:-p>) + +if (jemalloc) + if (static) + set(JEMALLOC_USE_STATIC ON CACHE BOOL "" FORCE) + endif () + find_package (jemalloc REQUIRED) + target_compile_definitions (opts INTERFACE PROFILE_JEMALLOC) + target_include_directories (opts SYSTEM INTERFACE ${JEMALLOC_INCLUDE_DIRS}) + target_link_libraries (opts INTERFACE ${JEMALLOC_LIBRARIES}) + get_filename_component (JEMALLOC_LIB_PATH ${JEMALLOC_LIBRARIES} DIRECTORY) + ## TODO see if we can use the BUILD_RPATH target property (is it transitive?) + set (CMAKE_BUILD_RPATH ${CMAKE_BUILD_RPATH} ${JEMALLOC_LIB_PATH}) +endif () + +if (san) + target_compile_options (opts + INTERFACE + # sanitizers recommend minimum of -O1 for reasonable performance + $<$:-O1> + ${SAN_FLAG} + -fno-omit-frame-pointer) + target_compile_definitions (opts + INTERFACE + $<$:SANITIZER=ASAN> + $<$:SANITIZER=TSAN> + $<$:SANITIZER=MSAN> + $<$:SANITIZER=UBSAN>) + target_link_libraries (opts INTERFACE ${SAN_FLAG} ${SAN_LIB}) +endif () + +#[===================================================================[ + rippled transitive library deps via an interface library +#]===================================================================] + +add_library (ripple_syslibs INTERFACE) +add_library (Ripple::syslibs ALIAS ripple_syslibs) +target_link_libraries (ripple_syslibs + INTERFACE + $<$: + legacy_stdio_definitions.lib + Shlwapi + kernel32 + user32 + gdi32 + winspool + comdlg32 + advapi32 + shell32 + ole32 + oleaut32 + uuid + odbc32 + odbccp32 + crypt32 + > + $<$>:dl> + $<$,$>>:rt>) + +if (NOT MSVC) + set (THREADS_PREFER_PTHREAD_FLAG ON) + find_package (Threads) + target_link_libraries (ripple_syslibs INTERFACE Threads::Threads) +endif () + +add_library (ripple_libs INTERFACE) +add_library (Ripple::libs ALIAS ripple_libs) +target_link_libraries (ripple_libs INTERFACE Ripple::syslibs) diff --git a/Builds/CMake/RippledMultiConfig.cmake b/Builds/CMake/RippledMultiConfig.cmake new file mode 100644 index 0000000000..3bc500b53b --- /dev/null +++ b/Builds/CMake/RippledMultiConfig.cmake @@ -0,0 +1,39 @@ +#[===================================================================[ + multiconfig misc +#]===================================================================] + +if (is_multiconfig) + # This code finds all source files in the src subdirectory for inclusion + # in the IDE file tree as non-compiled sources. Since this file list will + # have some overlap with files we have already added to our targets to + # be compiled, we explicitly remove any of these target source files from + # this list. + file (GLOB_RECURSE all_sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + src/*.* Builds/*.md docs/*.md src/*.md Builds/*.cmake) + file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS + *.md) + LIST(APPEND all_sources ${md_files}) + foreach (_target secp256k1 ed25519-donna pbufs xrpl_core rippled) + get_target_property (_type ${_target} TYPE) + if(_type STREQUAL "INTERFACE_LIBRARY") + continue() + endif() + get_target_property (_src ${_target} SOURCES) + list (REMOVE_ITEM all_sources ${_src}) + endforeach () + target_sources (rippled PRIVATE ${all_sources}) + set_property ( + SOURCE ${all_sources} + APPEND + PROPERTY HEADER_FILE_ONLY true) + if (MSVC) + set_property( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + PROPERTY VS_STARTUP_PROJECT rippled) + endif () + + group_sources(src) + group_sources(docs) + group_sources(Builds) +endif () diff --git a/Builds/CMake/RippledNIH.cmake b/Builds/CMake/RippledNIH.cmake new file mode 100644 index 0000000000..e0c161aba7 --- /dev/null +++ b/Builds/CMake/RippledNIH.cmake @@ -0,0 +1,33 @@ +#[===================================================================[ + NIH prefix path..this is where we will download + and build any ExternalProjects, and they will hopefully + survive across build directory deletion (manual cleans) +#]===================================================================] + +string (REGEX REPLACE "[ \\/%]+" "_" gen_for_path ${CMAKE_GENERATOR}) +string (TOLOWER ${gen_for_path} gen_for_path) +# HACK: trying to shorten paths for windows CI (which hits 260 MAXPATH easily) +# @see: https://issues.jenkins-ci.org/browse/JENKINS-38706?focusedCommentId=339847 +string (REPLACE "visual_studio" "vs" gen_for_path ${gen_for_path}) +if (NOT DEFINED NIH_CACHE_ROOT) + if (DEFINED ENV{NIH_CACHE_ROOT}) + set (NIH_CACHE_ROOT $ENV{NIH_CACHE_ROOT}) + else () + set (NIH_CACHE_ROOT "${CMAKE_SOURCE_DIR}/.nih_c") + endif () +endif () +set (nih_cache_path + "${NIH_CACHE_ROOT}/${gen_for_path}/${CMAKE_CXX_COMPILER_ID}_${CMAKE_CXX_COMPILER_VERSION}") +if (NOT is_multiconfig) + set (nih_cache_path "${nih_cache_path}/${CMAKE_BUILD_TYPE}") +endif () +file(TO_CMAKE_PATH "${nih_cache_path}" nih_cache_path) +message (STATUS "NIH-EP cache path: ${nih_cache_path}") +## two convenience variables: +set (ep_lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX}) +set (ep_lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX}) + +# this is a setting for FetchContent and needs to be +# a cache variable +# https://cmake.org/cmake/help/latest/module/FetchContent.html#populating-the-content +set (FETCHCONTENT_BASE_DIR ${nih_cache_path} CACHE STRING "" FORCE) diff --git a/Builds/CMake/RippledRelease.cmake b/Builds/CMake/RippledRelease.cmake new file mode 100644 index 0000000000..a173695237 --- /dev/null +++ b/Builds/CMake/RippledRelease.cmake @@ -0,0 +1,181 @@ +#[===================================================================[ + package/container targets - (optional) +#]===================================================================] + +if (is_root_project) + if (NOT DOCKER) + find_program (DOCKER docker) + endif () + + if (DOCKER) + # if no container label is provided, use current git hash + git_hash (commit_hash) + if (NOT container_label) + set (container_label ${commit_hash}) + endif () + message (STATUS "using [${container_label}] as build container tag...") + + file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages) + file (MAKE_DIRECTORY ${NIH_CACHE_ROOT}/pkgbuild) + if (is_linux) + execute_process (COMMAND id -u + OUTPUT_VARIABLE DOCKER_USER_ID + OUTPUT_STRIP_TRAILING_WHITESPACE) + message (STATUS "docker local user id: ${DOCKER_USER_ID}") + execute_process (COMMAND id -g + OUTPUT_VARIABLE DOCKER_GROUP_ID + OUTPUT_STRIP_TRAILING_WHITESPACE) + message (STATUS "docker local group id: ${DOCKER_GROUP_ID}") + endif () + if (DOCKER_USER_ID AND DOCKER_GROUP_ID) + set(map_user TRUE) + endif () + #[===================================================================[ + rpm + #]===================================================================] + add_custom_target (rpm_container + docker build + --pull + --build-arg GIT_COMMIT=${commit_hash} + -t rippled-rpm-builder:${container_label} + $<$:--cache-from=${rpm_cache_from}> + -f centos-builder/Dockerfile . + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS + SOURCES + Builds/containers/centos-builder/Dockerfile + Builds/containers/centos-builder/centos_setup.sh + Builds/containers/centos-builder/extras.sh + Builds/containers/shared/build_deps.sh + Builds/containers/shared/rippled.service + Builds/containers/shared/update_sources.sh + Builds/containers/shared/update-rippled.sh + Builds/containers/packaging/rpm/rippled.spec + Builds/containers/packaging/rpm/build_rpm.sh + ) + exclude_from_default (rpm_container) + add_custom_target (rpm + docker run + -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c + -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c + -v ${CMAKE_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled + -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out + "$<$:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>" + -t rippled-rpm-builder:${container_label} + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS + SOURCES + Builds/containers/packaging/rpm/rippled.spec + ) + exclude_from_default (rpm) + if (NOT have_package_container) + add_dependencies(rpm rpm_container) + endif () + #[===================================================================[ + dpkg + #]===================================================================] + # currently use ubuntu 16.04 as a base b/c it has one of + # the lower versions of libc among ubuntu and debian releases. + # we could change this in the future and build with some other deb + # based system. + add_custom_target (dpkg_container + docker build + --pull + --build-arg DIST_TAG=16.04 + --build-arg GIT_COMMIT=${commit_hash} + -t rippled-dpkg-builder:${container_label} + $<$:--cache-from=${dpkg_cache_from}> + -f ubuntu-builder/Dockerfile . + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS + SOURCES + Builds/containers/ubuntu-builder/Dockerfile + Builds/containers/ubuntu-builder/ubuntu_setup.sh + Builds/containers/shared/build_deps.sh + Builds/containers/shared/rippled.service + Builds/containers/shared/update_sources.sh + Builds/containers/shared/update-rippled.sh + Builds/containers/packaging/dpkg/build_dpkg.sh + Builds/containers/packaging/dpkg/debian/README.Debian + Builds/containers/packaging/dpkg/debian/conffiles + Builds/containers/packaging/dpkg/debian/control + Builds/containers/packaging/dpkg/debian/copyright + Builds/containers/packaging/dpkg/debian/dirs + Builds/containers/packaging/dpkg/debian/docs + Builds/containers/packaging/dpkg/debian/rippled-dev.install + Builds/containers/packaging/dpkg/debian/rippled.install + Builds/containers/packaging/dpkg/debian/rippled.links + Builds/containers/packaging/dpkg/debian/rippled.postinst + Builds/containers/packaging/dpkg/debian/rippled.postrm + Builds/containers/packaging/dpkg/debian/rippled.preinst + Builds/containers/packaging/dpkg/debian/rippled.prerm + Builds/containers/packaging/dpkg/debian/rules + ) + exclude_from_default (dpkg_container) + add_custom_target (dpkg + docker run + -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c + -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c + -v ${CMAKE_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled + -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out + "$<$:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>" + -t rippled-dpkg-builder:${container_label} + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS + SOURCES + Builds/containers/packaging/dpkg/debian/control + ) + exclude_from_default (dpkg) + if (NOT have_package_container) + add_dependencies(dpkg dpkg_container) + endif () + #[===================================================================[ + ci container + #]===================================================================] + # now use the same ubuntu image for our travis-ci docker images, + # but we use a newer distro (18.04 vs 16.04). + # + # steps for publishing a new CI image when you make changes: + # + # mkdir bld.ci && cd bld.ci && cmake -Dpackages_only=ON -Dcontainer_label=CI_LATEST + # cmake --build . --target ci_container --verbose + # docker tag rippled-ci-builder:CI_LATEST /rippled-ci-builder:YYYY-MM-DD + # (change YYYY-MM-DD to match current date..or use a different + # tag/label scheme if you prefer) + # docker push /rippled-ci-builder:YYYY-MM-DD + # + # ...then change the DOCKER_IMAGE line in .travis.yml : + # - DOCKER_IMAGE="/rippled-ci-builder:YYYY-MM-DD" + add_custom_target (ci_container + docker build + --pull + --build-arg DIST_TAG=18.04 + --build-arg GIT_COMMIT=${commit_hash} + --build-arg CI_USE=true + -t rippled-ci-builder:${container_label} + $<$:--cache-from=${ci_cache_from}> + -f ubuntu-builder/Dockerfile . + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers + VERBATIM + USES_TERMINAL + COMMAND_EXPAND_LISTS + SOURCES + Builds/containers/ubuntu-builder/Dockerfile + Builds/containers/ubuntu-builder/ubuntu_setup.sh + Builds/containers/shared/build_deps.sh + Builds/containers/shared/rippled.service + Builds/containers/shared/update_sources.sh + Builds/containers/shared/update-rippled.sh + ) + exclude_from_default (ci_container) + else () + message (STATUS "docker NOT found -- won't be able to build containers for packaging") + endif () +endif () + diff --git a/Builds/CMake/RippledSanity.cmake b/Builds/CMake/RippledSanity.cmake new file mode 100644 index 0000000000..aec1f18e3d --- /dev/null +++ b/Builds/CMake/RippledSanity.cmake @@ -0,0 +1,88 @@ +#[===================================================================[ + convenience variables and sanity checks +#]===================================================================] + +if (NOT ep_procs) + ProcessorCount(ep_procs) + if (ep_procs GREATER 1) + # never use more than half of cores for EP builds + math (EXPR ep_procs "${ep_procs} / 2") + message (STATUS "Using ${ep_procs} cores for ExternalProject builds.") + endif () +endif () +get_property (is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if (is_multiconfig STREQUAL "NOTFOUND") + if (${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} MATCHES "^Visual Studio") + set (is_multiconfig TRUE) + endif () +endif () + +set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) +if (NOT is_multiconfig) + if (NOT CMAKE_BUILD_TYPE) + message (STATUS "Build type not specified - defaulting to Release") + set (CMAKE_BUILD_TYPE Release CACHE STRING "build type" FORCE) + elseif (NOT (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL Release)) + # for simplicity, these are the only two config types we care about. Limiting + # the build types simplifies dealing with external project builds especially + message (FATAL_ERROR " *** Only Debug or Release build types are currently supported ***") + endif () +endif () + +get_directory_property(has_parent PARENT_DIRECTORY) +if (has_parent) + set (is_root_project OFF) +else () + set (is_root_project ON) +endif () + +if ("${CMAKE_CXX_COMPILER_ID}" MATCHES ".*Clang") # both Clang and AppleClang + set (is_clang TRUE) + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND + CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) + message (FATAL_ERROR "This project requires clang 5 or later") + endif () + # TODO min AppleClang version check ? +elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set (is_gcc TRUE) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) + message (FATAL_ERROR "This project requires GCC 7 or later") + endif () +endif () +if (CMAKE_GENERATOR STREQUAL "Xcode") + set (is_xcode TRUE) +endif () + +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set (is_linux TRUE) +else () + set (is_linux FALSE) +endif () + +if ("$ENV{CI}" STREQUAL "true" OR "$ENV{CONTINUOUS_INTEGRATION}" STREQUAL "true") + set (is_ci TRUE) +else () + set (is_ci FALSE) +endif () + +# check for in-source build and fail +if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + message (FATAL_ERROR "Builds (in-source) are not allowed in " + "${CMAKE_CURRENT_SOURCE_DIR}. Please remove CMakeCache.txt and the CMakeFiles " + "directory from ${CMAKE_CURRENT_SOURCE_DIR} and try building in a separate directory.") +endif () + +if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio" AND + NOT ("${CMAKE_GENERATOR}" MATCHES .*Win64.*)) + message (FATAL_ERROR + "Visual Studio 32-bit build is not supported. Use -G\"${CMAKE_GENERATOR} Win64\"") +endif () + +if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + message (FATAL_ERROR "Rippled requires a 64 bit target architecture.\n" + "The most likely cause of this warning is trying to build rippled with a 32-bit OS.") +endif () + +if (APPLE AND NOT HOMEBREW) + find_program (HOMEBREW brew) +endif () diff --git a/Builds/CMake/RippledSettings.cmake b/Builds/CMake/RippledSettings.cmake new file mode 100644 index 0000000000..fb89738107 --- /dev/null +++ b/Builds/CMake/RippledSettings.cmake @@ -0,0 +1,114 @@ +#[===================================================================[ + declare user options/settings +#]===================================================================] + +option (assert "Enables asserts, even in release builds" OFF) +option (unity "Creates a build based on unity sources. This is the default" ON) +if (is_gcc OR is_clang) + option (coverage "Generates coverage info." OFF) + option (profile "Add profiling flags" OFF) + 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 (coverage_core_only + "Include only src/ripple files when generating coverage report. \ + Set to OFF to include all sources in coverage report." + ON) +else () + set (profile OFF CACHE BOOL "gcc/clang only" FORCE) + set (coverage 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) +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) +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 use of a local build of protobuf instead of system 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) +# NOTE - THIS OPTION CURRENTLY DOES NOT COMPILE : +# TODO: fix or remove +option (verify_nodeobject_keys + "This verifies that the hash of node objects matches the payload. \ + This check is expensive - use with caution." + 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 () diff --git a/Builds/CMake/RippledValidatorKeys.cmake b/Builds/CMake/RippledValidatorKeys.cmake new file mode 100644 index 0000000000..2cf71f2236 --- /dev/null +++ b/Builds/CMake/RippledValidatorKeys.cmake @@ -0,0 +1,24 @@ +option (validator_keys "Enables building of validator-keys-tool as a separate target (imported via FetchContent)" OFF) + +if (validator_keys AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.11) + git_branch (current_branch) + # default to tracking VK develop branch unless we are on master/release + if (NOT (current_branch STREQUAL "master" OR current_branch STREQUAL "release")) + set (current_branch "develop") + endif () + message (STATUS "tracking ValidatorKeys branch: ${current_branch}") + + FetchContent_Declare ( + validator_keys_src + GIT_REPOSITORY https://github.com/ripple/validator-keys-tool.git + GIT_TAG "${current_branch}" + ) + FetchContent_GetProperties (validator_keys_src) + if (NOT validator_keys_src_POPULATED) + message (STATUS "Pausing to download ValidatorKeys...") + FetchContent_Populate (validator_keys_src) + endif () + add_subdirectory (${validator_keys_src_SOURCE_DIR} ${CMAKE_BINARY_DIR}/validator-keys) +endif () + + diff --git a/Builds/CMake/RippledVersion.cmake b/Builds/CMake/RippledVersion.cmake new file mode 100644 index 0000000000..936852af58 --- /dev/null +++ b/Builds/CMake/RippledVersion.cmake @@ -0,0 +1,15 @@ +#[===================================================================[ + read version from source +#]===================================================================] + +file (STRINGS src/ripple/protocol/impl/BuildInfo.cpp BUILD_INFO) +foreach (line_ ${BUILD_INFO}) + if (line_ MATCHES "versionString[ ]*=[ ]*\"(.+)\"") + set (rippled_version ${CMAKE_MATCH_1}) + endif () +endforeach () +if (rippled_version) + message (STATUS "rippled version: ${rippled_version}") +else () + message (FATAL_ERROR "unable to determine rippled version") +endif () diff --git a/Builds/CMake/deps/Boost.cmake b/Builds/CMake/deps/Boost.cmake new file mode 100644 index 0000000000..d8ab0366e6 --- /dev/null +++ b/Builds/CMake/deps/Boost.cmake @@ -0,0 +1,92 @@ +#[===================================================================[ + NIH dep: boost +#]===================================================================] + +if ((NOT DEFINED BOOST_ROOT) AND (DEFINED ENV{BOOST_ROOT})) + set (BOOST_ROOT $ENV{BOOST_ROOT}) +endif () +file (TO_CMAKE_PATH "${BOOST_ROOT}" BOOST_ROOT) +if (WIN32 OR CYGWIN) + # Workaround for MSVC having two boost versions - x86 and x64 on same PC in stage folders + if (DEFINED BOOST_ROOT) + if (IS_DIRECTORY ${BOOST_ROOT}/stage64/lib) + set (BOOST_LIBRARYDIR ${BOOST_ROOT}/stage64/lib) + else () + set (BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib) + endif () + endif () +endif () +message (STATUS "BOOST_ROOT: ${BOOST_ROOT}") +message (STATUS "BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}") + +# uncomment the following as needed to debug FindBoost issues: +#set (Boost_DEBUG ON) + +#[=========================================================[ + boost dynamic libraries don't trivially support @rpath + linking right now (cmake's default), so just force + static linking for macos, or if requested on linux by flag +#]=========================================================] +if (static) + set (Boost_USE_STATIC_LIBS ON) +endif () +set (Boost_USE_MULTITHREADED ON) +if (static AND NOT APPLE) + set (Boost_USE_STATIC_RUNTIME ON) +else () + set (Boost_USE_STATIC_RUNTIME OFF) +endif () +find_package (Boost 1.70 REQUIRED + COMPONENTS + chrono + context + coroutine + date_time + filesystem + program_options + regex + serialization + system + thread) + +add_library (ripple_boost INTERFACE) +add_library (Ripple::boost ALIAS ripple_boost) +if (is_xcode) + target_include_directories (ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS}) + target_compile_options (ripple_boost INTERFACE --system-header-prefix="boost/") +else () + target_include_directories (ripple_boost SYSTEM BEFORE INTERFACE ${Boost_INCLUDE_DIRS}) +endif() + +target_link_libraries (ripple_boost + INTERFACE + Boost::boost + Boost::chrono + Boost::coroutine + Boost::date_time + Boost::filesystem + Boost::program_options + Boost::regex + Boost::serialization + Boost::system + Boost::thread) +if (san) + if (NOT Boost_INCLUDE_DIRS AND TARGET Boost::headers) + get_target_property (Boost_INCLUDE_DIRS Boost::headers INTERFACE_INCLUDE_DIRECTORIES) + endif () + message(STATUS "Adding [${Boost_INCLUDE_DIRS}] to sanitizer blacklist") + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/san_bl.txt "src:${Boost_INCLUDE_DIRS}/*") + target_compile_options (opts + INTERFACE + # ignore boost headers for sanitizing + -fsanitize-blacklist=${CMAKE_CURRENT_BINARY_DIR}/san_bl.txt) +endif () + +# workaround for xcode 10.2 and boost < 1.69 +# once we require Boost 1.69 or higher, this can be removed +# see: https://github.com/boostorg/asio/commit/43874d5 +if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0.1.10010043 AND + Boost_VERSION LESS 106900) + target_compile_definitions (opts INTERFACE BOOST_ASIO_HAS_STD_STRING_VIEW) +endif () diff --git a/Builds/CMake/deps/Ed25519-donna.cmake b/Builds/CMake/deps/Ed25519-donna.cmake new file mode 100644 index 0000000000..7f352423fd --- /dev/null +++ b/Builds/CMake/deps/Ed25519-donna.cmake @@ -0,0 +1,28 @@ +#[===================================================================[ + NIH dep: ed25519-donna +#]===================================================================] + +add_library (ed25519-donna STATIC + src/ed25519-donna/ed25519.c) +target_include_directories (ed25519-donna + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src/ed25519-donna) +#[=========================================================[ + NOTE for macos: + https://github.com/floodyberry/ed25519-donna/issues/29 + our source for ed25519-donna-portable.h has been + patched to workaround this. +#]=========================================================] +target_link_libraries (ed25519-donna PUBLIC OpenSSL::SSL) +add_library (NIH::ed25519-donna ALIAS ed25519-donna) +target_link_libraries (ripple_libs INTERFACE NIH::ed25519-donna) +#[===========================[ + headers installation +#]===========================] +install ( + FILES + src/ed25519-donna/ed25519.h + DESTINATION include/ed25519-donna) diff --git a/Builds/CMake/deps/Libarchive.cmake b/Builds/CMake/deps/Libarchive.cmake new file mode 100644 index 0000000000..203d42b7e3 --- /dev/null +++ b/Builds/CMake/deps/Libarchive.cmake @@ -0,0 +1,101 @@ +#[===================================================================[ + NIH dep: libarchive +#]===================================================================] + +set (lib_post "") +if (MSVC) + set (lib_post "_static") +endif () +ExternalProject_Add (libarchive + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/libarchive/libarchive.git + GIT_TAG v3.3.3 + CMAKE_ARGS + # passing the compiler seems to be needed for windows CI, sadly + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + -DENABLE_LZ4=ON + -ULZ4_* + -DLZ4_INCLUDE_DIR=$,::> + # because we are building a static lib, this lz4 library doesn't + # actually matter since you can't generally link static libs to other static + # libs. The include files are needed, but the library itself is not (until + # we link our application, at which point we use the lz4 we built above). + # nonetheless, we need to provide a library to libarchive else it will + # NOT include lz4 support when configuring + -DLZ4_LIBRARY=$,$,$> + -DENABLE_WERROR=OFF + -DENABLE_TAR=OFF + -DENABLE_TAR_SHARED=OFF + -DENABLE_INSTALL=ON + -DENABLE_NETTLE=OFF + -DENABLE_OPENSSL=OFF + -DENABLE_LZO=OFF + -DENABLE_LZMA=OFF + -DENABLE_ZLIB=OFF + -DENABLE_BZip2=OFF + -DENABLE_LIBXML2=OFF + -DENABLE_EXPAT=OFF + -DENABLE_PCREPOSIX=OFF + -DENABLE_LibGCC=OFF + -DENABLE_CNG=OFF + -DENABLE_CPIO=OFF + -DENABLE_CPIO_SHARED=OFF + -DENABLE_CAT=OFF + -DENABLE_CAT_SHARED=OFF + -DENABLE_XATTR=OFF + -DENABLE_ACL=OFF + -DENABLE_ICONV=OFF + -DENABLE_TEST=OFF + -DENABLE_COVERAGE=OFF + $<$: + "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" + "-DCMAKE_C_FLAGS_DEBUG=-MTd" + "-DCMAKE_C_FLAGS_RELEASE=-MT" + > + LIST_SEPARATOR :: + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + --target archive_static + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /libarchive/$/${ep_lib_prefix}archive${lib_post}$<$:_d>${ep_lib_suffix} + /libarchive + > + TEST_COMMAND "" + INSTALL_COMMAND "" + DEPENDS lz4 + BUILD_BYPRODUCTS + /libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix} + /libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix} +) +ExternalProject_Get_Property (libarchive BINARY_DIR) +ExternalProject_Get_Property (libarchive SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (libarchive) +endif () +add_library (archive_lib STATIC IMPORTED GLOBAL) +file (MAKE_DIRECTORY ${SOURCE_DIR}/libarchive) +set_target_properties (archive_lib PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + ${SOURCE_DIR}/libarchive + INTERFACE_COMPILE_DEFINITIONS + LIBARCHIVE_STATIC) +add_dependencies (archive_lib libarchive) +target_link_libraries (archive_lib INTERFACE lz4_lib) +target_link_libraries (ripple_libs INTERFACE archive_lib) +exclude_if_included (libarchive) +exclude_if_included (archive_lib) diff --git a/Builds/CMake/deps/Lz4.cmake b/Builds/CMake/deps/Lz4.cmake new file mode 100644 index 0000000000..2f6f0e7f64 --- /dev/null +++ b/Builds/CMake/deps/Lz4.cmake @@ -0,0 +1,60 @@ +#[===================================================================[ + NIH dep: lz4 +#]===================================================================] + +ExternalProject_Add (lz4 + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/lz4/lz4.git + GIT_TAG v1.8.2 + SOURCE_SUBDIR contrib/cmake_unofficial + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + -DBUILD_STATIC_LIBS=ON + -DBUILD_SHARED_LIBS=OFF + $<$: + "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" + "-DCMAKE_C_FLAGS_DEBUG=-MTd" + "-DCMAKE_C_FLAGS_RELEASE=-MT" + > + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + --target lz4_static + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /$/${ep_lib_prefix}lz4$<$:_d>${ep_lib_suffix} + + > + TEST_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS + /${ep_lib_prefix}lz4${ep_lib_suffix} + /${ep_lib_prefix}lz4_d${ep_lib_suffix} +) +ExternalProject_Get_Property (lz4 BINARY_DIR) +ExternalProject_Get_Property (lz4 SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (lz4) +endif () +add_library (lz4_lib STATIC IMPORTED GLOBAL) +file (MAKE_DIRECTORY ${SOURCE_DIR}/lz4) +set_target_properties (lz4_lib PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/${ep_lib_prefix}lz4_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/${ep_lib_prefix}lz4${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + ${SOURCE_DIR}/lib) +add_dependencies (lz4_lib lz4) +target_link_libraries (ripple_libs INTERFACE lz4_lib) +exclude_if_included (lz4) +exclude_if_included (lz4_lib) diff --git a/Builds/CMake/deps/Nudb.cmake b/Builds/CMake/deps/Nudb.cmake new file mode 100644 index 0000000000..b8b9a73cd9 --- /dev/null +++ b/Builds/CMake/deps/Nudb.cmake @@ -0,0 +1,47 @@ +#[===================================================================[ + NIH dep: nudb + + NuDB is header-only, thus is an INTERFACE lib in CMake. + TODO: move the library definition into NuDB repo and add + proper targets and export/install +#]===================================================================] + +if (is_root_project) # NuDB not needed in the case of xrpl_core inclusion build + add_library (nudb INTERFACE) + if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.11) + FetchContent_Declare( + nudb_src + GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git + GIT_TAG 2.0.1 + ) + FetchContent_GetProperties(nudb_src) + if(NOT nudb_src_POPULATED) + message (STATUS "Pausing to download NuDB...") + FetchContent_Populate(nudb_src) + endif() + else () + ExternalProject_Add (nudb_src + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git + GIT_TAG 2.0.1 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + TEST_COMMAND "" + INSTALL_COMMAND "" + ) + ExternalProject_Get_Property (nudb_src SOURCE_DIR) + set (nudb_src_SOURCE_DIR "${SOURCE_DIR}") + file (MAKE_DIRECTORY ${nudb_src_SOURCE_DIR}/include) + add_dependencies (nudb nudb_src) + endif () + + file(TO_CMAKE_PATH "${nudb_src_SOURCE_DIR}" nudb_src_SOURCE_DIR) +# specify as system includes so as to avoid warnings + target_include_directories (nudb SYSTEM INTERFACE ${nudb_src_SOURCE_DIR}/include) + target_link_libraries (nudb + INTERFACE + Boost::thread + Boost::system) + add_library (NIH::nudb ALIAS nudb) + target_link_libraries (ripple_libs INTERFACE NIH::nudb) +endif () diff --git a/Builds/CMake/deps/OpenSSL.cmake b/Builds/CMake/deps/OpenSSL.cmake new file mode 100644 index 0000000000..f8761d2626 --- /dev/null +++ b/Builds/CMake/deps/OpenSSL.cmake @@ -0,0 +1,48 @@ +#[===================================================================[ + NIH dep: openssl +#]===================================================================] + +#[===============================================[ + OPENSSL_ROOT_DIR is the only variable that + FindOpenSSL honors for locating, so convert any + OPENSSL_ROOT vars to this +#]===============================================] +if (NOT DEFINED OPENSSL_ROOT_DIR) + if (DEFINED ENV{OPENSSL_ROOT}) + set (OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT}) + elseif (HOMEBREW) + execute_process (COMMAND ${HOMEBREW} --prefix openssl + OUTPUT_VARIABLE OPENSSL_ROOT_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif () + file (TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR) +endif () + +if (static) + set (OPENSSL_USE_STATIC_LIBS ON) +endif () +set (OPENSSL_MSVC_STATIC_RT ON) +find_package (OpenSSL 1.0.2 REQUIRED) +target_link_libraries (ripple_libs + INTERFACE + OpenSSL::SSL + OpenSSL::Crypto) +# disable SSLv2...this can also be done when building/configuring OpenSSL +set_target_properties(OpenSSL::SSL PROPERTIES + INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2) +#[=========================================================[ + https://gitlab.kitware.com/cmake/cmake/issues/16885 + depending on how openssl is built, it might depend + on zlib. In fact, the openssl find package should + figure this out for us, but it does not currently... + so let's add zlib ourselves to the lib list + TODO: investigate linking to static zlib for static + build option +#]=========================================================] +find_package (ZLIB) +set (has_zlib FALSE) +if (TARGET ZLIB::ZLIB) + set_target_properties(OpenSSL::Crypto PROPERTIES + INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) + set (has_zlib TRUE) +endif () diff --git a/Builds/CMake/deps/Protobuf.cmake b/Builds/CMake/deps/Protobuf.cmake new file mode 100644 index 0000000000..4ca55d1fa7 --- /dev/null +++ b/Builds/CMake/deps/Protobuf.cmake @@ -0,0 +1,124 @@ +#[===================================================================[ + import protobuf (lib and compiler) and create a lib + from our proto message definitions. If the system protobuf + is not found, fallback on EP to download and build a version + from official source. +#]===================================================================] + +if (static) + set (Protobuf_USE_STATIC_LIBS ON) +endif () +find_package (Protobuf) +if (local_protobuf OR NOT TARGET protobuf::libprotobuf) + message (STATUS "using local protobuf build.") + if (WIN32) + # protobuf prepends lib even on windows + set (pbuf_lib_pre "lib") + else () + set (pbuf_lib_pre ${ep_lib_prefix}) + endif () + # for the external project build of protobuf, we currently ignore the + # static option and always build static libs here. This is consistent + # with our other EP builds. Dynamic libs in an EP would add complexity + # because we'd need to get them into the runtime path, and probably + # install them. + ExternalProject_Add (protobuf_src + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git + GIT_TAG v3.6.1 + SOURCE_SUBDIR cmake + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -Dprotobuf_BUILD_TESTS=OFF + -Dprotobuf_BUILD_EXAMPLES=OFF + -Dprotobuf_BUILD_PROTOC_BINARIES=ON + -Dprotobuf_MSVC_STATIC_RUNTIME=ON + -DBUILD_SHARED_LIBS=OFF + -Dprotobuf_BUILD_SHARED_LIBS=OFF + -DCMAKE_DEBUG_POSTFIX=_d + -Dprotobuf_DEBUG_POSTFIX=_d + -Dprotobuf_WITH_ZLIB=$,ON,OFF> + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + $<$: + "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" + > + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /$/${pbuf_lib_pre}protobuf$<$:_d>${ep_lib_suffix} + + COMMAND + ${CMAKE_COMMAND} -E copy + /$/protoc${CMAKE_EXECUTABLE_SUFFIX} + + > + TEST_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS + /${pbuf_lib_pre}protobuf${ep_lib_suffix} + /${pbuf_lib_pre}protobuf_d${ep_lib_suffix} + /protoc${CMAKE_EXECUTABLE_SUFFIX} + ) + ExternalProject_Get_Property (protobuf_src BINARY_DIR) + ExternalProject_Get_Property (protobuf_src SOURCE_DIR) + if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (protobuf_src) + endif () + + if (NOT TARGET protobuf::libprotobuf) + add_library (protobuf::libprotobuf STATIC IMPORTED GLOBAL) + endif () + file (MAKE_DIRECTORY ${SOURCE_DIR}/src) + set_target_properties (protobuf::libprotobuf PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + ${SOURCE_DIR}/src) + add_dependencies (protobuf::libprotobuf protobuf_src) + exclude_if_included (protobuf_src) + exclude_if_included (protobuf::libprotobuf) + + if (NOT TARGET protobuf::protoc) + add_executable (protobuf::protoc IMPORTED) + exclude_if_included (protobuf::protoc) + endif () + set_target_properties (protobuf::protoc PROPERTIES + IMPORTED_LOCATION "${BINARY_DIR}/protoc${CMAKE_EXECUTABLE_SUFFIX}") + add_dependencies (protobuf::protoc protobuf_src) +endif () + +file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen) +set (save_CBD ${CMAKE_CURRENT_BINARY_DIR}) +set (CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen) +protobuf_generate_cpp ( + PROTO_SRCS + PROTO_HDRS + src/ripple/proto/ripple.proto) +set (CMAKE_CURRENT_BINARY_DIR ${save_CBD}) + +add_library (pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS}) + +target_include_directories (pbufs PRIVATE src) +target_include_directories (pbufs + SYSTEM PUBLIC ${CMAKE_BINARY_DIR}/proto_gen) +target_link_libraries (pbufs protobuf::libprotobuf) +target_compile_options (pbufs + PUBLIC + $<$: + --system-header-prefix="google/protobuf" + -Wno-deprecated-dynamic-exception-spec + >) +add_library (Ripple::pbufs ALIAS pbufs) +target_link_libraries (ripple_libs INTERFACE Ripple::pbufs) +exclude_if_included (pbufs) diff --git a/Builds/CMake/deps/Rocksdb.cmake b/Builds/CMake/deps/Rocksdb.cmake new file mode 100644 index 0000000000..f65edebeb5 --- /dev/null +++ b/Builds/CMake/deps/Rocksdb.cmake @@ -0,0 +1,115 @@ +#[===================================================================[ + NIH dep: rocksdb +#]===================================================================] + +ExternalProject_Add (rocksdb + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/facebook/rocksdb.git + GIT_TAG v5.17.2 + PATCH_COMMAND + # only used by windows build + ${CMAKE_COMMAND} -E copy + ${CMAKE_SOURCE_DIR}/Builds/CMake/rocks_thirdparty.inc + /thirdparty.inc + COMMAND + # fixup their build version file to keep the values + # from changing always + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_SOURCE_DIR}/Builds/CMake/rocksdb_build_version.cc.in + /util/build_version.cc.in + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DWITH_JEMALLOC=$,ON,OFF> + -DWITH_SNAPPY=ON + -DWITH_LZ4=ON + -DWITH_ZLIB=OFF + -DUSE_RTTI=ON + -DWITH_ZSTD=OFF + -DWITH_GFLAGS=OFF + -DWITH_BZ2=OFF + -ULZ4_* + -DLZ4_INCLUDE_DIR=$,::> + -DLZ4_LIBRARIES=$,$,$> + -DLZ4_FOUND=ON + -USNAPPY_* + -DSNAPPY_INCLUDE_DIR=$,::> + -DSNAPPY_LIBRARIES=$,$,$> + -DSNAPPY_FOUND=ON + -DWITH_MD_LIBRARY=OFF + -DWITH_RUNTIME_DEBUG=$,ON,OFF> + -DFAIL_ON_WARNINGS=OFF + -DWITH_ASAN=OFF + -DWITH_TSAN=OFF + -DWITH_UBSAN=OFF + -DWITH_NUMA=OFF + -DWITH_TBB=OFF + -DWITH_WINDOWS_UTF8_FILENAMES=OFF + -DWITH_XPRESS=OFF + -DPORTABLE=ON + -DFORCE_SSE42=OFF + -DDISABLE_STALL_NOTIF=OFF + -DOPTDBG=ON + -DROCKSDB_LITE=OFF + -DWITH_FALLOCATE=ON + -DWITH_LIBRADOS=OFF + -DWITH_JNI=OFF + -DROCKSDB_INSTALL_ON_WINDOWS=OFF + -DWITH_TESTS=OFF + -DWITH_TOOLS=OFF + $<$: + "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -MP /DNDEBUG" + > + $<$>: + "-DCMAKE_CXX_FLAGS=-DNDEBUG" + > + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /$/${ep_lib_prefix}rocksdb$<$:_d>${ep_lib_suffix} + + > + LIST_SEPARATOR :: + TEST_COMMAND "" + INSTALL_COMMAND "" + DEPENDS snappy lz4 + BUILD_BYPRODUCTS + /${ep_lib_prefix}rocksdb${ep_lib_suffix} + /${ep_lib_prefix}rocksdb_d${ep_lib_suffix} +) +ExternalProject_Get_Property (rocksdb BINARY_DIR) +ExternalProject_Get_Property (rocksdb SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (rocksdb) +endif () +add_library (rocksdb_lib STATIC IMPORTED GLOBAL) +file (MAKE_DIRECTORY ${SOURCE_DIR}/include) +set_target_properties (rocksdb_lib PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/${ep_lib_prefix}rocksdb_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/${ep_lib_prefix}rocksdb${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + ${SOURCE_DIR}/include + INTERFACE_COMPILE_DEFINITIONS + RIPPLE_ROCKSDB_AVAILABLE=1) +add_dependencies (rocksdb_lib rocksdb) +target_link_libraries (rocksdb_lib INTERFACE snappy_lib lz4_lib) +if (MSVC) + target_link_libraries (rocksdb_lib INTERFACE rpcrt4) +endif () +target_link_libraries (ripple_libs INTERFACE rocksdb_lib) +exclude_if_included (rocksdb) +exclude_if_included (rocksdb_lib) diff --git a/Builds/CMake/deps/Secp256k1.cmake b/Builds/CMake/deps/Secp256k1.cmake new file mode 100644 index 0000000000..8f61b30446 --- /dev/null +++ b/Builds/CMake/deps/Secp256k1.cmake @@ -0,0 +1,35 @@ +#[===================================================================[ + NIH dep: secp256k1 +#]===================================================================] + +add_library (secp256k1 STATIC + src/secp256k1/src/secp256k1.c) +target_compile_definitions (secp256k1 + PRIVATE + USE_NUM_NONE + USE_FIELD_10X26 + USE_FIELD_INV_BUILTIN + USE_SCALAR_8X32 + USE_SCALAR_INV_BUILTIN) +target_include_directories (secp256k1 + PUBLIC + $ + $ + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/secp256k1) +target_compile_options (secp256k1 + PRIVATE + $<$:-wd4319> + $<$>: + -Wno-deprecated-declarations + -Wno-unused-function + > + $<$:-Wno-nonnull-compare>) +add_library (NIH::secp256k1 ALIAS secp256k1) +target_link_libraries (ripple_libs INTERFACE NIH::secp256k1) +#[===========================[ + headers installation +#]===========================] +install ( + FILES + src/secp256k1/include/secp256k1.h + DESTINATION include/secp256k1/include) diff --git a/Builds/CMake/deps/Snappy.cmake b/Builds/CMake/deps/Snappy.cmake new file mode 100644 index 0000000000..73eeed27cf --- /dev/null +++ b/Builds/CMake/deps/Snappy.cmake @@ -0,0 +1,59 @@ +#[===================================================================[ + NIH dep: snappy +#]===================================================================] + +ExternalProject_Add (snappy + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/google/snappy.git + GIT_TAG 1.1.7 + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DSNAPPY_BUILD_TESTS=OFF + $<$: + "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" + "-DCMAKE_CXX_FLAGS_DEBUG=-MTd" + "-DCMAKE_CXX_FLAGS_RELEASE=-MT" + > + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /$/${ep_lib_prefix}snappy$<$:_d>${ep_lib_suffix} + + > + TEST_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS + /${ep_lib_prefix}snappy${ep_lib_suffix} + /${ep_lib_prefix}snappy_d${ep_lib_suffix} +) +ExternalProject_Get_Property (snappy BINARY_DIR) +ExternalProject_Get_Property (snappy SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (snappy) +endif () +add_library (snappy_lib STATIC IMPORTED GLOBAL) +file (MAKE_DIRECTORY ${SOURCE_DIR}/snappy) +set_target_properties (snappy_lib PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/${ep_lib_prefix}snappy_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/${ep_lib_prefix}snappy${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + "${SOURCE_DIR};${BINARY_DIR}") +add_dependencies (snappy_lib snappy) +target_link_libraries (ripple_libs INTERFACE snappy_lib) +exclude_if_included (snappy) +exclude_if_included (snappy_lib) diff --git a/Builds/CMake/deps/Soci.cmake b/Builds/CMake/deps/Soci.cmake new file mode 100644 index 0000000000..8eaac17e46 --- /dev/null +++ b/Builds/CMake/deps/Soci.cmake @@ -0,0 +1,121 @@ +#[===================================================================[ + NIH dep: soci +#]===================================================================] + +set (soci_lib_pre ${ep_lib_prefix}) +set (soci_lib_post "") +if (WIN32) + # for some reason soci on windows still prepends lib (non-standard) + set (soci_lib_pre lib) + # this version in the name might change if/when we change versions of soci + set (soci_lib_post "_4_0") +endif () +get_target_property (_boost_incs Boost::date_time INTERFACE_INCLUDE_DIRECTORIES) +ExternalProject_Add (soci + PREFIX ${nih_cache_path} + GIT_REPOSITORY https://github.com/SOCI/soci.git + GIT_TAG 04e1870294918d20761736743bb6136314c42dd5 + # We had an issue with soci integer range checking for boost::optional + # and needed to remove the exception that SOCI throws in this case. + # This is *probably* a bug in SOCI, but has never been investigated more + # nor reported to the maintainers. + # This cmake script comments out the lines in question. + # This patch process is likely fragile and should be reviewed carefully + # whenever we update the GIT_TAG above. + PATCH_COMMAND + ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/Builds/CMake/soci_patch.cmake + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/sqlite3 + -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake + -DCMAKE_INCLUDE_PATH=$,::> + -DCMAKE_LIBRARY_PATH=${sqlite_BINARY_DIR} + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + -DSOCI_CXX_C11=ON + -DSOCI_STATIC=ON + -DSOCI_LIBDIR=lib + -DSOCI_SHARED=OFF + -DSOCI_TESTS=OFF + # hack to workaround the fact that soci doesn't currently use + # boost imported targets in its cmake. If they switch to + # proper imported targets, this next line can be removed + # (as well as the get_property above that sets _boost_incs) + -DBoost_INCLUDE_DIRS=$ + -DBOOST_ROOT=${BOOST_ROOT} + -DWITH_BOOST=ON + -DSOCI_DB2=OFF + -DSOCI_FIREBIRD=OFF + -DSOCI_MYSQL=OFF + -DSOCI_ODBC=OFF + -DSOCI_ORACLE=OFF + -DSOCI_POSTGRESQL=OFF + -DSOCI_SQLITE3=ON + -DSQLITE3_INCLUDE_DIR=$,::> + -DSQLITE3_LIBRARY=$,$,$> + $<$:-DCMAKE_FIND_FRAMEWORK=LAST> + $<$: + "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" + "-DCMAKE_CXX_FLAGS_DEBUG=-MTd" + "-DCMAKE_CXX_FLAGS_RELEASE=-MT" + > + $<$>: + "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations" + > + # SEE: https://github.com/SOCI/soci/issues/640 + $<$,$>: + "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations -Wno-error=format-overflow -Wno-format-overflow -Wno-error=format-truncation" + > + LIST_SEPARATOR :: + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /lib/$/${soci_lib_pre}soci_core${soci_lib_post}$<$:_d>${ep_lib_suffix} + /lib/$/${soci_lib_pre}soci_empty${soci_lib_post}$<$:_d>${ep_lib_suffix} + /lib/$/${soci_lib_pre}soci_sqlite3${soci_lib_post}$<$:_d>${ep_lib_suffix} + /lib + > + TEST_COMMAND "" + INSTALL_COMMAND "" + DEPENDS sqlite3 + BUILD_BYPRODUCTS + /lib/${soci_lib_pre}soci_core${soci_lib_post}${ep_lib_suffix} + /lib/${soci_lib_pre}soci_core${soci_lib_post}_d${ep_lib_suffix} + /lib/${soci_lib_pre}soci_empty${soci_lib_post}${ep_lib_suffix} + /lib/${soci_lib_pre}soci_empty${soci_lib_post}_d${ep_lib_suffix} + /lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}${ep_lib_suffix} + /lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}_d${ep_lib_suffix} +) +ExternalProject_Get_Property (soci BINARY_DIR) +ExternalProject_Get_Property (soci SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (soci) +endif () +file (MAKE_DIRECTORY ${SOURCE_DIR}/include) +file (MAKE_DIRECTORY ${BINARY_DIR}/include) +foreach (_comp core empty sqlite3) + add_library ("soci_${_comp}" STATIC IMPORTED GLOBAL) + set_target_properties ("soci_${_comp}" PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + "${SOURCE_DIR}/include;${BINARY_DIR}/include") + add_dependencies ("soci_${_comp}" soci) # something has to depend on the ExternalProject to trigger it + target_link_libraries (ripple_libs INTERFACE "soci_${_comp}") + if (NOT _comp STREQUAL "core") + target_link_libraries ("soci_${_comp}" INTERFACE soci_core) + endif () + exclude_if_included ("soci_${_comp}") +endforeach () +exclude_if_included (soci) diff --git a/Builds/CMake/deps/Sqlite.cmake b/Builds/CMake/deps/Sqlite.cmake new file mode 100644 index 0000000000..ef8c8825a5 --- /dev/null +++ b/Builds/CMake/deps/Sqlite.cmake @@ -0,0 +1,67 @@ +#[===================================================================[ + NIH dep: sqlite +#]===================================================================] + +ExternalProject_Add (sqlite3 + PREFIX ${nih_cache_path} + # sqlite doesn't use git, but it provides versioned tarballs + URL https://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip + # ^^^ version is apparent in the URL: 3260000 => 3.26.0 + URL_HASH SHA256=de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e + # we wrote a very simple CMake file to build sqlite + # so that's what we copy here so that we can build with + # CMake. sqlite doesn't generally provided a build system + # for the single amalgamation source file. + PATCH_COMMAND + ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_SOURCE_DIR}/Builds/CMake/CMake_sqlite3.txt + /CMakeLists.txt + CMAKE_ARGS + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> + -DCMAKE_DEBUG_POSTFIX=_d + $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> + $<$: + "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" + "-DCMAKE_C_FLAGS_DEBUG=-MTd" + "-DCMAKE_C_FLAGS_RELEASE=-MT" + > + LOG_BUILD ON + LOG_CONFIGURE ON + BUILD_COMMAND + ${CMAKE_COMMAND} + --build . + --config $ + $<$:--parallel ${ep_procs}> + $<$: + COMMAND + ${CMAKE_COMMAND} -E copy + /$/${ep_lib_prefix}sqlite3$<$:_d>${ep_lib_suffix} + + > + TEST_COMMAND "" + INSTALL_COMMAND "" + BUILD_BYPRODUCTS + /${ep_lib_prefix}sqlite3${ep_lib_suffix} + /${ep_lib_prefix}sqlite3_d${ep_lib_suffix} +) +ExternalProject_Get_Property (sqlite3 BINARY_DIR) +ExternalProject_Get_Property (sqlite3 SOURCE_DIR) +if (CMAKE_VERBOSE_MAKEFILE) + print_ep_logs (sqlite3) +endif () +add_library (sqlite STATIC IMPORTED GLOBAL) +set_target_properties (sqlite PROPERTIES + IMPORTED_LOCATION_DEBUG + ${BINARY_DIR}/${ep_lib_prefix}sqlite3_d${ep_lib_suffix} + IMPORTED_LOCATION_RELEASE + ${BINARY_DIR}/${ep_lib_prefix}sqlite3${ep_lib_suffix} + INTERFACE_INCLUDE_DIRECTORIES + ${SOURCE_DIR}) +add_dependencies (sqlite sqlite3) +target_link_libraries (sqlite INTERFACE $<$>:dl>) +target_link_libraries (ripple_libs INTERFACE sqlite) +exclude_if_included (sqlite3) +exclude_if_included (sqlite) +set(sqlite_BINARY_DIR ${BINARY_DIR}) diff --git a/Builds/containers/packaging/dpkg/debian/rules b/Builds/containers/packaging/dpkg/debian/rules index af1afe435b..1eccd9a44b 100755 --- a/Builds/containers/packaging/dpkg/debian/rules +++ b/Builds/containers/packaging/dpkg/debian/rules @@ -21,6 +21,7 @@ override_dh_auto_configure: -DCMAKE_BUILD_TYPE=Release \ -Dstatic=true \ -Dlocal_protobuf=ON \ + -Dvalidator_keys=ON \ -DCMAKE_VERBOSE_MAKEFILE=ON override_dh_auto_build: diff --git a/Builds/containers/packaging/rpm/rippled.spec b/Builds/containers/packaging/rpm/rippled.spec index e7cd4a471f..fd9c04515a 100644 --- a/Builds/containers/packaging/rpm/rippled.spec +++ b/Builds/containers/packaging/rpm/rippled.spec @@ -32,7 +32,7 @@ core library for development of standalone applications that sign transactions. cd rippled mkdir -p bld.release cd bld.release -cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_BUILD_TYPE=Release -Dstatic=true -DCMAKE_VERBOSE_MAKEFILE=ON -Dlocal_protobuf=ON +cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=%{_prefix} -DCMAKE_BUILD_TYPE=Release -Dstatic=true -DCMAKE_VERBOSE_MAKEFILE=ON -Dlocal_protobuf=ON -Dvalidator_keys=ON cmake --build . --parallel --target rippled --target validator-keys -- -v %pre diff --git a/CMakeLists.txt b/CMakeLists.txt index 531b5951c4..723d049e78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ - cmake_minimum_required (VERSION 3.9.0) +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/Builds/CMake) + set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake ${CMAKE_MODULE_PATH}) include (CheckCXXCompilerFlag) if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.11) @@ -21,2896 +22,43 @@ project (rippled) if (POLICY CMP0074) cmake_policy(SET CMP0074 NEW) endif () -#[===================================================================[ - convenience variables and sanity checks -#]===================================================================] - -if (NOT ep_procs) - ProcessorCount(ep_procs) - if (ep_procs GREATER 1) - # never use more than half of cores for EP builds - math (EXPR ep_procs "${ep_procs} / 2") - message (STATUS "Using ${ep_procs} cores for ExternalProject builds.") - endif () -endif () -get_property (is_multiconfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if (is_multiconfig STREQUAL "NOTFOUND") - if (${CMAKE_GENERATOR} STREQUAL "Xcode" OR ${CMAKE_GENERATOR} MATCHES "^Visual Studio") - set (is_multiconfig TRUE) - endif () -endif () - -set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) -if (NOT is_multiconfig) - if (NOT CMAKE_BUILD_TYPE) - message (STATUS "Build type not specified - defaulting to Release") - set (CMAKE_BUILD_TYPE Release CACHE STRING "build type" FORCE) - elseif (NOT (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL Release)) - # for simplicity, these are the only two config types we care about. Limiting - # the build types simplifies dealing with external project builds especially - message (FATAL_ERROR " *** Only Debug or Release build types are currently supported ***") - endif () -endif () - -get_directory_property(has_parent PARENT_DIRECTORY) -if (has_parent) - set (is_root_project OFF) -else () - set (is_root_project ON) -endif () - -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES ".*Clang") # both Clang and AppleClang - set (is_clang TRUE) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND - CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - message (FATAL_ERROR "This project requires clang 5 or later") - endif () - # TODO min AppleClang version check ? -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set (is_gcc TRUE) - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) - message (FATAL_ERROR "This project requires GCC 7 or later") - endif () -endif () -if (CMAKE_GENERATOR STREQUAL "Xcode") - set (is_xcode TRUE) -endif () - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set (is_linux TRUE) -else () - set (is_linux FALSE) -endif () - -if ("$ENV{CI}" STREQUAL "true" OR "$ENV{CONTINUOUS_INTEGRATION}" STREQUAL "true") - set (is_ci TRUE) -else () - set (is_ci FALSE) -endif () - -# check for in-source build and fail -if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") - message (FATAL_ERROR "Builds (in-source) are not allowed in " - "${CMAKE_CURRENT_SOURCE_DIR}. Please remove CMakeCache.txt and the CMakeFiles " - "directory from ${CMAKE_CURRENT_SOURCE_DIR} and try building in a separate directory.") -endif () - -if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio" AND - NOT ("${CMAKE_GENERATOR}" MATCHES .*Win64.*)) - message (FATAL_ERROR - "Visual Studio 32-bit build is not supported. Use -G\"${CMAKE_GENERATOR} Win64\"") -endif () - -if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8) - message (FATAL_ERROR "Rippled requires a 64 bit target architecture.\n" - "The most likely cause of this warning is trying to build rippled with a 32-bit OS.") -endif () - -if (APPLE AND NOT HOMEBREW) - find_program (HOMEBREW brew) -endif () - -#[===================================================================[ - read version from source -#]===================================================================] - -file (STRINGS src/ripple/protocol/impl/BuildInfo.cpp BUILD_INFO) -foreach (line_ ${BUILD_INFO}) - if (line_ MATCHES "versionString[ ]*=[ ]*\"(.+)\"") - set (rippled_version ${CMAKE_MATCH_1}) - endif () -endforeach () -if (rippled_version) - message (STATUS "rippled version: ${rippled_version}") -else () - message (FATAL_ERROR "unable to determine rippled version") -endif () - -#[===================================================================[ - declare user options/settings -#]===================================================================] - -option (assert "Enables asserts, even in release builds" OFF) -option (unity "Creates a build based on unity sources. This is the default" ON) -if (is_gcc OR is_clang) - option (coverage "Generates coverage info." OFF) - option (profile "Add profiling flags" OFF) - 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 (coverage_core_only - "Include only src/ripple files when generating coverage report. \ - Set to OFF to include all sources in coverage report." - ON) -else () - set (profile OFF CACHE BOOL "gcc/clang only" FORCE) - set (coverage 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) -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) -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 use of a local build of protobuf instead of system 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) -# NOTE - THIS OPTION CURRENTLY DOES NOT COMPILE : -# TODO: fix or remove -option (verify_nodeobject_keys - "This verifies that the hash of node objects matches the payload. \ - This check is expensive - use with caution." - 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 () - -#[===================================================================[ - NIH prefix path..this is where we will download - and build any ExternalProjects, and they will hopefully - survive across build directory deletion (manual cleans) -#]===================================================================] - -string (REGEX REPLACE "[ \\/%]+" "_" gen_for_path ${CMAKE_GENERATOR}) -string (TOLOWER ${gen_for_path} gen_for_path) -# HACK: trying to shorten paths for windows CI (which hits 260 MAXPATH easily) -# @see: https://issues.jenkins-ci.org/browse/JENKINS-38706?focusedCommentId=339847 -string (REPLACE "visual_studio" "vs" gen_for_path ${gen_for_path}) -if (NOT DEFINED NIH_CACHE_ROOT) - if (DEFINED ENV{NIH_CACHE_ROOT}) - set (NIH_CACHE_ROOT $ENV{NIH_CACHE_ROOT}) - else () - set (NIH_CACHE_ROOT "${CMAKE_SOURCE_DIR}/.nih_c") - endif () -endif () -set (nih_cache_path - "${NIH_CACHE_ROOT}/${gen_for_path}/${CMAKE_CXX_COMPILER_ID}_${CMAKE_CXX_COMPILER_VERSION}") -if (NOT is_multiconfig) - set (nih_cache_path "${nih_cache_path}/${CMAKE_BUILD_TYPE}") -endif () -file(TO_CMAKE_PATH "${nih_cache_path}" nih_cache_path) -message (STATUS "NIH-EP cache path: ${nih_cache_path}") -## two convenience variables: -set (ep_lib_prefix ${CMAKE_STATIC_LIBRARY_PREFIX}) -set (ep_lib_suffix ${CMAKE_STATIC_LIBRARY_SUFFIX}) - -# this is a setting for FetchContent and needs to be -# a cache variable -# https://cmake.org/cmake/help/latest/module/FetchContent.html#populating-the-content -set (FETCHCONTENT_BASE_DIR ${nih_cache_path} CACHE STRING "" FORCE) - -#[===================================================================[ - package/container targets - (optional) -#]===================================================================] - -if (is_root_project) - if (NOT DOCKER) - find_program (DOCKER docker) - endif () - - if (DOCKER) - # if no container label is provided, use current git hash - git_hash (commit_hash) - if (NOT container_label) - set (container_label ${commit_hash}) - endif () - message (STATUS "using [${container_label}] as build container tag...") - - file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages) - file (MAKE_DIRECTORY ${NIH_CACHE_ROOT}/pkgbuild) - if (is_linux) - execute_process (COMMAND id -u - OUTPUT_VARIABLE DOCKER_USER_ID - OUTPUT_STRIP_TRAILING_WHITESPACE) - message (STATUS "docker local user id: ${DOCKER_USER_ID}") - execute_process (COMMAND id -g - OUTPUT_VARIABLE DOCKER_GROUP_ID - OUTPUT_STRIP_TRAILING_WHITESPACE) - message (STATUS "docker local group id: ${DOCKER_GROUP_ID}") - endif () - if (DOCKER_USER_ID AND DOCKER_GROUP_ID) - set(map_user TRUE) - endif () - #[===================================================================[ - rpm - #]===================================================================] - add_custom_target (rpm_container - docker build - --pull - --build-arg GIT_COMMIT=${commit_hash} - -t rippled-rpm-builder:${container_label} - $<$:--cache-from=${rpm_cache_from}> - -f centos-builder/Dockerfile . - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers - VERBATIM - USES_TERMINAL - COMMAND_EXPAND_LISTS - SOURCES - Builds/containers/centos-builder/Dockerfile - Builds/containers/centos-builder/centos_setup.sh - Builds/containers/centos-builder/extras.sh - Builds/containers/shared/build_deps.sh - Builds/containers/shared/rippled.service - Builds/containers/shared/update_sources.sh - Builds/containers/shared/update-rippled.sh - Builds/containers/packaging/rpm/rippled.spec - Builds/containers/packaging/rpm/build_rpm.sh - ) - exclude_from_default (rpm_container) - add_custom_target (rpm - docker run - -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c - -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c - -v ${CMAKE_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled - -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out - "$<$:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>" - -t rippled-rpm-builder:${container_label} - VERBATIM - USES_TERMINAL - COMMAND_EXPAND_LISTS - SOURCES - Builds/containers/packaging/rpm/rippled.spec - ) - exclude_from_default (rpm) - if (NOT have_package_container) - add_dependencies(rpm rpm_container) - endif () - #[===================================================================[ - dpkg - #]===================================================================] - # currently use ubuntu 16.04 as a base b/c it has one of - # the lower versions of libc among ubuntu and debian releases. - # we could change this in the future and build with some other deb - # based system. - add_custom_target (dpkg_container - docker build - --pull - --build-arg DIST_TAG=16.04 - --build-arg GIT_COMMIT=${commit_hash} - -t rippled-dpkg-builder:${container_label} - $<$:--cache-from=${dpkg_cache_from}> - -f ubuntu-builder/Dockerfile . - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers - VERBATIM - USES_TERMINAL - COMMAND_EXPAND_LISTS - SOURCES - Builds/containers/ubuntu-builder/Dockerfile - Builds/containers/ubuntu-builder/ubuntu_setup.sh - Builds/containers/shared/build_deps.sh - Builds/containers/shared/rippled.service - Builds/containers/shared/update_sources.sh - Builds/containers/shared/update-rippled.sh - Builds/containers/packaging/dpkg/build_dpkg.sh - Builds/containers/packaging/dpkg/debian/README.Debian - Builds/containers/packaging/dpkg/debian/conffiles - Builds/containers/packaging/dpkg/debian/control - Builds/containers/packaging/dpkg/debian/copyright - Builds/containers/packaging/dpkg/debian/dirs - Builds/containers/packaging/dpkg/debian/docs - Builds/containers/packaging/dpkg/debian/rippled-dev.install - Builds/containers/packaging/dpkg/debian/rippled.install - Builds/containers/packaging/dpkg/debian/rippled.links - Builds/containers/packaging/dpkg/debian/rippled.postinst - Builds/containers/packaging/dpkg/debian/rippled.postrm - Builds/containers/packaging/dpkg/debian/rippled.preinst - Builds/containers/packaging/dpkg/debian/rippled.prerm - Builds/containers/packaging/dpkg/debian/rules - ) - exclude_from_default (dpkg_container) - add_custom_target (dpkg - docker run - -e NIH_CACHE_ROOT=/opt/rippled_bld/pkg/.nih_c - -v ${NIH_CACHE_ROOT}/pkgbuild:/opt/rippled_bld/pkg/.nih_c - -v ${CMAKE_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled - -v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out - "$<$:--volume=/etc/passwd:/etc/passwd;--volume=/etc/group:/etc/group;--user=${DOCKER_USER_ID}:${DOCKER_GROUP_ID}>" - -t rippled-dpkg-builder:${container_label} - VERBATIM - USES_TERMINAL - COMMAND_EXPAND_LISTS - SOURCES - Builds/containers/packaging/dpkg/debian/control - ) - exclude_from_default (dpkg) - if (NOT have_package_container) - add_dependencies(dpkg dpkg_container) - endif () - #[===================================================================[ - ci container - #]===================================================================] - # now use the same ubuntu image for our travis-ci docker images, - # but we use a newer distro (18.04 vs 16.04). - # - # steps for publishing a new CI image when you make changes: - # - # mkdir bld.ci && cd bld.ci && cmake -Dpackages_only=ON -Dcontainer_label=CI_LATEST - # cmake --build . --target ci_container --verbose - # docker tag rippled-ci-builder:CI_LATEST /rippled-ci-builder:YYYY-MM-DD - # (change YYYY-MM-DD to match current date..or use a different - # tag/label scheme if you prefer) - # docker push /rippled-ci-builder:YYYY-MM-DD - # - # ...then change the DOCKER_IMAGE line in .travis.yml : - # - DOCKER_IMAGE="/rippled-ci-builder:YYYY-MM-DD" - add_custom_target (ci_container - docker build - --pull - --build-arg DIST_TAG=18.04 - --build-arg GIT_COMMIT=${commit_hash} - --build-arg CI_USE=true - -t rippled-ci-builder:${container_label} - $<$:--cache-from=${ci_cache_from}> - -f ubuntu-builder/Dockerfile . - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers - VERBATIM - USES_TERMINAL - COMMAND_EXPAND_LISTS - SOURCES - Builds/containers/ubuntu-builder/Dockerfile - Builds/containers/ubuntu-builder/ubuntu_setup.sh - Builds/containers/shared/build_deps.sh - Builds/containers/shared/rippled.service - Builds/containers/shared/update_sources.sh - Builds/containers/shared/update-rippled.sh - ) - exclude_from_default (ci_container) - else () - message (STATUS "docker NOT found -- won't be able to build containers for packaging") - endif () -endif () +include(RippledSanity) +include(RippledVersion) +include(RippledSettings) +include(RippledNIH) +include(RippledRelease) +# 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 () - -#[===================================================================[ - setup project-wide compiler settings -#]===================================================================] - -#[=========================================================[ - TODO some/most of these common settings belong in a - toolchain file, especially the ABI-impacting ones -#]=========================================================] -add_library (common INTERFACE) -add_library (Ripple::common ALIAS common) -# add a single global dependency on this interface lib -link_libraries (Ripple::common) -set_target_properties (common - PROPERTIES INTERFACE_POSITION_INDEPENDENT_CODE ON) -set(CMAKE_CXX_EXTENSIONS OFF) -target_compile_features (common INTERFACE cxx_std_17) -target_compile_definitions (common - INTERFACE - $<$:DEBUG _DEBUG> - $<$,$>>:NDEBUG>) - # ^^^^ NOTE: CMAKE release builds already have NDEBUG - # defined, so no need to add it explicitly except for - # this special case of (profile ON) and (assert OFF) - # -- presumably this is because we don't want profile - # builds asserting unless asserts were specifically - # requested - -if (MSVC) - # remove existing exception flag since we set it to -EHa - string (REGEX REPLACE "[-/]EH[a-z]+" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - # also remove dynamic runtime - foreach (var_ - CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE) - string (REGEX REPLACE "[-/]MD[d]*" " " ${var_} "${${var_}}") - endforeach () - - target_compile_options (common - INTERFACE - -bigobj # Increase object file max size - -fp:precise # Floating point behavior - -Gd # __cdecl calling convention - -Gm- # Minimal rebuild: disabled - -Gy- # Function level linking: disabled - -MP # Multiprocessor compilation - -openmp- # pragma omp: disabled - -errorReport:none # No error reporting to Internet - -nologo # Suppress login banner - -wd4018 # Disable signed/unsigned comparison warnings - -wd4244 # Disable float to int possible loss of data warnings - -wd4267 # Disable size_t to T possible loss of data warnings - -wd4800 # Disable C4800(int to bool performance) - -wd4503 # Decorated name length exceeded, name was truncated - $<$: - -EHa - -GR - > - $<$:-Ox> - $<$,$>: - -GS - -Zc:forScope - > - # static runtime - $<$:-MTd> - $<$>:-MT> - $<$:-WX> - ) - target_compile_definitions (common - INTERFACE - _WIN32_WINNT=0x6000 - _SCL_SECURE_NO_WARNINGS - _CRT_SECURE_NO_WARNINGS - WIN32_CONSOLE - NOMINMAX - # TODO: Resolve these warnings, don't just silence them - _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS - $<$,$>:_CRTDBG_MAP_ALLOC>) - target_link_libraries (common - INTERFACE - -errorreport:none - -machine:X64) -else () - # HACK : because these need to come first, before any warning demotion - string (APPEND CMAKE_CXX_FLAGS " -Wall -Wdeprecated") - # not MSVC - target_compile_options (common - INTERFACE - $<$:-Werror> - $<$: - -frtti - -Wnon-virtual-dtor - > - -Wno-sign-compare - -Wno-char-subscripts - -Wno-format - -Wno-unused-local-typedefs - $<$: - -Wno-unused-but-set-variable - -Wno-deprecated - > - $<$>:-fno-strict-aliasing> - # tweak gcc optimization for debug - $<$,$>:-O0> - # Add debug symbols to release config - $<$:-g>) - target_link_libraries (common - INTERFACE - -rdynamic - # link to static libc/c++ iff: - # * static option set and - # * NOT APPLE (AppleClang does not support static libc/c++) and - # * NOT san (sanitizers typically don't work with static libc/c++) - $<$,$>,$>>:-static-libstdc++>) -endif () - -if (use_gold AND is_gcc) - # use gold linker if available - execute_process ( - COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=gold -Wl,--version - ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) - #[=========================================================[ - NOTE: THE gold linker inserts -rpath as DT_RUNPATH by - default intead of DT_RPATH, so you might have slightly - unexpected runtime ld behavior if you were expecting - DT_RPATH. Specify --disable-new-dtags to gold if you do - not want the default DT_RUNPATH behavior. This rpath - treatment as well as static/dynamic selection means that - gold does not currently have ideal default behavior when - we are using jemalloc. Thus for simplicity we don't use - it when jemalloc is requested. An alternative to - disabling would be to figure out all the settings - required to make gold play nicely with jemalloc. - #]=========================================================] - if (("${LD_VERSION}" MATCHES "GNU gold") AND (NOT jemalloc)) - target_link_libraries (common - INTERFACE - -fuse-ld=gold - -Wl,--no-as-needed - #[=========================================================[ - see https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1253638/comments/5 - DT_RUNPATH does not work great for transitive - dependencies (of which boost has a few) - so just - switch to DT_RPATH if doing dynamic linking with gold - #]=========================================================] - $<$>:-Wl,--disable-new-dtags>) - endif () - unset (LD_VERSION) -endif () - -if (use_lld) - # use lld linker if available - execute_process ( - COMMAND ${CMAKE_CXX_COMPILER} -fuse-ld=lld -Wl,--version - ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) - if ("${LD_VERSION}" MATCHES "LLD") - target_link_libraries (common INTERFACE -fuse-ld=lld) - endif () - unset (LD_VERSION) -endif() - -if (assert) - foreach (var_ CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE) - STRING (REGEX REPLACE "[-/]DNDEBUG" "" ${var_} "${${var_}}") - endforeach () -endif () - -#[===================================================================[ - rippled compile options/settings via an interface library -#]===================================================================] - -add_library (opts INTERFACE) -add_library (Ripple::opts ALIAS opts) -target_compile_definitions (opts - INTERFACE - BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS - $<$: - BOOST_ASIO_NO_DEPRECATED - BOOST_FILESYSTEM_NO_DEPRECATED - > - $<$>: - BOOST_COROUTINES_NO_DEPRECATION_WARNING - BOOST_BEAST_ALLOW_DEPRECATED - BOOST_FILESYSTEM_DEPRECATED - > - $<$: - USE_BEAST_HASHER - > - $<$:BEAST_NO_UNIT_TEST_INLINE=1> - $<$:BEAST_DONT_AUTOLINK_TO_WIN32_LIBRARIES=1> - $<$:RIPPLE_SINGLE_IO_SERVICE_THREAD=1> - # doesn't currently compile ? : - $<$:RIPPLE_VERIFY_NODEOBJECT_KEYS=1>) -target_compile_options (opts - INTERFACE - $<$,$>:-Wsuggest-override> - $<$:-fno-omit-frame-pointer> - $<$,$>:-fprofile-arcs -ftest-coverage> - $<$,$>:-fprofile-instr-generate -fcoverage-mapping> - $<$:-pg> - $<$,$>:-p>) - -target_link_libraries (opts - INTERFACE - $<$,$>:-fprofile-arcs -ftest-coverage> - $<$,$>:-fprofile-instr-generate -fcoverage-mapping> - $<$:-pg> - $<$,$>:-p>) - -if (jemalloc) - if (static) - set(JEMALLOC_USE_STATIC ON CACHE BOOL "" FORCE) - endif () - find_package (jemalloc REQUIRED) - target_compile_definitions (opts INTERFACE PROFILE_JEMALLOC) - target_include_directories (opts SYSTEM INTERFACE ${JEMALLOC_INCLUDE_DIRS}) - target_link_libraries (opts INTERFACE ${JEMALLOC_LIBRARIES}) - get_filename_component (JEMALLOC_LIB_PATH ${JEMALLOC_LIBRARIES} DIRECTORY) - ## TODO see if we can use the BUILD_RPATH target property (is it transitive?) - set (CMAKE_BUILD_RPATH ${CMAKE_BUILD_RPATH} ${JEMALLOC_LIB_PATH}) -endif () - -if (san) - target_compile_options (opts - INTERFACE - # sanitizers recommend minimum of -O1 for reasonable performance - $<$:-O1> - ${SAN_FLAG} - -fno-omit-frame-pointer) - target_compile_definitions (opts - INTERFACE - $<$:SANITIZER=ASAN> - $<$:SANITIZER=TSAN> - $<$:SANITIZER=MSAN> - $<$:SANITIZER=UBSAN>) - target_link_libraries (opts INTERFACE ${SAN_FLAG} ${SAN_LIB}) -endif () - -#[===================================================================[ - rippled transitive library deps via an interface library -#]===================================================================] - -add_library (ripple_syslibs INTERFACE) -add_library (Ripple::syslibs ALIAS ripple_syslibs) -target_link_libraries (ripple_syslibs - INTERFACE - $<$: - legacy_stdio_definitions.lib - Shlwapi - kernel32 - user32 - gdi32 - winspool - comdlg32 - advapi32 - shell32 - ole32 - oleaut32 - uuid - odbc32 - odbccp32 - crypt32 - > - $<$>:dl> - $<$,$>>:rt>) - -if (NOT MSVC) - set (THREADS_PREFER_PTHREAD_FLAG ON) - find_package (Threads) - target_link_libraries (ripple_syslibs INTERFACE Threads::Threads) -endif () - -add_library (ripple_libs INTERFACE) -add_library (Ripple::libs ALIAS ripple_libs) -target_link_libraries (ripple_libs INTERFACE Ripple::syslibs) - -#[===================================================================[ - NIH dep: boost -#]===================================================================] - -if ((NOT DEFINED BOOST_ROOT) AND (DEFINED ENV{BOOST_ROOT})) - set (BOOST_ROOT $ENV{BOOST_ROOT}) -endif () -file (TO_CMAKE_PATH "${BOOST_ROOT}" BOOST_ROOT) -if (WIN32 OR CYGWIN) - # Workaround for MSVC having two boost versions - x86 and x64 on same PC in stage folders - if (DEFINED BOOST_ROOT) - if (IS_DIRECTORY ${BOOST_ROOT}/stage64/lib) - set (BOOST_LIBRARYDIR ${BOOST_ROOT}/stage64/lib) - else () - set (BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib) - endif () - endif () -endif () -message (STATUS "BOOST_ROOT: ${BOOST_ROOT}") -message (STATUS "BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}") - -# uncomment the following as needed to debug FindBoost issues: -#set (Boost_DEBUG ON) - -#[=========================================================[ - boost dynamic libraries don't trivially support @rpath - linking right now (cmake's default), so just force - static linking for macos, or if requested on linux by flag -#]=========================================================] -if (static) - set (Boost_USE_STATIC_LIBS ON) -endif () -set (Boost_USE_MULTITHREADED ON) -if (static AND NOT APPLE) - set (Boost_USE_STATIC_RUNTIME ON) -else () - set (Boost_USE_STATIC_RUNTIME OFF) -endif () -find_package (Boost 1.70 REQUIRED - COMPONENTS - chrono - context - coroutine - date_time - filesystem - program_options - regex - serialization - system - thread) - -add_library (ripple_boost INTERFACE) -add_library (Ripple::boost ALIAS ripple_boost) -if (is_xcode) - target_include_directories (ripple_boost BEFORE INTERFACE ${Boost_INCLUDE_DIRS}) - target_compile_options (ripple_boost INTERFACE --system-header-prefix="boost/") -else () - target_include_directories (ripple_boost SYSTEM BEFORE INTERFACE ${Boost_INCLUDE_DIRS}) -endif() - -target_link_libraries (ripple_boost - INTERFACE - Boost::boost - Boost::chrono - Boost::coroutine - Boost::date_time - Boost::filesystem - Boost::program_options - Boost::regex - Boost::serialization - Boost::system - Boost::thread) -if (san) - if (NOT Boost_INCLUDE_DIRS AND TARGET Boost::headers) - get_target_property (Boost_INCLUDE_DIRS Boost::headers INTERFACE_INCLUDE_DIRECTORIES) - endif () - message(STATUS "Adding [${Boost_INCLUDE_DIRS}] to sanitizer blacklist") - file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/san_bl.txt "src:${Boost_INCLUDE_DIRS}/*") - target_compile_options (opts - INTERFACE - # ignore boost headers for sanitizing - -fsanitize-blacklist=${CMAKE_CURRENT_BINARY_DIR}/san_bl.txt) -endif () - -# workaround for xcode 10.2 and boost < 1.69 -# once we require Boost 1.69 or higher, this can be removed -# see: https://github.com/boostorg/asio/commit/43874d5 -if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0.1.10010043 AND - Boost_VERSION LESS 106900) - target_compile_definitions (opts INTERFACE BOOST_ASIO_HAS_STD_STRING_VIEW) -endif () - -#[===================================================================[ - NIH dep: openssl -#]===================================================================] - -#[===============================================[ - OPENSSL_ROOT_DIR is the only variable that - FindOpenSSL honors for locating, so convert any - OPENSSL_ROOT vars to this -#]===============================================] -if (NOT DEFINED OPENSSL_ROOT_DIR) - if (DEFINED ENV{OPENSSL_ROOT}) - set (OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT}) - elseif (HOMEBREW) - execute_process (COMMAND ${HOMEBREW} --prefix openssl - OUTPUT_VARIABLE OPENSSL_ROOT_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif () - file (TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR) -endif () - -if (static) - set (OPENSSL_USE_STATIC_LIBS ON) -endif () -set (OPENSSL_MSVC_STATIC_RT ON) -find_package (OpenSSL 1.0.2 REQUIRED) -target_link_libraries (ripple_libs - INTERFACE - OpenSSL::SSL - OpenSSL::Crypto) -# disable SSLv2...this can also be done when building/configuring OpenSSL -set_target_properties(OpenSSL::SSL PROPERTIES - INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2) -#[=========================================================[ - https://gitlab.kitware.com/cmake/cmake/issues/16885 - depending on how openssl is built, it might depend - on zlib. In fact, the openssl find package should - figure this out for us, but it does not currently... - so let's add zlib ourselves to the lib list - TODO: investigate linking to static zlib for static - build option -#]=========================================================] -find_package (ZLIB) -set (has_zlib FALSE) -if (TARGET ZLIB::ZLIB) - set_target_properties(OpenSSL::Crypto PROPERTIES - INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) - set (has_zlib TRUE) -endif () - -#[===================================================================[ - NIH dep: secp256k1 -#]===================================================================] - -add_library (secp256k1 STATIC - src/secp256k1/src/secp256k1.c) -target_compile_definitions (secp256k1 - PRIVATE - USE_NUM_NONE - USE_FIELD_10X26 - USE_FIELD_INV_BUILTIN - USE_SCALAR_8X32 - USE_SCALAR_INV_BUILTIN) -target_include_directories (secp256k1 - PUBLIC - $ - $ - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/secp256k1) -target_compile_options (secp256k1 - PRIVATE - $<$:-wd4319> - $<$>: - -Wno-deprecated-declarations - -Wno-unused-function - > - $<$:-Wno-nonnull-compare>) -add_library (NIH::secp256k1 ALIAS secp256k1) -target_link_libraries (ripple_libs INTERFACE NIH::secp256k1) -#[===========================[ - headers installation -#]===========================] -install ( - FILES - src/secp256k1/include/secp256k1.h - DESTINATION include/secp256k1/include) - -#[===================================================================[ - NIH dep: ed25519-donna -#]===================================================================] - -add_library (ed25519-donna STATIC - src/ed25519-donna/ed25519.c) -target_include_directories (ed25519-donna - PUBLIC - $ - $ - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src/ed25519-donna) -#[=========================================================[ - NOTE for macos: - https://github.com/floodyberry/ed25519-donna/issues/29 - our source for ed25519-donna-portable.h has been - patched to workaround this. -#]=========================================================] -target_link_libraries (ed25519-donna PUBLIC OpenSSL::SSL) -add_library (NIH::ed25519-donna ALIAS ed25519-donna) -target_link_libraries (ripple_libs INTERFACE NIH::ed25519-donna) -#[===========================[ - headers installation -#]===========================] -install ( - FILES - src/ed25519-donna/ed25519.h - DESTINATION include/ed25519-donna) - -#[===================================================================[ - NIH dep: lz4 -#]===================================================================] - -ExternalProject_Add (lz4 - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/lz4/lz4.git - GIT_TAG v1.8.2 - SOURCE_SUBDIR contrib/cmake_unofficial - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - -DBUILD_STATIC_LIBS=ON - -DBUILD_SHARED_LIBS=OFF - $<$: - "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" - "-DCMAKE_C_FLAGS_DEBUG=-MTd" - "-DCMAKE_C_FLAGS_RELEASE=-MT" - > - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - --target lz4_static - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /$/${ep_lib_prefix}lz4$<$:_d>${ep_lib_suffix} - - > - TEST_COMMAND "" - INSTALL_COMMAND "" - BUILD_BYPRODUCTS - /${ep_lib_prefix}lz4${ep_lib_suffix} - /${ep_lib_prefix}lz4_d${ep_lib_suffix} -) -ExternalProject_Get_Property (lz4 BINARY_DIR) -ExternalProject_Get_Property (lz4 SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (lz4) -endif () -add_library (lz4_lib STATIC IMPORTED GLOBAL) -file (MAKE_DIRECTORY ${SOURCE_DIR}/lz4) -set_target_properties (lz4_lib PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/${ep_lib_prefix}lz4_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/${ep_lib_prefix}lz4${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - ${SOURCE_DIR}/lib) -add_dependencies (lz4_lib lz4) -target_link_libraries (ripple_libs INTERFACE lz4_lib) -exclude_if_included (lz4) -exclude_if_included (lz4_lib) - -#[===================================================================[ - NIH dep: libarchive -#]===================================================================] - -set (lib_post "") -if (MSVC) - set (lib_post "_static") -endif () -ExternalProject_Add (libarchive - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/libarchive/libarchive.git - GIT_TAG v3.3.3 - CMAKE_ARGS - # passing the compiler seems to be needed for windows CI, sadly - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - -DENABLE_LZ4=ON - -ULZ4_* - -DLZ4_INCLUDE_DIR=$,::> - # because we are building a static lib, this lz4 library doesn't - # actually matter since you can't generally link static libs to other static - # libs. The include files are needed, but the library itself is not (until - # we link our application, at which point we use the lz4 we built above). - # nonetheless, we need to provide a library to libarchive else it will - # NOT include lz4 support when configuring - -DLZ4_LIBRARY=$,$,$> - -DENABLE_WERROR=OFF - -DENABLE_TAR=OFF - -DENABLE_TAR_SHARED=OFF - -DENABLE_INSTALL=ON - -DENABLE_NETTLE=OFF - -DENABLE_OPENSSL=OFF - -DENABLE_LZO=OFF - -DENABLE_LZMA=OFF - -DENABLE_ZLIB=OFF - -DENABLE_BZip2=OFF - -DENABLE_LIBXML2=OFF - -DENABLE_EXPAT=OFF - -DENABLE_PCREPOSIX=OFF - -DENABLE_LibGCC=OFF - -DENABLE_CNG=OFF - -DENABLE_CPIO=OFF - -DENABLE_CPIO_SHARED=OFF - -DENABLE_CAT=OFF - -DENABLE_CAT_SHARED=OFF - -DENABLE_XATTR=OFF - -DENABLE_ACL=OFF - -DENABLE_ICONV=OFF - -DENABLE_TEST=OFF - -DENABLE_COVERAGE=OFF - $<$: - "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" - "-DCMAKE_C_FLAGS_DEBUG=-MTd" - "-DCMAKE_C_FLAGS_RELEASE=-MT" - > - LIST_SEPARATOR :: - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - --target archive_static - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /libarchive/$/${ep_lib_prefix}archive${lib_post}$<$:_d>${ep_lib_suffix} - /libarchive - > - TEST_COMMAND "" - INSTALL_COMMAND "" - DEPENDS lz4 - BUILD_BYPRODUCTS - /libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix} - /libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix} -) -ExternalProject_Get_Property (libarchive BINARY_DIR) -ExternalProject_Get_Property (libarchive SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (libarchive) -endif () -add_library (archive_lib STATIC IMPORTED GLOBAL) -file (MAKE_DIRECTORY ${SOURCE_DIR}/libarchive) -set_target_properties (archive_lib PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - ${SOURCE_DIR}/libarchive - INTERFACE_COMPILE_DEFINITIONS - LIBARCHIVE_STATIC) -add_dependencies (archive_lib libarchive) -target_link_libraries (archive_lib INTERFACE lz4_lib) -target_link_libraries (ripple_libs INTERFACE archive_lib) -exclude_if_included (libarchive) -exclude_if_included (archive_lib) - -#[===================================================================[ - NIH dep: sqlite -#]===================================================================] - -ExternalProject_Add (sqlite3 - PREFIX ${nih_cache_path} - # sqlite doesn't use git, but it provides versioned tarballs - URL https://www.sqlite.org/2018/sqlite-amalgamation-3260000.zip - # ^^^ version is apparent in the URL: 3260000 => 3.26.0 - URL_HASH SHA256=de5dcab133aa339a4cf9e97c40aa6062570086d6085d8f9ad7bc6ddf8a52096e - # we wrote a very simple CMake file to build sqlite - # so that's what we copy here so that we can build with - # CMake. sqlite doesn't generally provided a build system - # for the single amalgamation source file. - PATCH_COMMAND - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/Builds/CMake/CMake_sqlite3.txt - /CMakeLists.txt - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - $<$: - "-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP" - "-DCMAKE_C_FLAGS_DEBUG=-MTd" - "-DCMAKE_C_FLAGS_RELEASE=-MT" - > - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /$/${ep_lib_prefix}sqlite3$<$:_d>${ep_lib_suffix} - - > - TEST_COMMAND "" - INSTALL_COMMAND "" - BUILD_BYPRODUCTS - /${ep_lib_prefix}sqlite3${ep_lib_suffix} - /${ep_lib_prefix}sqlite3_d${ep_lib_suffix} -) -ExternalProject_Get_Property (sqlite3 BINARY_DIR) -ExternalProject_Get_Property (sqlite3 SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (sqlite3) -endif () -add_library (sqlite STATIC IMPORTED GLOBAL) -set_target_properties (sqlite PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/${ep_lib_prefix}sqlite3_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/${ep_lib_prefix}sqlite3${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - ${SOURCE_DIR}) -add_dependencies (sqlite sqlite3) -target_link_libraries (sqlite INTERFACE $<$>:dl>) -target_link_libraries (ripple_libs INTERFACE sqlite) -exclude_if_included (sqlite3) -exclude_if_included (sqlite) -set(sqlite_BINARY_DIR ${BINARY_DIR}) - -#[===================================================================[ - NIH dep: soci -#]===================================================================] - -set (soci_lib_pre ${ep_lib_prefix}) -set (soci_lib_post "") -if (WIN32) - # for some reason soci on windows still prepends lib (non-standard) - set (soci_lib_pre lib) - # this version in the name might change if/when we change versions of soci - set (soci_lib_post "_4_0") -endif () -get_target_property (_boost_incs Boost::date_time INTERFACE_INCLUDE_DIRECTORIES) -ExternalProject_Add (soci - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/SOCI/soci.git - GIT_TAG 04e1870294918d20761736743bb6136314c42dd5 - # We had an issue with soci integer range checking for boost::optional - # and needed to remove the exception that SOCI throws in this case. - # This is *probably* a bug in SOCI, but has never been investigated more - # nor reported to the maintainers. - # This cmake script comments out the lines in question. - # This patch process is likely fragile and should be reviewed carefully - # whenever we update the GIT_TAG above. - PATCH_COMMAND - ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/Builds/CMake/soci_patch.cmake - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/sqlite3 - -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake - -DCMAKE_INCLUDE_PATH=$,::> - -DCMAKE_LIBRARY_PATH=${sqlite_BINARY_DIR} - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - -DSOCI_CXX_C11=ON - -DSOCI_STATIC=ON - -DSOCI_LIBDIR=lib - -DSOCI_SHARED=OFF - -DSOCI_TESTS=OFF - # hack to workaround the fact that soci doesn't currently use - # boost imported targets in its cmake. If they switch to - # proper imported targets, this next line can be removed - # (as well as the get_property above that sets _boost_incs) - -DBoost_INCLUDE_DIRS=$ - -DBOOST_ROOT=${BOOST_ROOT} - -DWITH_BOOST=ON - -DSOCI_DB2=OFF - -DSOCI_FIREBIRD=OFF - -DSOCI_MYSQL=OFF - -DSOCI_ODBC=OFF - -DSOCI_ORACLE=OFF - -DSOCI_POSTGRESQL=OFF - -DSOCI_SQLITE3=ON - -DSQLITE3_INCLUDE_DIR=$,::> - -DSQLITE3_LIBRARY=$,$,$> - $<$:-DCMAKE_FIND_FRAMEWORK=LAST> - $<$: - "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" - "-DCMAKE_CXX_FLAGS_DEBUG=-MTd" - "-DCMAKE_CXX_FLAGS_RELEASE=-MT" - > - $<$>: - "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations" - > - # SEE: https://github.com/SOCI/soci/issues/640 - $<$,$>: - "-DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations -Wno-error=format-overflow -Wno-format-overflow -Wno-error=format-truncation" - > - LIST_SEPARATOR :: - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /lib/$/${soci_lib_pre}soci_core${soci_lib_post}$<$:_d>${ep_lib_suffix} - /lib/$/${soci_lib_pre}soci_empty${soci_lib_post}$<$:_d>${ep_lib_suffix} - /lib/$/${soci_lib_pre}soci_sqlite3${soci_lib_post}$<$:_d>${ep_lib_suffix} - /lib - > - TEST_COMMAND "" - INSTALL_COMMAND "" - DEPENDS sqlite3 - BUILD_BYPRODUCTS - /lib/${soci_lib_pre}soci_core${soci_lib_post}${ep_lib_suffix} - /lib/${soci_lib_pre}soci_core${soci_lib_post}_d${ep_lib_suffix} - /lib/${soci_lib_pre}soci_empty${soci_lib_post}${ep_lib_suffix} - /lib/${soci_lib_pre}soci_empty${soci_lib_post}_d${ep_lib_suffix} - /lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}${ep_lib_suffix} - /lib/${soci_lib_pre}soci_sqlite3${soci_lib_post}_d${ep_lib_suffix} -) -ExternalProject_Get_Property (soci BINARY_DIR) -ExternalProject_Get_Property (soci SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (soci) -endif () -file (MAKE_DIRECTORY ${SOURCE_DIR}/include) -file (MAKE_DIRECTORY ${BINARY_DIR}/include) -foreach (_comp core empty sqlite3) - add_library ("soci_${_comp}" STATIC IMPORTED GLOBAL) - set_target_properties ("soci_${_comp}" PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/lib/${soci_lib_pre}soci_${_comp}${soci_lib_post}${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - "${SOURCE_DIR}/include;${BINARY_DIR}/include") - add_dependencies ("soci_${_comp}" soci) # something has to depend on the ExternalProject to trigger it - target_link_libraries (ripple_libs INTERFACE "soci_${_comp}") - if (NOT _comp STREQUAL "core") - target_link_libraries ("soci_${_comp}" INTERFACE soci_core) - endif () - exclude_if_included ("soci_${_comp}") -endforeach () -exclude_if_included (soci) - -#[===================================================================[ - NIH dep: snappy -#]===================================================================] - -ExternalProject_Add (snappy - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/google/snappy.git - GIT_TAG 1.1.7 - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - -DBUILD_SHARED_LIBS=OFF - -DCMAKE_POSITION_INDEPENDENT_CODE=ON - -DSNAPPY_BUILD_TESTS=OFF - $<$: - "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" - "-DCMAKE_CXX_FLAGS_DEBUG=-MTd" - "-DCMAKE_CXX_FLAGS_RELEASE=-MT" - > - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /$/${ep_lib_prefix}snappy$<$:_d>${ep_lib_suffix} - - > - TEST_COMMAND "" - INSTALL_COMMAND "" - BUILD_BYPRODUCTS - /${ep_lib_prefix}snappy${ep_lib_suffix} - /${ep_lib_prefix}snappy_d${ep_lib_suffix} -) -ExternalProject_Get_Property (snappy BINARY_DIR) -ExternalProject_Get_Property (snappy SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (snappy) -endif () -add_library (snappy_lib STATIC IMPORTED GLOBAL) -file (MAKE_DIRECTORY ${SOURCE_DIR}/snappy) -set_target_properties (snappy_lib PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/${ep_lib_prefix}snappy_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/${ep_lib_prefix}snappy${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - "${SOURCE_DIR};${BINARY_DIR}") -add_dependencies (snappy_lib snappy) -target_link_libraries (ripple_libs INTERFACE snappy_lib) -exclude_if_included (snappy) -exclude_if_included (snappy_lib) - -#[===================================================================[ - NIH dep: rocksdb -#]===================================================================] - -ExternalProject_Add (rocksdb - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/facebook/rocksdb.git - GIT_TAG v5.17.2 - PATCH_COMMAND - # only used by windows build - ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/Builds/CMake/rocks_thirdparty.inc - /thirdparty.inc - COMMAND - # fixup their build version file to keep the values - # from changing always - ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_SOURCE_DIR}/Builds/CMake/rocksdb_build_version.cc.in - /util/build_version.cc.in - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - -DCMAKE_DEBUG_POSTFIX=_d - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - -DBUILD_SHARED_LIBS=OFF - -DCMAKE_POSITION_INDEPENDENT_CODE=ON - -DWITH_JEMALLOC=$,ON,OFF> - -DWITH_SNAPPY=ON - -DWITH_LZ4=ON - -DWITH_ZLIB=OFF - -DUSE_RTTI=ON - -DWITH_ZSTD=OFF - -DWITH_GFLAGS=OFF - -DWITH_BZ2=OFF - -ULZ4_* - -DLZ4_INCLUDE_DIR=$,::> - -DLZ4_LIBRARIES=$,$,$> - -DLZ4_FOUND=ON - -USNAPPY_* - -DSNAPPY_INCLUDE_DIR=$,::> - -DSNAPPY_LIBRARIES=$,$,$> - -DSNAPPY_FOUND=ON - -DWITH_MD_LIBRARY=OFF - -DWITH_RUNTIME_DEBUG=$,ON,OFF> - -DFAIL_ON_WARNINGS=OFF - -DWITH_ASAN=OFF - -DWITH_TSAN=OFF - -DWITH_UBSAN=OFF - -DWITH_NUMA=OFF - -DWITH_TBB=OFF - -DWITH_WINDOWS_UTF8_FILENAMES=OFF - -DWITH_XPRESS=OFF - -DPORTABLE=ON - -DFORCE_SSE42=OFF - -DDISABLE_STALL_NOTIF=OFF - -DOPTDBG=ON - -DROCKSDB_LITE=OFF - -DWITH_FALLOCATE=ON - -DWITH_LIBRADOS=OFF - -DWITH_JNI=OFF - -DROCKSDB_INSTALL_ON_WINDOWS=OFF - -DWITH_TESTS=OFF - -DWITH_TOOLS=OFF - $<$: - "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -MP /DNDEBUG" - > - $<$>: - "-DCMAKE_CXX_FLAGS=-DNDEBUG" - > - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /$/${ep_lib_prefix}rocksdb$<$:_d>${ep_lib_suffix} - - > - LIST_SEPARATOR :: - TEST_COMMAND "" - INSTALL_COMMAND "" - DEPENDS snappy lz4 - BUILD_BYPRODUCTS - /${ep_lib_prefix}rocksdb${ep_lib_suffix} - /${ep_lib_prefix}rocksdb_d${ep_lib_suffix} -) -ExternalProject_Get_Property (rocksdb BINARY_DIR) -ExternalProject_Get_Property (rocksdb SOURCE_DIR) -if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (rocksdb) -endif () -add_library (rocksdb_lib STATIC IMPORTED GLOBAL) -file (MAKE_DIRECTORY ${SOURCE_DIR}/include) -set_target_properties (rocksdb_lib PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/${ep_lib_prefix}rocksdb_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/${ep_lib_prefix}rocksdb${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - ${SOURCE_DIR}/include - INTERFACE_COMPILE_DEFINITIONS - RIPPLE_ROCKSDB_AVAILABLE=1) -add_dependencies (rocksdb_lib rocksdb) -target_link_libraries (rocksdb_lib INTERFACE snappy_lib lz4_lib) -if (MSVC) - target_link_libraries (rocksdb_lib INTERFACE rpcrt4) -endif () -target_link_libraries (ripple_libs INTERFACE rocksdb_lib) -exclude_if_included (rocksdb) -exclude_if_included (rocksdb_lib) - -#[===================================================================[ - NIH dep: nudb - - NuDB is header-only, thus is an INTERFACE lib in CMake. - TODO: move the library definition into NuDB repo and add - proper targets and export/install -#]===================================================================] - -if (is_root_project) # NuDB not needed in the case of xrpl_core inclusion build - add_library (nudb INTERFACE) - if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.11) - FetchContent_Declare( - nudb_src - GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git - GIT_TAG 2.0.1 - ) - FetchContent_GetProperties(nudb_src) - if(NOT nudb_src_POPULATED) - message (STATUS "Pausing to download NuDB...") - FetchContent_Populate(nudb_src) - endif() - else () - ExternalProject_Add (nudb_src - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/CPPAlliance/NuDB.git - GIT_TAG 2.0.1 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - TEST_COMMAND "" - INSTALL_COMMAND "" - ) - ExternalProject_Get_Property (nudb_src SOURCE_DIR) - set (nudb_src_SOURCE_DIR "${SOURCE_DIR}") - file (MAKE_DIRECTORY ${nudb_src_SOURCE_DIR}/include) - add_dependencies (nudb nudb_src) - endif () - - file(TO_CMAKE_PATH "${nudb_src_SOURCE_DIR}" nudb_src_SOURCE_DIR) -# specify as system includes so as to avoid warnings - target_include_directories (nudb SYSTEM INTERFACE ${nudb_src_SOURCE_DIR}/include) - target_link_libraries (nudb - INTERFACE - Boost::thread - Boost::system) - add_library (NIH::nudb ALIAS nudb) - target_link_libraries (ripple_libs INTERFACE NIH::nudb) -endif () - -#[===================================================================[ - import protobuf (lib and compiler) and create a lib - from our proto message definitions. If the system protobuf - is not found, fallback on EP to download and build a version - from official source. -#]===================================================================] - -if (static) - set (Protobuf_USE_STATIC_LIBS ON) -endif () -find_package (Protobuf) -if (local_protobuf OR NOT TARGET protobuf::libprotobuf) - message (STATUS "using local protobuf build.") - if (WIN32) - # protobuf prepends lib even on windows - set (pbuf_lib_pre "lib") - else () - set (pbuf_lib_pre ${ep_lib_prefix}) - endif () - # for the external project build of protobuf, we currently ignore the - # static option and always build static libs here. This is consistent - # with our other EP builds. Dynamic libs in an EP would add complexity - # because we'd need to get them into the runtime path, and probably - # install them. - ExternalProject_Add (protobuf_src - PREFIX ${nih_cache_path} - GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git - GIT_TAG v3.6.1 - SOURCE_SUBDIR cmake - CMAKE_ARGS - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -Dprotobuf_BUILD_TESTS=OFF - -Dprotobuf_BUILD_EXAMPLES=OFF - -Dprotobuf_BUILD_PROTOC_BINARIES=ON - -Dprotobuf_MSVC_STATIC_RUNTIME=ON - -DBUILD_SHARED_LIBS=OFF - -Dprotobuf_BUILD_SHARED_LIBS=OFF - -DCMAKE_DEBUG_POSTFIX=_d - -Dprotobuf_DEBUG_POSTFIX=_d - -Dprotobuf_WITH_ZLIB=$,ON,OFF> - $<$:-DCMAKE_VERBOSE_MAKEFILE=ON> - $<$>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}> - $<$: - "-DCMAKE_CXX_FLAGS=-GR -Gd -fp:precise -FS -EHa -MP" - > - LOG_BUILD ON - LOG_CONFIGURE ON - BUILD_COMMAND - ${CMAKE_COMMAND} - --build . - --config $ - $<$:--parallel ${ep_procs}> - $<$: - COMMAND - ${CMAKE_COMMAND} -E copy - /$/${pbuf_lib_pre}protobuf$<$:_d>${ep_lib_suffix} - - COMMAND - ${CMAKE_COMMAND} -E copy - /$/protoc${CMAKE_EXECUTABLE_SUFFIX} - - > - TEST_COMMAND "" - INSTALL_COMMAND "" - BUILD_BYPRODUCTS - /${pbuf_lib_pre}protobuf${ep_lib_suffix} - /${pbuf_lib_pre}protobuf_d${ep_lib_suffix} - /protoc${CMAKE_EXECUTABLE_SUFFIX} - ) - ExternalProject_Get_Property (protobuf_src BINARY_DIR) - ExternalProject_Get_Property (protobuf_src SOURCE_DIR) - if (CMAKE_VERBOSE_MAKEFILE) - print_ep_logs (protobuf_src) - endif () - - if (NOT TARGET protobuf::libprotobuf) - add_library (protobuf::libprotobuf STATIC IMPORTED GLOBAL) - endif () - file (MAKE_DIRECTORY ${SOURCE_DIR}/src) - set_target_properties (protobuf::libprotobuf PROPERTIES - IMPORTED_LOCATION_DEBUG - ${BINARY_DIR}/${pbuf_lib_pre}protobuf_d${ep_lib_suffix} - IMPORTED_LOCATION_RELEASE - ${BINARY_DIR}/${pbuf_lib_pre}protobuf${ep_lib_suffix} - INTERFACE_INCLUDE_DIRECTORIES - ${SOURCE_DIR}/src) - add_dependencies (protobuf::libprotobuf protobuf_src) - exclude_if_included (protobuf_src) - exclude_if_included (protobuf::libprotobuf) - - if (NOT TARGET protobuf::protoc) - add_executable (protobuf::protoc IMPORTED) - exclude_if_included (protobuf::protoc) - endif () - set_target_properties (protobuf::protoc PROPERTIES - IMPORTED_LOCATION "${BINARY_DIR}/protoc${CMAKE_EXECUTABLE_SUFFIX}") - add_dependencies (protobuf::protoc protobuf_src) -endif () - -file (MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/proto_gen) -set (save_CBD ${CMAKE_CURRENT_BINARY_DIR}) -set (CMAKE_CURRENT_BINARY_DIR ${CMAKE_BINARY_DIR}/proto_gen) -protobuf_generate_cpp ( - PROTO_SRCS - PROTO_HDRS - src/ripple/proto/ripple.proto) -set (CMAKE_CURRENT_BINARY_DIR ${save_CBD}) - -add_library (pbufs STATIC ${PROTO_SRCS} ${PROTO_HDRS}) - -target_include_directories (pbufs PRIVATE src) -target_include_directories (pbufs - SYSTEM PUBLIC ${CMAKE_BINARY_DIR}/proto_gen) -target_link_libraries (pbufs protobuf::libprotobuf) -target_compile_options (pbufs - PUBLIC - $<$: - --system-header-prefix="google/protobuf" - -Wno-deprecated-dynamic-exception-spec - >) -add_library (Ripple::pbufs ALIAS pbufs) -target_link_libraries (ripple_libs INTERFACE Ripple::pbufs) -exclude_if_included (pbufs) - -#[===================================================================[ - xrpl_core - core functionality, useable by some client software perhaps -#]===================================================================] - -file (GLOB_RECURSE rb_headers - src/ripple/beast/*.h - src/ripple/beast/*.hpp) - -add_library (xrpl_core - ${rb_headers}) ## headers added here for benefit of IDEs - -#[===============================[ - beast/legacy FILES: - TODO: review these sources for removal or replacement -#]===============================] -if (unity) - target_sources (xrpl_core PRIVATE - src/ripple/beast/core/core.unity.cpp - src/ripple/beast/unity/beast_hash_unity.cpp - src/ripple/beast/unity/beast_insight_unity.cpp - src/ripple/beast/unity/beast_net_unity.cpp - src/ripple/beast/unity/beast_utility_unity.cpp) -else () - target_sources (xrpl_core PRIVATE - src/ripple/beast/core/CurrentThreadName.cpp - src/ripple/beast/core/SemanticVersion.cpp - src/ripple/beast/hash/impl/xxhash.cpp - src/ripple/beast/insight/impl/Collector.cpp - src/ripple/beast/insight/impl/Groups.cpp - src/ripple/beast/insight/impl/Hook.cpp - src/ripple/beast/insight/impl/Metric.cpp - src/ripple/beast/insight/impl/NullCollector.cpp - src/ripple/beast/insight/impl/StatsDCollector.cpp - src/ripple/beast/net/impl/IPAddressConversion.cpp - src/ripple/beast/net/impl/IPAddressV4.cpp - src/ripple/beast/net/impl/IPAddressV6.cpp - src/ripple/beast/net/impl/IPEndpoint.cpp - src/ripple/beast/utility/src/beast_Journal.cpp - src/ripple/beast/utility/src/beast_PropertyStream.cpp) -endif () - -#[===============================[ - core sources -#]===============================] -if (unity) - target_sources (xrpl_core PRIVATE - src/ripple/unity/basics1.cpp - src/ripple/unity/json.cpp - src/ripple/unity/protocol.cpp - src/ripple/unity/crypto.cpp) -else () - target_sources (xrpl_core PRIVATE - #[===============================[ - nounity, main sources: - subdir: basics (partial) - #]===============================] - src/ripple/basics/impl/base64.cpp - src/ripple/basics/impl/contract.cpp - src/ripple/basics/impl/CountedObject.cpp - src/ripple/basics/impl/FileUtilities.cpp - src/ripple/basics/impl/Log.cpp - src/ripple/basics/impl/strHex.cpp - src/ripple/basics/impl/StringUtilities.cpp - #[===============================[ - nounity, main sources: - subdir: json - #]===============================] - src/ripple/json/impl/JsonPropertyStream.cpp - src/ripple/json/impl/Object.cpp - src/ripple/json/impl/Output.cpp - src/ripple/json/impl/Writer.cpp - src/ripple/json/impl/json_reader.cpp - src/ripple/json/impl/json_value.cpp - src/ripple/json/impl/json_valueiterator.cpp - src/ripple/json/impl/json_writer.cpp - src/ripple/json/impl/to_string.cpp - #[===============================[ - nounity, main sources: - subdir: protocol - #]===============================] - src/ripple/protocol/impl/AccountID.cpp - src/ripple/protocol/impl/Book.cpp - src/ripple/protocol/impl/BuildInfo.cpp - src/ripple/protocol/impl/ErrorCodes.cpp - src/ripple/protocol/impl/Feature.cpp - src/ripple/protocol/impl/HashPrefix.cpp - src/ripple/protocol/impl/IOUAmount.cpp - src/ripple/protocol/impl/Indexes.cpp - src/ripple/protocol/impl/InnerObjectFormats.cpp - src/ripple/protocol/impl/Issue.cpp - src/ripple/protocol/impl/Keylet.cpp - src/ripple/protocol/impl/LedgerFormats.cpp - src/ripple/protocol/impl/PublicKey.cpp - src/ripple/protocol/impl/Quality.cpp - src/ripple/protocol/impl/Rate2.cpp - src/ripple/protocol/impl/SField.cpp - src/ripple/protocol/impl/SOTemplate.cpp - src/ripple/protocol/impl/STAccount.cpp - src/ripple/protocol/impl/STAmount.cpp - src/ripple/protocol/impl/STArray.cpp - src/ripple/protocol/impl/STBase.cpp - src/ripple/protocol/impl/STBlob.cpp - src/ripple/protocol/impl/STInteger.cpp - src/ripple/protocol/impl/STLedgerEntry.cpp - src/ripple/protocol/impl/STObject.cpp - src/ripple/protocol/impl/STParsedJSON.cpp - src/ripple/protocol/impl/STPathSet.cpp - src/ripple/protocol/impl/STTx.cpp - src/ripple/protocol/impl/STValidation.cpp - src/ripple/protocol/impl/STVar.cpp - src/ripple/protocol/impl/STVector256.cpp - src/ripple/protocol/impl/SecretKey.cpp - src/ripple/protocol/impl/Seed.cpp - src/ripple/protocol/impl/Serializer.cpp - src/ripple/protocol/impl/Sign.cpp - src/ripple/protocol/impl/TER.cpp - src/ripple/protocol/impl/TxFormats.cpp - src/ripple/protocol/impl/UintTypes.cpp - src/ripple/protocol/impl/digest.cpp - src/ripple/protocol/impl/tokens.cpp - #[===============================[ - nounity, main sources: - subdir: crypto - #]===============================] - src/ripple/crypto/impl/GenerateDeterministicKey.cpp - src/ripple/crypto/impl/RFC1751.cpp - src/ripple/crypto/impl/csprng.cpp - src/ripple/crypto/impl/ec_key.cpp - src/ripple/crypto/impl/openssl.cpp) -endif () -add_library (Ripple::xrpl_core ALIAS xrpl_core) -target_include_directories (xrpl_core - PUBLIC - $ - $ - # this one is for beast/legacy files: - $ - $) -target_compile_options (xrpl_core - PUBLIC - $<$:-Wno-maybe-uninitialized>) -target_link_libraries (xrpl_core - PUBLIC - OpenSSL::Crypto - NIH::secp256k1 - NIH::ed25519-donna - Ripple::syslibs - Ripple::boost - Ripple::opts) -#[=================================[ - main/core headers installation -#]=================================] -install ( - FILES - src/ripple/basics/base64.h - src/ripple/basics/Blob.h - src/ripple/basics/Buffer.h - src/ripple/basics/CountedObject.h - src/ripple/basics/FileUtilities.h - src/ripple/basics/LocalValue.h - src/ripple/basics/Log.h - src/ripple/basics/safe_cast.h - src/ripple/basics/Slice.h - src/ripple/basics/StringUtilities.h - src/ripple/basics/ToString.h - src/ripple/basics/UnorderedContainers.h - src/ripple/basics/algorithm.h - src/ripple/basics/base_uint.h - src/ripple/basics/chrono.h - src/ripple/basics/contract.h - src/ripple/basics/date.h - src/ripple/basics/hardened_hash.h - src/ripple/basics/strHex.h - DESTINATION include/ripple/basics) -install ( - FILES - src/ripple/crypto/GenerateDeterministicKey.h - src/ripple/crypto/KeyType.h - src/ripple/crypto/RFC1751.h - src/ripple/crypto/csprng.h - DESTINATION include/ripple/crypto) -install ( - FILES - src/ripple/crypto/impl/ec_key.h - src/ripple/crypto/impl/openssl.h - DESTINATION include/ripple/crypto/impl) -install ( - FILES - src/ripple/json/JsonPropertyStream.h - src/ripple/json/Object.h - src/ripple/json/Output.h - src/ripple/json/Writer.h - src/ripple/json/json_forwards.h - src/ripple/json/json_reader.h - src/ripple/json/json_value.h - src/ripple/json/json_writer.h - src/ripple/json/to_string.h - DESTINATION include/ripple/json) -install ( - FILES - src/ripple/json/impl/json_assert.h - DESTINATION include/ripple/json/impl) -install ( - FILES - src/ripple/protocol/AccountID.h - src/ripple/protocol/AmountConversions.h - src/ripple/protocol/Book.h - src/ripple/protocol/BuildInfo.h - src/ripple/protocol/ErrorCodes.h - src/ripple/protocol/Feature.h - src/ripple/protocol/HashPrefix.h - src/ripple/protocol/IOUAmount.h - src/ripple/protocol/Indexes.h - src/ripple/protocol/InnerObjectFormats.h - src/ripple/protocol/Issue.h - src/ripple/protocol/Keylet.h - src/ripple/protocol/KnownFormats.h - src/ripple/protocol/LedgerFormats.h - src/ripple/protocol/Protocol.h - src/ripple/protocol/PublicKey.h - src/ripple/protocol/Quality.h - src/ripple/protocol/Rate.h - src/ripple/protocol/SField.h - src/ripple/protocol/SOTemplate.h - src/ripple/protocol/STAccount.h - src/ripple/protocol/STAmount.h - src/ripple/protocol/STArray.h - src/ripple/protocol/STBase.h - src/ripple/protocol/STBitString.h - src/ripple/protocol/STBlob.h - src/ripple/protocol/STExchange.h - src/ripple/protocol/STInteger.h - src/ripple/protocol/STLedgerEntry.h - src/ripple/protocol/STObject.h - src/ripple/protocol/STParsedJSON.h - src/ripple/protocol/STPathSet.h - src/ripple/protocol/STTx.h - src/ripple/protocol/STValidation.h - src/ripple/protocol/STVector256.h - src/ripple/protocol/SecretKey.h - src/ripple/protocol/Seed.h - src/ripple/protocol/Serializer.h - src/ripple/protocol/Sign.h - src/ripple/protocol/SystemParameters.h - src/ripple/protocol/TER.h - src/ripple/protocol/TxFlags.h - src/ripple/protocol/TxFormats.h - src/ripple/protocol/UintTypes.h - src/ripple/protocol/XRPAmount.h - src/ripple/protocol/digest.h - src/ripple/protocol/jss.h - src/ripple/protocol/tokens.h - DESTINATION include/ripple/protocol) -install ( - FILES - src/ripple/protocol/impl/STVar.h - src/ripple/protocol/impl/secp256k1.h - DESTINATION include/ripple/protocol/impl) - -#[===================================[ - beast/legacy headers installation -#]===================================] -install ( - FILES - src/ripple/beast/clock/abstract_clock.h - src/ripple/beast/clock/basic_seconds_clock.h - src/ripple/beast/clock/manual_clock.h - DESTINATION include/ripple/beast/clock) -install ( - FILES - src/ripple/beast/core/Config.h - src/ripple/beast/core/ConfigCheck.h - src/ripple/beast/core/LexicalCast.h - src/ripple/beast/core/List.h - src/ripple/beast/core/PlatformConfig.h - src/ripple/beast/core/SemanticVersion.h - src/ripple/beast/core/StandardConfig.h - DESTINATION include/ripple/beast/core) -install ( - FILES - src/ripple/beast/crypto/detail/mac_facade.h - src/ripple/beast/crypto/detail/ripemd_context.h - src/ripple/beast/crypto/detail/sha2_context.h - src/ripple/beast/crypto/ripemd.h - src/ripple/beast/crypto/secure_erase.h - src/ripple/beast/crypto/sha2.h - DESTINATION include/ripple/beast/crypto) -install ( - FILES - src/ripple/beast/cxx17/type_traits.h - DESTINATION include/ripple/beast/cxx17) -install ( - FILES - src/ripple/beast/hash/endian.h - src/ripple/beast/hash/hash_append.h - src/ripple/beast/hash/meta.h - src/ripple/beast/hash/uhash.h - src/ripple/beast/hash/xxhasher.h - DESTINATION include/ripple/beast/hash) -install ( - FILES src/ripple/beast/hash/impl/xxhash.h - DESTINATION include/ripple/beast/hash/impl) -install ( - FILES - src/ripple/beast/rfc2616.h - src/ripple/beast/type_name.h - src/ripple/beast/unit_test.h - src/ripple/beast/xor_shift_engine.h - DESTINATION include/ripple/beast) -install ( - FILES - src/ripple/beast/utility/Journal.h - src/ripple/beast/utility/PropertyStream.h - src/ripple/beast/utility/Zero.h - src/ripple/beast/utility/rngfill.h - DESTINATION include/ripple/beast/utility) -# WARNING!! -- horrible levelization ahead -# (these files should be isolated or moved...but -# unfortunately unit_test.h above creates this dependency) -install ( - FILES - src/beast/extras/beast/unit_test/amount.hpp - src/beast/extras/beast/unit_test/dstream.hpp - src/beast/extras/beast/unit_test/global_suites.hpp - src/beast/extras/beast/unit_test/match.hpp - src/beast/extras/beast/unit_test/recorder.hpp - src/beast/extras/beast/unit_test/reporter.hpp - src/beast/extras/beast/unit_test/results.hpp - src/beast/extras/beast/unit_test/runner.hpp - src/beast/extras/beast/unit_test/suite.hpp - src/beast/extras/beast/unit_test/suite_info.hpp - src/beast/extras/beast/unit_test/suite_list.hpp - src/beast/extras/beast/unit_test/thread.hpp - DESTINATION include/beast/unit_test) -install ( - FILES - src/beast/extras/beast/unit_test/detail/const_container.hpp - DESTINATION include/beast/unit_test/detail) - -#[===================================================================[ - rippled executable -#]===================================================================] - -#[=========================================================[ - this one header is added as source just to keep older - versions of cmake happy. cmake 3.10+ allows - add_executable with no sources -#]=========================================================] -add_executable (rippled src/ripple/app/main/Application.h) -if (unity) - target_sources (rippled PRIVATE - #[===============================[ - unity, main sources - #]===============================] - src/ripple/unity/app_consensus.cpp - src/ripple/unity/app_ledger.cpp - src/ripple/unity/app_ledger_impl.cpp - src/ripple/unity/app_main1.cpp - src/ripple/unity/app_main2.cpp - src/ripple/unity/app_misc.cpp - src/ripple/unity/app_misc_impl.cpp - src/ripple/unity/app_paths.cpp - src/ripple/unity/app_tx.cpp - src/ripple/unity/conditions.cpp - src/ripple/unity/consensus.cpp - src/ripple/unity/core.cpp - src/ripple/unity/basics2.cpp - src/ripple/unity/ledger.cpp - src/ripple/unity/net.cpp - src/ripple/unity/nodestore.cpp - src/ripple/unity/overlay1.cpp - src/ripple/unity/overlay2.cpp - src/ripple/unity/peerfinder.cpp - src/ripple/unity/resource.cpp - src/ripple/unity/rpcx1.cpp - src/ripple/unity/rpcx2.cpp - src/ripple/unity/shamap.cpp - src/ripple/unity/server.cpp - src/ripple/unity/soci_ripple.cpp - #[===============================[ - unity, test sources - #]===============================] - src/test/unity/app_test_unity1.cpp - src/test/unity/app_test_unity2.cpp - src/test/unity/basics_test_unity.cpp - src/test/unity/beast_test_unity1.cpp - src/test/unity/beast_test_unity2.cpp - src/test/unity/conditions_test_unity.cpp - src/test/unity/consensus_test_unity.cpp - src/test/unity/core_test_unity.cpp - src/test/unity/crypto_test_unity.cpp - src/test/unity/json_test_unity.cpp - src/test/unity/ledger_test_unity.cpp - src/test/unity/net_test_unity.cpp - src/test/unity/nodestore_test_unity.cpp - src/test/unity/overlay_test_unity.cpp - src/test/unity/peerfinder_test_unity.cpp - src/test/unity/protocol_test_unity.cpp - src/test/unity/resource_test_unity.cpp - src/test/unity/rpc_test_unity.cpp - src/test/unity/server_test_unity.cpp - src/test/unity/server_status_test_unity.cpp - src/test/unity/shamap_test_unity.cpp - src/test/unity/jtx_unity1.cpp - src/test/unity/jtx_unity2.cpp - src/test/unity/csf_unity.cpp) -else () - target_sources (rippled PRIVATE - #[===============================[ - nounity, main sources: - subdir: app - #]===============================] - src/ripple/app/consensus/RCLConsensus.cpp - src/ripple/app/consensus/RCLCxPeerPos.cpp - src/ripple/app/consensus/RCLValidations.cpp - src/ripple/app/ledger/AcceptedLedger.cpp - src/ripple/app/ledger/AcceptedLedgerTx.cpp - src/ripple/app/ledger/AccountStateSF.cpp - src/ripple/app/ledger/BookListeners.cpp - src/ripple/app/ledger/ConsensusTransSetSF.cpp - src/ripple/app/ledger/Ledger.cpp - src/ripple/app/ledger/LedgerHistory.cpp - src/ripple/app/ledger/OrderBookDB.cpp - src/ripple/app/ledger/TransactionStateSF.cpp - src/ripple/app/ledger/impl/BuildLedger.cpp - src/ripple/app/ledger/impl/InboundLedger.cpp - src/ripple/app/ledger/impl/InboundLedgers.cpp - src/ripple/app/ledger/impl/InboundTransactions.cpp - src/ripple/app/ledger/impl/LedgerCleaner.cpp - src/ripple/app/ledger/impl/LedgerMaster.cpp - src/ripple/app/ledger/impl/LedgerReplay.cpp - src/ripple/app/ledger/impl/LedgerToJson.cpp - src/ripple/app/ledger/impl/LocalTxs.cpp - src/ripple/app/ledger/impl/OpenLedger.cpp - src/ripple/app/ledger/impl/TransactionAcquire.cpp - src/ripple/app/ledger/impl/TransactionMaster.cpp - src/ripple/app/main/Application.cpp - src/ripple/app/main/BasicApp.cpp - src/ripple/app/main/CollectorManager.cpp - src/ripple/app/main/LoadManager.cpp - src/ripple/app/main/Main.cpp - src/ripple/app/main/NodeIdentity.cpp - src/ripple/app/main/NodeStoreScheduler.cpp - src/ripple/app/misc/CanonicalTXSet.cpp - src/ripple/app/misc/FeeVoteImpl.cpp - src/ripple/app/misc/HashRouter.cpp - src/ripple/app/misc/NetworkOPs.cpp - src/ripple/app/misc/SHAMapStoreImp.cpp - src/ripple/app/misc/impl/AccountTxPaging.cpp - src/ripple/app/misc/impl/AmendmentTable.cpp - src/ripple/app/misc/impl/LoadFeeTrack.cpp - src/ripple/app/misc/impl/Manifest.cpp - src/ripple/app/misc/impl/Transaction.cpp - src/ripple/app/misc/impl/TxQ.cpp - src/ripple/app/misc/impl/ValidatorKeys.cpp - src/ripple/app/misc/impl/ValidatorList.cpp - src/ripple/app/misc/impl/ValidatorSite.cpp - src/ripple/app/paths/AccountCurrencies.cpp - src/ripple/app/paths/Credit.cpp - src/ripple/app/paths/Flow.cpp - src/ripple/app/paths/Node.cpp - src/ripple/app/paths/PathRequest.cpp - src/ripple/app/paths/PathRequests.cpp - src/ripple/app/paths/PathState.cpp - src/ripple/app/paths/Pathfinder.cpp - src/ripple/app/paths/RippleCalc.cpp - src/ripple/app/paths/RippleLineCache.cpp - src/ripple/app/paths/RippleState.cpp - src/ripple/app/paths/cursor/AdvanceNode.cpp - src/ripple/app/paths/cursor/DeliverNodeForward.cpp - src/ripple/app/paths/cursor/DeliverNodeReverse.cpp - src/ripple/app/paths/cursor/EffectiveRate.cpp - src/ripple/app/paths/cursor/ForwardLiquidity.cpp - src/ripple/app/paths/cursor/ForwardLiquidityForAccount.cpp - src/ripple/app/paths/cursor/Liquidity.cpp - src/ripple/app/paths/cursor/NextIncrement.cpp - src/ripple/app/paths/cursor/ReverseLiquidity.cpp - src/ripple/app/paths/cursor/ReverseLiquidityForAccount.cpp - src/ripple/app/paths/cursor/RippleLiquidity.cpp - src/ripple/app/paths/impl/BookStep.cpp - src/ripple/app/paths/impl/DirectStep.cpp - src/ripple/app/paths/impl/PaySteps.cpp - src/ripple/app/paths/impl/XRPEndpointStep.cpp - src/ripple/app/tx/impl/ApplyContext.cpp - src/ripple/app/tx/impl/BookTip.cpp - src/ripple/app/tx/impl/CancelCheck.cpp - src/ripple/app/tx/impl/CancelOffer.cpp - src/ripple/app/tx/impl/CancelTicket.cpp - src/ripple/app/tx/impl/CashCheck.cpp - src/ripple/app/tx/impl/Change.cpp - src/ripple/app/tx/impl/CreateCheck.cpp - src/ripple/app/tx/impl/CreateOffer.cpp - src/ripple/app/tx/impl/CreateTicket.cpp - src/ripple/app/tx/impl/DepositPreauth.cpp - src/ripple/app/tx/impl/Escrow.cpp - src/ripple/app/tx/impl/InvariantCheck.cpp - src/ripple/app/tx/impl/OfferStream.cpp - src/ripple/app/tx/impl/PayChan.cpp - src/ripple/app/tx/impl/Payment.cpp - src/ripple/app/tx/impl/SetAccount.cpp - src/ripple/app/tx/impl/SetRegularKey.cpp - src/ripple/app/tx/impl/SetSignerList.cpp - src/ripple/app/tx/impl/SetTrust.cpp - src/ripple/app/tx/impl/SignerEntries.cpp - src/ripple/app/tx/impl/Taker.cpp - src/ripple/app/tx/impl/Transactor.cpp - src/ripple/app/tx/impl/apply.cpp - src/ripple/app/tx/impl/applySteps.cpp - #[===============================[ - nounity, main sources: - subdir: basics (partial) - #]===============================] - src/ripple/basics/impl/Archive.cpp - src/ripple/basics/impl/BasicConfig.cpp - src/ripple/basics/impl/PerfLogImp.cpp - src/ripple/basics/impl/ResolverAsio.cpp - src/ripple/basics/impl/Sustain.cpp - src/ripple/basics/impl/UptimeClock.cpp - src/ripple/basics/impl/make_SSLContext.cpp - src/ripple/basics/impl/mulDiv.cpp - #[===============================[ - nounity, main sources: - subdir: conditions - #]===============================] - src/ripple/conditions/impl/Condition.cpp - src/ripple/conditions/impl/Fulfillment.cpp - src/ripple/conditions/impl/error.cpp - #[===============================[ - nounity, main sources: - subdir: core - #]===============================] - src/ripple/core/impl/Config.cpp - src/ripple/core/impl/DatabaseCon.cpp - src/ripple/core/impl/Job.cpp - src/ripple/core/impl/JobQueue.cpp - src/ripple/core/impl/LoadEvent.cpp - src/ripple/core/impl/LoadMonitor.cpp - src/ripple/core/impl/SNTPClock.cpp - src/ripple/core/impl/SociDB.cpp - src/ripple/core/impl/Stoppable.cpp - src/ripple/core/impl/TimeKeeper.cpp - src/ripple/core/impl/Workers.cpp - #[===============================[ - nounity, main sources: - subdir: consensus - #]===============================] - src/ripple/consensus/Consensus.cpp - #[===============================[ - nounity, main sources: - subdir: ledger - #]===============================] - src/ripple/ledger/impl/ApplyStateTable.cpp - src/ripple/ledger/impl/ApplyView.cpp - src/ripple/ledger/impl/ApplyViewBase.cpp - src/ripple/ledger/impl/ApplyViewImpl.cpp - src/ripple/ledger/impl/BookDirs.cpp - src/ripple/ledger/impl/CachedSLEs.cpp - src/ripple/ledger/impl/CachedView.cpp - src/ripple/ledger/impl/CashDiff.cpp - src/ripple/ledger/impl/Directory.cpp - src/ripple/ledger/impl/OpenView.cpp - src/ripple/ledger/impl/PaymentSandbox.cpp - src/ripple/ledger/impl/RawStateTable.cpp - src/ripple/ledger/impl/ReadView.cpp - src/ripple/ledger/impl/TxMeta.cpp - src/ripple/ledger/impl/View.cpp - #[===============================[ - nounity, main sources: - subdir: net - #]===============================] - src/ripple/net/impl/HTTPClient.cpp - src/ripple/net/impl/InfoSub.cpp - src/ripple/net/impl/RPCCall.cpp - src/ripple/net/impl/RPCErr.cpp - src/ripple/net/impl/RPCSub.cpp - src/ripple/net/impl/RegisterSSLCerts.cpp - src/ripple/net/impl/SSLHTTPDownloader.cpp - #[===============================[ - nounity, main sources: - subdir: nodestore - #]===============================] - src/ripple/nodestore/backend/MemoryFactory.cpp - src/ripple/nodestore/backend/NuDBFactory.cpp - src/ripple/nodestore/backend/NullFactory.cpp - src/ripple/nodestore/backend/RocksDBFactory.cpp - src/ripple/nodestore/impl/BatchWriter.cpp - src/ripple/nodestore/impl/Database.cpp - src/ripple/nodestore/impl/DatabaseNodeImp.cpp - src/ripple/nodestore/impl/DatabaseRotatingImp.cpp - src/ripple/nodestore/impl/DatabaseShardImp.cpp - src/ripple/nodestore/impl/DecodedBlob.cpp - src/ripple/nodestore/impl/DummyScheduler.cpp - src/ripple/nodestore/impl/EncodedBlob.cpp - src/ripple/nodestore/impl/ManagerImp.cpp - src/ripple/nodestore/impl/NodeObject.cpp - src/ripple/nodestore/impl/Shard.cpp - #[===============================[ - nounity, main sources: - subdir: overlay - #]===============================] - src/ripple/overlay/impl/Cluster.cpp - src/ripple/overlay/impl/ConnectAttempt.cpp - src/ripple/overlay/impl/Message.cpp - src/ripple/overlay/impl/OverlayImpl.cpp - src/ripple/overlay/impl/PeerImp.cpp - src/ripple/overlay/impl/PeerReservationTable.cpp - src/ripple/overlay/impl/PeerSet.cpp - src/ripple/overlay/impl/TMHello.cpp - src/ripple/overlay/impl/TrafficCount.cpp - #[===============================[ - nounity, main sources: - subdir: peerfinder - #]===============================] - src/ripple/peerfinder/impl/Bootcache.cpp - src/ripple/peerfinder/impl/Endpoint.cpp - src/ripple/peerfinder/impl/PeerfinderConfig.cpp - src/ripple/peerfinder/impl/PeerfinderManager.cpp - src/ripple/peerfinder/impl/SlotImp.cpp - src/ripple/peerfinder/impl/SourceStrings.cpp - #[===============================[ - nounity, main sources: - subdir: resource - #]===============================] - src/ripple/resource/impl/Charge.cpp - src/ripple/resource/impl/Consumer.cpp - src/ripple/resource/impl/Fees.cpp - src/ripple/resource/impl/ResourceManager.cpp - #[===============================[ - nounity, main sources: - subdir: rpc - #]===============================] - src/ripple/rpc/handlers/AccountChannels.cpp - src/ripple/rpc/handlers/AccountCurrenciesHandler.cpp - src/ripple/rpc/handlers/AccountInfo.cpp - src/ripple/rpc/handlers/AccountLines.cpp - src/ripple/rpc/handlers/AccountObjects.cpp - src/ripple/rpc/handlers/AccountOffers.cpp - src/ripple/rpc/handlers/AccountTx.cpp - src/ripple/rpc/handlers/AccountTxOld.cpp - src/ripple/rpc/handlers/AccountTxSwitch.cpp - src/ripple/rpc/handlers/BlackList.cpp - src/ripple/rpc/handlers/BookOffers.cpp - src/ripple/rpc/handlers/CanDelete.cpp - src/ripple/rpc/handlers/Connect.cpp - src/ripple/rpc/handlers/ConsensusInfo.cpp - src/ripple/rpc/handlers/CrawlShards.cpp - src/ripple/rpc/handlers/DepositAuthorized.cpp - src/ripple/rpc/handlers/DownloadShard.cpp - src/ripple/rpc/handlers/Feature1.cpp - src/ripple/rpc/handlers/Fee1.cpp - src/ripple/rpc/handlers/FetchInfo.cpp - src/ripple/rpc/handlers/GatewayBalances.cpp - src/ripple/rpc/handlers/GetCounts.cpp - src/ripple/rpc/handlers/LedgerAccept.cpp - src/ripple/rpc/handlers/LedgerCleanerHandler.cpp - src/ripple/rpc/handlers/LedgerClosed.cpp - src/ripple/rpc/handlers/LedgerCurrent.cpp - src/ripple/rpc/handlers/LedgerData.cpp - src/ripple/rpc/handlers/LedgerEntry.cpp - src/ripple/rpc/handlers/LedgerHandler.cpp - src/ripple/rpc/handlers/LedgerHeader.cpp - src/ripple/rpc/handlers/LedgerRequest.cpp - src/ripple/rpc/handlers/LogLevel.cpp - src/ripple/rpc/handlers/LogRotate.cpp - src/ripple/rpc/handlers/NoRippleCheck.cpp - src/ripple/rpc/handlers/OwnerInfo.cpp - src/ripple/rpc/handlers/PathFind.cpp - src/ripple/rpc/handlers/PayChanClaim.cpp - src/ripple/rpc/handlers/Peers.cpp - src/ripple/rpc/handlers/Ping.cpp - src/ripple/rpc/handlers/Print.cpp - src/ripple/rpc/handlers/Random.cpp - src/ripple/rpc/handlers/Reservations.cpp - src/ripple/rpc/handlers/RipplePathFind.cpp - src/ripple/rpc/handlers/ServerInfo.cpp - src/ripple/rpc/handlers/ServerState.cpp - src/ripple/rpc/handlers/SignFor.cpp - src/ripple/rpc/handlers/SignHandler.cpp - src/ripple/rpc/handlers/Stop.cpp - src/ripple/rpc/handlers/Submit.cpp - src/ripple/rpc/handlers/SubmitMultiSigned.cpp - src/ripple/rpc/handlers/Subscribe.cpp - src/ripple/rpc/handlers/TransactionEntry.cpp - src/ripple/rpc/handlers/Tx.cpp - src/ripple/rpc/handlers/TxHistory.cpp - src/ripple/rpc/handlers/UnlList.cpp - src/ripple/rpc/handlers/Unsubscribe.cpp - src/ripple/rpc/handlers/ValidationCreate.cpp - src/ripple/rpc/handlers/ValidatorListSites.cpp - src/ripple/rpc/handlers/Validators.cpp - src/ripple/rpc/handlers/WalletPropose.cpp - src/ripple/rpc/impl/DeliveredAmount.cpp - src/ripple/rpc/impl/Handler.cpp - src/ripple/rpc/impl/LegacyPathFind.cpp - src/ripple/rpc/impl/RPCHandler.cpp - src/ripple/rpc/impl/RPCHelpers.cpp - src/ripple/rpc/impl/Role.cpp - src/ripple/rpc/impl/ServerHandlerImp.cpp - src/ripple/rpc/impl/ShardArchiveHandler.cpp - src/ripple/rpc/impl/Status.cpp - src/ripple/rpc/impl/TransactionSign.cpp - #[===============================[ - nounity, main sources: - subdir: server - #]===============================] - src/ripple/server/impl/JSONRPCUtil.cpp - src/ripple/server/impl/Port.cpp - #[===============================[ - nounity, main sources: - subdir: shamap - #]===============================] - src/ripple/shamap/impl/SHAMap.cpp - src/ripple/shamap/impl/SHAMapDelta.cpp - src/ripple/shamap/impl/SHAMapItem.cpp - src/ripple/shamap/impl/SHAMapMissingNode.cpp - src/ripple/shamap/impl/SHAMapNodeID.cpp - src/ripple/shamap/impl/SHAMapSync.cpp - src/ripple/shamap/impl/SHAMapTreeNode.cpp - #[===============================[ - nounity, test sources: - subdir: app - #]===============================] - src/test/app/AccountTxPaging_test.cpp - src/test/app/AmendmentTable_test.cpp - src/test/app/Check_test.cpp - src/test/app/CrossingLimits_test.cpp - src/test/app/DeliverMin_test.cpp - src/test/app/DepositAuth_test.cpp - src/test/app/Discrepancy_test.cpp - src/test/app/Escrow_test.cpp - src/test/app/Flow_test.cpp - src/test/app/Freeze_test.cpp - src/test/app/HashRouter_test.cpp - src/test/app/LedgerHistory_test.cpp - src/test/app/LedgerLoad_test.cpp - src/test/app/LedgerReplay_test.cpp - src/test/app/LoadFeeTrack_test.cpp - src/test/app/Manifest_test.cpp - src/test/app/MultiSign_test.cpp - src/test/app/OfferStream_test.cpp - src/test/app/Offer_test.cpp - src/test/app/OversizeMeta_test.cpp - src/test/app/Path_test.cpp - src/test/app/PayChan_test.cpp - src/test/app/PayStrand_test.cpp - src/test/app/PseudoTx_test.cpp - src/test/app/RCLCensorshipDetector_test.cpp - src/test/app/RCLValidations_test.cpp - src/test/app/Regression_test.cpp - src/test/app/SHAMapStore_test.cpp - src/test/app/SetAuth_test.cpp - src/test/app/SetRegularKey_test.cpp - src/test/app/SetTrust_test.cpp - src/test/app/Taker_test.cpp - src/test/app/Ticket_test.cpp - src/test/app/Transaction_ordering_test.cpp - src/test/app/TrustAndBalance_test.cpp - src/test/app/TxQ_test.cpp - src/test/app/ValidatorKeys_test.cpp - src/test/app/ValidatorList_test.cpp - src/test/app/ValidatorSite_test.cpp - #[===============================[ - nounity, test sources: - subdir: basics - #]===============================] - src/test/basics/Buffer_test.cpp - src/test/basics/DetectCrash_test.cpp - src/test/basics/FileUtilities_test.cpp - src/test/basics/KeyCache_test.cpp - src/test/basics/PerfLog_test.cpp - src/test/basics/RangeSet_test.cpp - src/test/basics/Slice_test.cpp - src/test/basics/StringUtilities_test.cpp - src/test/basics/TaggedCache_test.cpp - src/test/basics/base64_test.cpp - src/test/basics/base_uint_test.cpp - src/test/basics/contract_test.cpp - src/test/basics/hardened_hash_test.cpp - src/test/basics/mulDiv_test.cpp - src/test/basics/qalloc_test.cpp - src/test/basics/tagged_integer_test.cpp - #[===============================[ - nounity, test sources: - subdir: beast - #]===============================] - src/test/beast/IPEndpoint_test.cpp - src/test/beast/LexicalCast_test.cpp - src/test/beast/SemanticVersion_test.cpp - src/test/beast/aged_associative_container_test.cpp - src/test/beast/beast_CurrentThreadName_test.cpp - src/test/beast/beast_Debug_test.cpp - src/test/beast/beast_Journal_test.cpp - src/test/beast/beast_PropertyStream_test.cpp - src/test/beast/beast_Zero_test.cpp - src/test/beast/beast_abstract_clock_test.cpp - src/test/beast/beast_asio_error_test.cpp - src/test/beast/beast_basic_seconds_clock_test.cpp - src/test/beast/beast_io_latency_probe_test.cpp - src/test/beast/define_print.cpp - #[===============================[ - nounity, test sources: - subdir: conditions - #]===============================] - src/test/conditions/PreimageSha256_test.cpp - #[===============================[ - nounity, test sources: - subdir: consensus - #]===============================] - src/test/consensus/ByzantineFailureSim_test.cpp - src/test/consensus/Consensus_test.cpp - src/test/consensus/DistributedValidatorsSim_test.cpp - src/test/consensus/LedgerTiming_test.cpp - src/test/consensus/LedgerTrie_test.cpp - src/test/consensus/ScaleFreeSim_test.cpp - src/test/consensus/Validations_test.cpp - #[===============================[ - nounity, test sources: - subdir: core - #]===============================] - src/test/core/ClosureCounter_test.cpp - src/test/core/Config_test.cpp - src/test/core/Coroutine_test.cpp - src/test/core/CryptoPRNG_test.cpp - src/test/core/JobQueue_test.cpp - src/test/core/SociDB_test.cpp - src/test/core/Stoppable_test.cpp - src/test/core/Workers_test.cpp - #[===============================[ - nounity, test sources: - subdir: crypto - #]===============================] - src/test/crypto/Openssl_test.cpp - #[===============================[ - nounity, test sources: - subdir: csf - #]===============================] - src/test/csf/BasicNetwork_test.cpp - src/test/csf/Digraph_test.cpp - src/test/csf/Histogram_test.cpp - src/test/csf/Scheduler_test.cpp - src/test/csf/impl/Sim.cpp - src/test/csf/impl/ledgers.cpp - #[===============================[ - nounity, test sources: - subdir: json - #]===============================] - src/test/json/Object_test.cpp - src/test/json/Output_test.cpp - src/test/json/Writer_test.cpp - src/test/json/json_value_test.cpp - #[===============================[ - nounity, test sources: - subdir: jtx - #]===============================] - src/test/jtx/Env_test.cpp - src/test/jtx/WSClient_test.cpp - src/test/jtx/impl/Account.cpp - src/test/jtx/impl/Env.cpp - src/test/jtx/impl/JSONRPCClient.cpp - src/test/jtx/impl/ManualTimeKeeper.cpp - src/test/jtx/impl/WSClient.cpp - src/test/jtx/impl/amount.cpp - src/test/jtx/impl/balance.cpp - src/test/jtx/impl/check.cpp - src/test/jtx/impl/delivermin.cpp - src/test/jtx/impl/deposit.cpp - src/test/jtx/impl/envconfig.cpp - src/test/jtx/impl/fee.cpp - src/test/jtx/impl/flags.cpp - src/test/jtx/impl/jtx_json.cpp - src/test/jtx/impl/memo.cpp - src/test/jtx/impl/multisign.cpp - src/test/jtx/impl/offer.cpp - src/test/jtx/impl/owners.cpp - src/test/jtx/impl/paths.cpp - src/test/jtx/impl/pay.cpp - src/test/jtx/impl/quality2.cpp - src/test/jtx/impl/rate.cpp - src/test/jtx/impl/regkey.cpp - src/test/jtx/impl/sendmax.cpp - src/test/jtx/impl/seq.cpp - src/test/jtx/impl/sig.cpp - src/test/jtx/impl/tag.cpp - src/test/jtx/impl/ticket.cpp - src/test/jtx/impl/trust.cpp - src/test/jtx/impl/txflags.cpp - src/test/jtx/impl/utility.cpp - #[===============================[ - nounity, test sources: - subdir: ledger - #]===============================] - src/test/ledger/BookDirs_test.cpp - src/test/ledger/CashDiff_test.cpp - src/test/ledger/Directory_test.cpp - src/test/ledger/Invariants_test.cpp - src/test/ledger/PaymentSandbox_test.cpp - src/test/ledger/PendingSaves_test.cpp - src/test/ledger/SHAMapV2_test.cpp - src/test/ledger/SkipList_test.cpp - src/test/ledger/View_test.cpp - #[===============================[ - nounity, test sources: - subdir: net - #]===============================] - src/test/net/SSLHTTPDownloader_test.cpp - #[===============================[ - nounity, test sources: - subdir: nodestore - #]===============================] - src/test/nodestore/Backend_test.cpp - src/test/nodestore/Basics_test.cpp - src/test/nodestore/Database_test.cpp - src/test/nodestore/Timing_test.cpp - src/test/nodestore/import_test.cpp - src/test/nodestore/varint_test.cpp - #[===============================[ - nounity, test sources: - subdir: overlay - #]===============================] - src/test/overlay/TMHello_test.cpp - src/test/overlay/cluster_test.cpp - src/test/overlay/short_read_test.cpp - #[===============================[ - nounity, test sources: - subdir: peerfinder - #]===============================] - src/test/peerfinder/Livecache_test.cpp - src/test/peerfinder/PeerFinder_test.cpp - #[===============================[ - nounity, test sources: - subdir: protocol - #]===============================] - src/test/protocol/BuildInfo_test.cpp - src/test/protocol/IOUAmount_test.cpp - src/test/protocol/InnerObjectFormats_test.cpp - src/test/protocol/Issue_test.cpp - src/test/protocol/PublicKey_test.cpp - src/test/protocol/Quality_test.cpp - src/test/protocol/STAccount_test.cpp - src/test/protocol/STAmount_test.cpp - src/test/protocol/STObject_test.cpp - src/test/protocol/STTx_test.cpp - src/test/protocol/STValidation_test.cpp - src/test/protocol/SecretKey_test.cpp - src/test/protocol/Seed_test.cpp - src/test/protocol/TER_test.cpp - src/test/protocol/XRPAmount_test.cpp - src/test/protocol/digest_test.cpp - src/test/protocol/types_test.cpp - #[===============================[ - nounity, test sources: - subdir: resource - #]===============================] - src/test/resource/Logic_test.cpp - #[===============================[ - nounity, test sources: - subdir: rpc - #]===============================] - src/test/rpc/AccountCurrencies_test.cpp - src/test/rpc/AccountInfo_test.cpp - src/test/rpc/AccountLinesRPC_test.cpp - src/test/rpc/AccountObjects_test.cpp - src/test/rpc/AccountOffers_test.cpp - src/test/rpc/AccountSet_test.cpp - src/test/rpc/AccountTx_test.cpp - src/test/rpc/AmendmentBlocked_test.cpp - src/test/rpc/Book_test.cpp - src/test/rpc/DepositAuthorized_test.cpp - src/test/rpc/DeliveredAmount_test.cpp - src/test/rpc/Feature_test.cpp - src/test/rpc/GatewayBalances_test.cpp - src/test/rpc/GetCounts_test.cpp - src/test/rpc/JSONRPC_test.cpp - src/test/rpc/KeyGeneration_test.cpp - src/test/rpc/LedgerClosed_test.cpp - src/test/rpc/LedgerData_test.cpp - src/test/rpc/LedgerRPC_test.cpp - src/test/rpc/LedgerRequestRPC_test.cpp - src/test/rpc/NoRippleCheck_test.cpp - src/test/rpc/NoRipple_test.cpp - src/test/rpc/OwnerInfo_test.cpp - src/test/rpc/Peers_test.cpp - src/test/rpc/RPCCall_test.cpp - src/test/rpc/RPCOverload_test.cpp - src/test/rpc/RobustTransaction_test.cpp - src/test/rpc/ServerInfo_test.cpp - src/test/rpc/Status_test.cpp - src/test/rpc/Subscribe_test.cpp - src/test/rpc/TransactionEntry_test.cpp - src/test/rpc/TransactionHistory_test.cpp - src/test/rpc/ValidatorRPC_test.cpp - #[===============================[ - nounity, test sources: - subdir: server - #]===============================] - src/test/server/ServerStatus_test.cpp - src/test/server/Server_test.cpp - #[===============================[ - nounity, test sources: - subdir: shamap - #]===============================] - src/test/shamap/FetchPack_test.cpp - src/test/shamap/SHAMapSync_test.cpp - src/test/shamap/SHAMap_test.cpp - #[===============================[ - nounity, test sources: - subdir: unit_test - #]===============================] - src/test/unit_test/multi_runner.cpp) -endif () -target_link_libraries (rippled - Ripple::boost - Ripple::opts - Ripple::libs - Ripple::xrpl_core) -exclude_if_included (rippled) -# define a macro for tests that might need to -# be exluded or run differently in CI environment -if (is_ci) - target_compile_definitions(rippled PRIVATE RIPPLED_RUNNING_IN_CI) -endif () - - -#[===================================================================[ - install stuff -#]===================================================================] - -install ( - TARGETS - secp256k1 - ed25519-donna - common - opts - ripple_syslibs - ripple_boost - xrpl_core - EXPORT RippleExports - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin - INCLUDES DESTINATION include) -install (EXPORT RippleExports - FILE RippleTargets.cmake - NAMESPACE Ripple:: - DESTINATION lib/cmake/ripple) -include (CMakePackageConfigHelpers) -write_basic_package_version_file ( - RippleConfigVersion.cmake - VERSION ${rippled_version} - COMPATIBILITY SameMajorVersion) - -if (is_root_project) - install (TARGETS rippled RUNTIME DESTINATION bin) - set_target_properties(rippled PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON) - install ( - FILES - ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/RippleConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/RippleConfigVersion.cmake - DESTINATION lib/cmake/ripple) - # sample configs should not overwrite existing files - # install if-not-exists workaround as suggested by - # https://cmake.org/Bug/view.php?id=12646 - install(CODE " - macro (copy_if_not_exists SRC DEST NEWNAME) - if (NOT EXISTS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") - file (INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/\${DEST}\" FILES \"\${SRC}\" RENAME \"\${NEWNAME}\") - else () - message (\"-- Skipping : \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") - endif () - endmacro() - copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/rippled-example.cfg\" etc rippled.cfg) - copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt\" etc validators.txt) - ") -endif () - -#[===================================================================[ - coverage report target -#]===================================================================] - -if (coverage) - if (is_clang) - if (APPLE) - execute_process (COMMAND xcrun -f llvm-profdata - OUTPUT_VARIABLE LLVM_PROFDATA - OUTPUT_STRIP_TRAILING_WHITESPACE) - else () - find_program (LLVM_PROFDATA llvm-profdata) - endif () - if (NOT LLVM_PROFDATA) - message (WARNING "unable to find llvm-profdata - skipping coverage_report target") - endif () - - if (APPLE) - execute_process (COMMAND xcrun -f llvm-cov - OUTPUT_VARIABLE LLVM_COV - OUTPUT_STRIP_TRAILING_WHITESPACE) - else () - find_program (LLVM_COV llvm-cov) - endif () - if (NOT LLVM_COV) - message (WARNING "unable to find llvm-cov - skipping coverage_report target") - endif () - - set (extract_pattern "") - if (coverage_core_only) - set (extract_pattern "${CMAKE_SOURCE_DIR}/src/ripple/") - endif () - - if (LLVM_COV AND LLVM_PROFDATA) - add_custom_target (coverage_report - USES_TERMINAL - COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage - results will be in ${CMAKE_BINARY_DIR}/coverage/index.html." - COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests." - COMMAND rippled --unittest$<$:=${coverage_test}> --quiet --unittest-log - COMMAND ${LLVM_PROFDATA} - merge -sparse default.profraw -o rip.profdata - COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:" - COMMAND ${LLVM_COV} - report -instr-profile=rip.profdata - $ ${extract_pattern} - # generate html report - COMMAND ${LLVM_COV} - show -format=html -output-dir=${CMAKE_BINARY_DIR}/coverage - -instr-profile=rip.profdata - $ ${extract_pattern} - BYPRODUCTS coverage/index.html) - endif () - elseif (is_gcc) - find_program (LCOV lcov) - if (NOT LCOV) - message (WARNING "unable to find lcov - skipping coverage_report target") - endif () - - find_program (GENHTML genhtml) - if (NOT GENHTML) - message (WARNING "unable to find genhtml - skipping coverage_report target") - endif () - - set (extract_pattern "*") - if (coverage_core_only) - set (extract_pattern "*/src/ripple/*") - endif () - - if (LCOV AND GENHTML) - add_custom_target (coverage_report - USES_TERMINAL - COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage- results will be in ${CMAKE_BINARY_DIR}/coverage/index.html." - # create baseline info file - COMMAND ${LCOV} - --no-external -d "${CMAKE_SOURCE_DIR}" -c -d . -i -o baseline.info - | grep -v "ignoring data for external file" - # run tests - COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests for coverage report." - COMMAND rippled --unittest$<$:=${coverage_test}> --quiet --unittest-log - # Create test coverage data file - COMMAND ${LCOV} - --no-external -d "${CMAKE_SOURCE_DIR}" -c -d . -o tests.info - | grep -v "ignoring data for external file" - # Combine baseline and test coverage data - COMMAND ${LCOV} - -a baseline.info -a tests.info -o lcov-all.info - # extract our files - COMMAND ${LCOV} - -e lcov-all.info "${extract_pattern}" -o lcov.info - COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:" - COMMAND ${LCOV} --summary lcov.info - # generate HTML report - COMMAND ${GENHTML} - -o ${CMAKE_BINARY_DIR}/coverage lcov.info - BYPRODUCTS coverage/index.html) - endif () - endif () -endif () - -#[===================================================================[ - multiconfig misc -#]===================================================================] - -if (is_multiconfig) - # This code finds all source files in the src subdirectory for inclusion - # in the IDE file tree as non-compiled sources. Since this file list will - # have some overlap with files we have already added to our targets to - # be compiled, we explicitly remove any of these target source files from - # this list. - file (GLOB_RECURSE all_sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - CONFIGURE_DEPENDS - src/*.* Builds/*.md docs/*.md src/*.md Builds/*.cmake) - file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS - *.md) - LIST(APPEND all_sources ${md_files}) - foreach (_target secp256k1 ed25519-donna pbufs xrpl_core rippled) - get_target_property (_type ${_target} TYPE) - if(_type STREQUAL "INTERFACE_LIBRARY") - continue() - endif() - get_target_property (_src ${_target} SOURCES) - list (REMOVE_ITEM all_sources ${_src}) - endforeach () - target_sources (rippled PRIVATE ${all_sources}) - set_property ( - SOURCE ${all_sources} - APPEND - PROPERTY HEADER_FILE_ONLY true) - if (MSVC) - set_property( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - PROPERTY VS_STARTUP_PROJECT rippled) - endif () - - group_sources(src) - group_sources(docs) - group_sources(Builds) -endif () - -#[===================================================================[ - docs target (optional) -#]===================================================================] - -find_package (Doxygen) -if (TARGET Doxygen::doxygen) - set (doc_srcs docs/source.dox) - file (GLOB_RECURSE other_docs docs/*.md) - list (APPEND doc_srcs "${other_docs}") - # read the source config and make a modified one - # that points the output files to our build directory - file (READ "${CMAKE_CURRENT_SOURCE_DIR}/docs/source.dox" dox_content) - string (REGEX REPLACE "[\t ]*OUTPUT_DIRECTORY[\t ]*=(.*)" - "OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}\n\\1" - new_config "${dox_content}") - file (WRITE "${CMAKE_BINARY_DIR}/source.dox" "${new_config}") - add_custom_target (docs - COMMAND "${DOXYGEN_EXECUTABLE}" "${CMAKE_BINARY_DIR}/source.dox" - BYPRODUCTS "${CMAKE_BINARY_DIR}/html_doc/index.html" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/docs" - SOURCES "${doc_srcs}") - if (is_multiconfig) - set_property ( - SOURCE ${doc_srcs} - APPEND - PROPERTY HEADER_FILE_ONLY - true) - endif () -else () - message (STATUS "doxygen executable not found -- skipping docs target") -endif () - -if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.11) - git_branch (current_branch) - # default to tracking VK develop branch unless we are on master/release - if (NOT (current_branch STREQUAL "master" OR current_branch STREQUAL "release")) - set (current_branch "develop") - endif () - message (STATUS "tracking ValidatorKeys branch: ${current_branch}") - - FetchContent_Declare ( - validator_keys_src - GIT_REPOSITORY https://github.com/ripple/validator-keys-tool.git - GIT_TAG "${current_branch}" - ) - FetchContent_GetProperties (validator_keys_src) - if (NOT validator_keys_src_POPULATED) - message (STATUS "Pausing to download ValidatorKeys...") - FetchContent_Populate (validator_keys_src) - endif () - add_subdirectory (${validator_keys_src_SOURCE_DIR} ${CMAKE_BINARY_DIR}/validator-keys) -endif () +include(RippledCompiler) +include(RippledInterface) + +### + +include(deps/Boost) +include(deps/OpenSSL) +include(deps/Secp256k1) +include(deps/Ed25519-donna) +include(deps/Lz4) +include(deps/Libarchive) +include(deps/Sqlite) +include(deps/Soci) +include(deps/Snappy) +include(deps/Rocksdb) +include(deps/Nudb) +include(deps/Protobuf) + +### + +include(RippledCore) +include(RippledInstall) +include(RippledCov) +include(RippledMultiConfig) +include(RippledDocs) +include(RippledValidatorKeys)