#[===================================================================[ Exported targets. #]===================================================================] include(target_protobuf_sources) add_library(xrpl.libpb) target_protobuf_sources(xrpl.libpb xrpl/proto LANGUAGE cpp IMPORT_DIRS include/xrpl/proto PROTOS include/xrpl/proto/xrpl.proto) file(GLOB_RECURSE protos "include/xrpl/proto/org/*.proto") target_protobuf_sources(xrpl.libpb xrpl/proto LANGUAGE cpp IMPORT_DIRS include/xrpl/proto PROTOS "${protos}") target_protobuf_sources( xrpl.libpb xrpl/proto LANGUAGE grpc IMPORT_DIRS include/xrpl/proto PROTOS "${protos}" PLUGIN protoc-gen-grpc=$ GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc) target_compile_options( xrpl.libpb PUBLIC $<$:-wd4996> $<$: --system-header-prefix="google/protobuf" -Wno-deprecated-dynamic-exception-spec > PRIVATE $<$:-wd4065> $<$>:-Wno-deprecated-declarations>) target_link_libraries(xrpl.libpb PUBLIC protobuf::libprotobuf gRPC::grpc++) # TODO: Clean up the number of library targets later. add_library(xrpl.imports.main INTERFACE) target_link_libraries( xrpl.imports.main INTERFACE absl::random_random date::date ed25519::ed25519 LibArchive::LibArchive OpenSSL::Crypto Xrpl::boost Xrpl::libs Xrpl::opts Xrpl::syslibs secp256k1::secp256k1 xrpl.libpb xxHash::xxhash $<$:antithesis-sdk-cpp>) include(add_module) include(target_link_modules) # Level 01 add_module(xrpl beast) target_link_libraries(xrpl.libxrpl.beast PUBLIC xrpl.imports.main) # Level 02 add_module(xrpl basics) target_link_libraries(xrpl.libxrpl.basics PUBLIC xrpl.libxrpl.beast) # Level 03 add_module(xrpl json) target_link_libraries(xrpl.libxrpl.json PUBLIC xrpl.libxrpl.basics) add_module(xrpl crypto) target_link_libraries(xrpl.libxrpl.crypto PUBLIC xrpl.libxrpl.basics) # Level 04 add_module(xrpl protocol) target_link_libraries(xrpl.libxrpl.protocol PUBLIC xrpl.libxrpl.crypto xrpl.libxrpl.json) # Level 05 add_module(xrpl core) target_link_libraries(xrpl.libxrpl.core PUBLIC xrpl.libxrpl.basics xrpl.libxrpl.json xrpl.libxrpl.protocol) # Level 06 add_module(xrpl resource) target_link_libraries(xrpl.libxrpl.resource PUBLIC xrpl.libxrpl.protocol) # Level 07 add_module(xrpl net) target_link_libraries(xrpl.libxrpl.net PUBLIC xrpl.libxrpl.basics xrpl.libxrpl.json xrpl.libxrpl.protocol xrpl.libxrpl.resource) add_module(xrpl server) target_link_libraries(xrpl.libxrpl.server PUBLIC xrpl.libxrpl.protocol) add_module(xrpl nodestore) target_link_libraries(xrpl.libxrpl.nodestore PUBLIC xrpl.libxrpl.basics xrpl.libxrpl.json xrpl.libxrpl.protocol) add_module(xrpl shamap) target_link_libraries(xrpl.libxrpl.shamap PUBLIC xrpl.libxrpl.basics xrpl.libxrpl.crypto xrpl.libxrpl.protocol xrpl.libxrpl.nodestore) add_module(xrpl ledger) target_link_libraries(xrpl.libxrpl.ledger PUBLIC xrpl.libxrpl.basics xrpl.libxrpl.json xrpl.libxrpl.protocol) add_library(xrpl.libxrpl) set_target_properties(xrpl.libxrpl PROPERTIES OUTPUT_NAME xrpl) add_library(xrpl::libxrpl ALIAS xrpl.libxrpl) file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/libxrpl/*.cpp") target_sources(xrpl.libxrpl PRIVATE ${sources}) target_link_modules( xrpl PUBLIC basics beast core crypto json protocol resource server nodestore shamap net ledger) # All headers in libxrpl are in modules. # Uncomment this stanza if you have not yet moved new headers into a module. # target_include_directories(xrpl.libxrpl # PRIVATE # $ # PUBLIC # $ # $) if (xrpld) add_executable(xrpld) if (tests) target_compile_definitions(xrpld PUBLIC ENABLE_TESTS) target_compile_definitions(xrpld PRIVATE UNIT_TEST_REFERENCE_FEE=${UNIT_TEST_REFERENCE_FEE}) endif () target_include_directories(xrpld PRIVATE $) file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/xrpld/*.cpp") target_sources(xrpld PRIVATE ${sources}) if (tests) file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/test/*.cpp") target_sources(xrpld PRIVATE ${sources}) endif () target_link_libraries(xrpld Xrpl::boost Xrpl::opts Xrpl::libs xrpl.libxrpl) exclude_if_included(xrpld) # define a macro for tests that might need to # be excluded or run differently in CI environment if (is_ci) target_compile_definitions(xrpld PRIVATE XRPL_RUNNING_IN_CI) endif () if (voidstar) target_compile_options(xrpld PRIVATE -fsanitize-coverage=trace-pc-guard) # xrpld requires access to antithesis-sdk-cpp implementation file # antithesis_instrumentation.h, which is not exported as INTERFACE target_include_directories(xrpld PRIVATE ${CMAKE_SOURCE_DIR}/external/antithesis-sdk) endif () endif ()