fdb_find_sources(FDBCLIENT_SRCS) list(APPEND FDBCLIENT_SRCS sha1/SHA1.cpp) message(STATUS "FDB version is ${FDB_VERSION}") message(STATUS "FDB package name is ${FDB_PACKAGE_NAME}") set(options_srcs ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g.cpp) make_directory(${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/) vexillographer_compile(TARGET fdboptions_vex LANG cpp OUT ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g.h ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g.cpp) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/FDBOptions.g.h DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g.h COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/FDBOptions.g.h ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/FDBOptions.g.h) vexillographer_compile(TARGET fdboptions_c LANG c OUT ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/fdb_c_options.g.h OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/fdb_c_options.g.h) add_custom_target(fdboptions DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/FDBOptions.g.h) add_dependencies(fdboptions fdboptions_c) ################################################################################ # Build information ################################################################################ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/BuildFlags.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/BuildFlags.h) set(BUILD_AZURE_BACKUP OFF CACHE BOOL "Build Azure backup client") if(BUILD_AZURE_BACKUP) add_compile_definitions(BUILD_AZURE_BACKUP) set(FDBCLIENT_SRCS ${FDBCLIENT_SRCS} azure_backup/BackupContainerAzureBlobStore.actor.cpp) configure_file(azurestorage.cmake azurestorage-download/CMakeLists.txt) execute_process( COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . RESULT_VARIABLE results WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/azurestorage-download ) if(results) message(FATAL_ERROR "Configuration step for AzureStorage has Failed. ${results}") endif() execute_process( COMMAND ${CMAKE_COMMAND} --build . --config Release RESULT_VARIABLE results WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/azurestorage-download ) if(results) message(FATAL_ERROR "Build step for AzureStorage has Failed. ${results}") endif() add_subdirectory( ${CMAKE_CURRENT_BINARY_DIR}/azurestorage-src ${CMAKE_CURRENT_BINARY_DIR}/azurestorage-build ) endif() if(WITH_AWS_BACKUP) add_compile_definitions(WITH_AWS_BACKUP) include(awssdk) endif() add_flow_target(STATIC_LIBRARY NAME fdbclient SRCS ${FDBCLIENT_SRCS} ADDL_SRCS ${options_srcs}) target_include_directories(fdbclient PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_BINARY_DIR}/include") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/versions.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/fdbclient/versions.h) add_dependencies(fdbclient fdboptions) target_link_libraries(fdbclient PUBLIC fdbrpc msgpack PRIVATE rapidxml) add_flow_target(EXECUTABLE NAME s3client SRCS S3Client_cli.actor.cpp) target_include_directories(s3client PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_BINARY_DIR}/include" "${CMAKE_SOURCE_DIR}/flow/include" "${CMAKE_BINARY_DIR}/flow/include" "${CMAKE_SOURCE_DIR}/fdbrpc/include" "${CMAKE_BINARY_DIR}/fdbrpc/include" "${CMAKE_SOURCE_DIR}/contrib/md5/include" "${CMAKE_SOURCE_DIR}/contrib/libb64/include" "/opt/boost_1_86_0_clang/include" ) target_link_libraries(s3client PRIVATE fdbclient fdbrpc flow msgpack md5 libb64 stacktrace fmt crc32 eio rapidxml boost_target boost_target_program_options ) if(UNIX AND NOT APPLE) target_link_libraries(s3client PRIVATE folly_memcpy) endif() if(${COROUTINE_IMPL} STREQUAL libcoro) target_link_libraries(s3client PRIVATE coro) endif() add_dependencies(s3client fdboptions) # Setup the Swift sources in FDBClient. if(WITH_SWIFT) include(FindSwiftLibs) add_library(fdbclient_swift STATIC notified_support.swift ) target_include_directories(fdbclient_swift PUBLIC "${CMAKE_BINARY_DIR}/flow/include" "${CMAKE_BINARY_DIR}/flow/" "${CMAKE_BINARY_DIR}/fdbclient/include" "${CMAKE_SOURCE_DIR}/fdbrpc/include" "${CMAKE_BINARY_DIR}/fdbrpc/include" "${CMAKE_SOURCE_DIR}/contrib/md5/include" "${CMAKE_SOURCE_DIR}/contrib/libb64/include" "${CMAKE_SOURCE_DIR}/contrib/sqlite" "${Boost_DIR}/../../../include" "${msgpack_DIR}/include" ) # Generate the module map for FDBClient. include(GenerateModulemap) set(FDBCLIENT_BINARY_DIR "${CMAKE_BINARY_DIR}/fdbclient") generate_modulemap("${CMAKE_BINARY_DIR}/fdbclient/include" "FDBClient" fdbclient) # TODO: the TBD validation skip is because of swift_job_run_generic, though it seems weird why we need to do that? target_compile_options(fdbclient_swift PRIVATE "$<$:SHELL:-Xcc -std=c++20 -Xfrontend -validate-tbd-against-ir=none -Xcc -DNO_INTELLISENSE -Xcc -ivfsoverlay${CMAKE_BINARY_DIR}/flow/include/headeroverlay.yaml -Xcc -ivfsoverlay${CMAKE_BINARY_DIR}/fdbclient/include/headeroverlay.yaml -Xcc -ivfsoverlay${CMAKE_BINARY_DIR}/fdbclient/include/headeroverlay.yaml>") add_dependencies(fdbclient_swift flow_swift fdbclient_actors fdbrpc_actors fdboptions) # This does not work! (see rdar://99107402) # target_link_libraries(flow PRIVATE flow_swift) add_dependencies(fdbclient fdbclient_swift) target_link_options(fdbclient_swift PUBLIC "$") target_link_options(fdbclient PRIVATE "$") target_link_options(fdbclient PRIVATE "$") endif() # Create a separate fdbclient library with sampling enabled. This lets # fdbserver retain sampling functionality in client code while disabling # sampling for pure clients. add_flow_target(STATIC_LIBRARY NAME fdbclient_sampling SRCS ${FDBCLIENT_SRCS} ADDL_SRCS ${options_srcs}) target_include_directories(fdbclient_sampling PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" "${CMAKE_CURRENT_BINARY_DIR}/include") add_dependencies(fdbclient_sampling fdboptions) target_link_libraries(fdbclient_sampling PUBLIC fdbrpc_sampling msgpack PRIVATE rapidxml) target_compile_definitions(fdbclient_sampling PRIVATE -DENABLE_SAMPLING) if(WIN32) add_dependencies(fdbclient_sampling_actors fdbclient_actors) endif() add_flow_target(LINK_TEST NAME fdbclientlinktest SRCS LinkTest.cpp) target_link_libraries(fdbclientlinktest PRIVATE fdbclient rapidxml) # re-link rapidxml due to private link interface if(BUILD_AZURE_BACKUP) target_link_libraries(fdbclient PRIVATE curl azure-storage-lite) target_link_libraries(fdbclient_sampling PRIVATE curl azure-storage-lite) endif() if(WITH_AWS_BACKUP) target_link_libraries(fdbclient PUBLIC awssdk_target) target_link_libraries(fdbclient_sampling PUBLIC awssdk_target) endif() if (NOT WIN32 AND NOT OPEN_FOR_IDE) enable_testing() add_test(NAME s3client_test COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tests/s3client_test.sh ${CMAKE_BINARY_DIR}) add_test(NAME bulkload_test COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tests/bulkload_test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) endif()