diff --git a/native/cpp/CommonCpp/grpc/CMakeLists.txt b/native/cpp/CommonCpp/grpc/CMakeLists.txt index ac0a23fdd..32da4299e 100644 --- a/native/cpp/CommonCpp/grpc/CMakeLists.txt +++ b/native/cpp/CommonCpp/grpc/CMakeLists.txt @@ -1,68 +1,68 @@ project(grpc-comm) cmake_minimum_required(VERSION 3.4) include(GNUInstallDirs) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) set(CMAKE_CXX_STANDARD 14) add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../../../../shared/protos" "${CMAKE_CURRENT_BINARY_DIR}/protos" ) set(CLIENT_HDRS "Client.h" "ClientGetReadReactor.h" "GRPCStreamHostObject.h" ) set(CLIENT_SRCS "Client.cpp" "ClientGetReadReactor.cpp" "GRPCStreamHostObject.cpp" ) add_library(comm-client ${CLIENT_HDRS} ${CLIENT_SRCS} ) target_link_libraries(comm-client gRPC::grpc++ protobuf::libprotobuf comm-tunnelbroker-grpc ) target_include_directories(comm-client PUBLIC $ $ $ $ # HACK: add complete cmake support to react-native? PRIVATE "../../../node_modules/react-native/ReactCommon/callinvoker" "../../../node_modules/react-native/ReactCommon/jsi" ) install(TARGETS comm-client EXPORT comm-export RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT comm-client LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT comm-client ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT comm-client ) install(FILES ${CLIENT_HDRS} DESTINATION include/grpc) # For development purposes, able to reference build directory export(TARGETS comm-client NAMESPACE comm:: FILE ${CMAKE_CURRENT_BINARY_DIR}/cmake/comm/comm-grpc-client-targets.cmake ) # For installation install(EXPORT comm-export FILE comm-grpc-targets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/comm-grpc NAMESPACE comm-grpc:: ) diff --git a/services/backup/CMakeLists.txt b/services/backup/CMakeLists.txt index fceb57301..dc11458f1 100644 --- a/services/backup/CMakeLists.txt +++ b/services/backup/CMakeLists.txt @@ -1,138 +1,138 @@ PROJECT(backup CXX) cmake_minimum_required(VERSION 3.16) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_CXX_STANDARD 17) # For C++17 on MacOS, we must set minimum target to 10.14+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14) set(BUILD_TESTING OFF CACHE BOOL "Turn off tests" FORCE) set(WITH_GTEST "Use Google Test" OFF) find_package(glog REQUIRED) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) find_package(Folly REQUIRED) find_package(AWSSDK REQUIRED COMPONENTS core dynamodb) find_package(Boost 1.40 COMPONENTS program_options context filesystem regex system thread REQUIRED ) # Rust integration find_package(Corrosion REQUIRED) if(${CMAKE_CURRENT_SOURCE_DIR} MATCHES "^\/transferred.*") # Inside the docker build contex set(_proto_path "grpc") include(cmake-components/corrosion-cxx.cmake) else() # Inside repo set(_proto_path "../../shared/protos") include(../../shared/cmake/corrosion-cxx.cmake) endif() # Shared Comm protos add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${_proto_path} ${CMAKE_CURRENT_BINARY_DIR}/protos EXCLUDE_FROM_ALL ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lib/src ${CMAKE_CURRENT_BINARY_DIR}/lib/src EXCLUDE_FROM_ALL ) file(GLOB_RECURSE SOURCE_CODE "./src/*.cpp") # SERVER add_executable( backup ${GENERATED_CODE} ${FOLLY_SOURCES} ${SOURCE_CODE} ) add_library_rust(PATH blob_client NAMESPACE backup) target_include_directories( backup PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/DatabaseEntities ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors/server ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors/server/base-reactors ${Boost_INCLUDE_DIR} ) set( LIBS ${GRPC_LIBS} ${AWSSDK_LINK_LIBRARIES} ${Boost_LIBRARIES} glog::glog Folly::folly gRPC::grpc++ comm-blob-grpc comm-backup-grpc comm-services-common comm-server-base-reactors backup::blob_client ) target_link_libraries( backup ${LIBS} ) install( TARGETS backup RUNTIME DESTINATION bin/ ) # TEST if ($ENV{COMM_TEST_SERVICES} MATCHES 1) file(GLOB TEST_CODE "./test/*.cpp") list(FILTER SOURCE_CODE EXCLUDE REGEX "./src/server.cpp") enable_testing() find_package(GTest REQUIRED) include_directories( ${GTEST_INCLUDE_DIR} ./test ) add_executable( runTests ${GENERATED_CODE} ${FOLLY_SOURCES} ${SOURCE_CODE} ${TEST_CODE} ) target_link_libraries( runTests ${LIBS} gtest gtest_main ) add_test( NAME runTests COMMAND runTests ) endif() diff --git a/services/blob/CMakeLists.txt b/services/blob/CMakeLists.txt index 620f0230e..9b0b0bc91 100644 --- a/services/blob/CMakeLists.txt +++ b/services/blob/CMakeLists.txt @@ -1,147 +1,147 @@ PROJECT(blob C CXX) cmake_minimum_required(VERSION 3.16) set(CMAKE_CXX_STANDARD 14) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_CXX_STANDARD 17) set(BUILD_TESTING OFF CACHE BOOL "Turn off tests" FORCE) set(WITH_GTEST "Use Google Test" OFF) # FIND LIBS find_package(glog REQUIRED) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) find_package(Folly REQUIRED) find_package(AWSSDK REQUIRED COMPONENTS s3 core dynamodb) find_package(Boost 1.40 COMPONENTS program_options filesystem context regex system thread REQUIRE ) find_package(OpenSSL REQUIRED) find_package(double-conversion REQUIRED) if(${CMAKE_CURRENT_SOURCE_DIR} MATCHES "^\/transferred.*") # Inside the docker build contex set(_proto_path "grpc") else() # Inside repo set(_proto_path "../../shared/protos") endif() # Shared Comm protos add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${_proto_path} ${CMAKE_CURRENT_BINARY_DIR}/protos EXCLUDE_FROM_ALL ) # Reference native/cpp projects add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lib/src ${CMAKE_CURRENT_BINARY_DIR}/common # CMake's build directory EXCLUDE_FROM_ALL # Don't build everything, just what we need ) # FIND FILES file(GLOB DOUBLE_CONVERSION_SOURCES "./lib/double-conversion/double-conversion/*.cc" ) file(GLOB COMMON_CODE "${CMAKE_CURRENT_SOURCE_DIR}/../lib/src/*.cpp") file(GLOB_RECURSE SOURCE_CODE "./src/*.cpp") # SERVER add_executable( blob ${GENERATED_CODE} ${DOUBLE_CONVERSION_SOURCES} ${FOLLY_SOURCES} ${SOURCE_CODE} ${COMMON_CODE} ) target_include_directories( blob PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/server-base-reactors ${CMAKE_CURRENT_SOURCE_DIR}/src/DatabaseEntities ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors/ ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors/server ${CMAKE_CURRENT_SOURCE_DIR}/src/Reactors/server/base-reactors # Ideally, we would add comm-services-common as a # target link library, however, aws-sdk seems to not be able # to be linked transitively ${CMAKE_CURRENT_SOURCE_DIR}/../lib/src ${Boost_INCLUDE_DIR} ) set( LIBS ${GRPC_LIBS} ${AWSSDK_LINK_LIBRARIES} ${Boost_LIBRARIES} OpenSSL::SSL glog::glog gRPC::grpc++ double-conversion::double-conversion Folly::folly comm-blob-grpc comm-server-base-reactors ) target_link_libraries( blob ${LIBS} ) install( TARGETS blob RUNTIME DESTINATION bin/ ) # TEST if ($ENV{COMM_TEST_SERVICES} MATCHES 1) file(GLOB TEST_CODE "./test/*.cpp") list(FILTER SOURCE_CODE EXCLUDE REGEX "./src/server.cpp") enable_testing() find_package(GTest REQUIRED) include_directories( ${GTEST_INCLUDE_DIR} ./test ) add_executable( runTests ${GENERATED_CODE} ${DOUBLE_CONVERSION_SOURCES} ${FOLLY_SOURCES} ${SOURCE_CODE} ${TEST_CODE} ) target_link_libraries( runTests ${LIBS} gtest gtest_main ) add_test( NAME runTests COMMAND runTests ) endif() diff --git a/services/lib/src/CMakeLists.txt b/services/lib/src/CMakeLists.txt index c1e53a4dd..c6c3e3fc5 100644 --- a/services/lib/src/CMakeLists.txt +++ b/services/lib/src/CMakeLists.txt @@ -1,62 +1,62 @@ project(comm-services-common) cmake_minimum_required(VERSION 3.4) set(CMAKE_CXX_STANDARD 14) include(GNUInstallDirs) # Export reactors add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/client-base-reactors) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/server-base-reactors) file(GLOB COMMON_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) file(GLOB COMMON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) add_library(comm-services-common ${COMMON_HDRS} ${COMMON_SRCS} ) find_package(AWSSDK REQUIRED COMPONENTS core dynamodb) find_package(Boost 1.40 COMPONENTS program_options REQUIRED) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(glog REQUIRED) find_package(gRPC REQUIRED) target_link_libraries(comm-services-common glog::glog gRPC::grpc++ ${AWSSDK_LINK_LIBRARIES} ${Boost_LIBRARIES} ) target_include_directories(comm-services-common PUBLIC $ $ ) install(TARGETS comm-services-common EXPORT comm-services-common-export RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT comm-services-common LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT comm-services-common ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT comm-services-common ) install(FILES ${COMMON_HDRS} DESTINATION include) set(_pname ${PROJECT_NAME}) export(TARGETS comm-services-common NAMESPACE comm-services-common:: FILE ${CMAKE_CURRENT_BINARY_DIR}/cmake/${_pname}/${_pname}-targets.cmake ) # For installation install(EXPORT comm-services-common-export FILE comm-services-common-targets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/comm-services-common NAMESPACE comm-services-common:: ) diff --git a/services/tunnelbroker/CMakeLists.txt b/services/tunnelbroker/CMakeLists.txt index e4de4a8cd..aa5849870 100644 --- a/services/tunnelbroker/CMakeLists.txt +++ b/services/tunnelbroker/CMakeLists.txt @@ -1,171 +1,171 @@ PROJECT(tunnelbroker C CXX) cmake_minimum_required(VERSION 3.16) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_CXX_STANDARD 17) # For C++17 on MacOS, we must set minimum target to 10.14+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14) find_package(PkgConfig REQUIRED) find_package(double-conversion REQUIRED) find_package(Folly REQUIRED) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) # Find AMQP-CPP installation find_package(amqpcpp CONFIG REQUIRED) # Find Cryptopp installation pkg_check_modules(CRYPTOPP REQUIRED IMPORTED_TARGET libcryptopp=8.6 ) # Find Libuv installation pkg_check_modules(LIBUV REQUIRED IMPORTED_TARGET libuv>=1.43 ) if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL "/transferred/tunnelbroker") # Inside the docker build contex set(_proto_path "grpc") set(_shared_path "../shared") else() # Inside repo set(_shared_path "../../shared") set(_proto_path "../../shared/protos") endif() # Shared Comm protos add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${_proto_path} ${CMAKE_CURRENT_BINARY_DIR}/protos EXCLUDE_FROM_ALL ) # Shared services code add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lib/src ${CMAKE_CURRENT_BINARY_DIR}/common EXCLUDE_FROM_ALL ) set(BUILD_TESTING OFF CACHE BOOL "Turn off tests" FORCE) set(WITH_GFLAGS OFF CACHE BOOL "Turn off gflags" FORCE) find_package(AWSSDK REQUIRED COMPONENTS core dynamodb) find_package(Boost 1.40 COMPONENTS program_options thread system context filesystem regex REQUIRED ) find_package(OpenSSL REQUIRED) find_package(glog) # Corrosion and CXX Rust integration find_package(Corrosion REQUIRED) include(${_shared_path}/cmake/corrosion-cxx.cmake) add_library_rust(PATH rust-notifications NAMESPACE rustlib) file(GLOB_RECURSE SOURCE_CODE "./src/*.cpp") set( SOURCE_CODE ${DOUBLE_CONVERSION_SOURCES} ${GENERATED_CODE} ${SOURCE_CODE} ) set( LIBS comm-services-common comm-tunnelbroker-grpc gRPC::grpc++_reflection gRPC::grpc++ ${AWSSDK_LINK_LIBRARIES} PkgConfig::CRYPTOPP PkgConfig::LIBUV ${Boost_LIBRARIES} ${RUST_LIBS} amqpcpp OpenSSL::SSL glog::glog double-conversion::double-conversion Folly::folly rustlib::rust-notifications ) # SERVER add_executable( tunnelbroker ${GENERATED_CODE} ${SOURCE_CODE} ) target_include_directories(tunnelbroker PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/Database ${CMAKE_CURRENT_SOURCE_DIR}/src/DeliveryBroker ${CMAKE_CURRENT_SOURCE_DIR}/src/Service ${CMAKE_CURRENT_SOURCE_DIR}/src/Tools ${CMAKE_CURRENT_SOURCE_DIR}/src/Amqp ) target_link_libraries( tunnelbroker ${LIBS} ) install( TARGETS tunnelbroker RUNTIME DESTINATION bin/ ) # TEST if($ENV{COMM_TEST_SERVICES} MATCHES 1) file(GLOB TEST_CODE "./test/*.cpp") list(FILTER SOURCE_CODE EXCLUDE REGEX "./src/server.cpp") enable_testing() find_package(GTest REQUIRED) add_executable( runTests ${SOURCE_CODE} ${TEST_CODE} ) target_link_libraries( runTests ${LIBS} GTest::gtest_main ) target_include_directories(runTests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/Database ${CMAKE_CURRENT_SOURCE_DIR}/src/DeliveryBroker ${CMAKE_CURRENT_SOURCE_DIR}/src/Service ${CMAKE_CURRENT_SOURCE_DIR}/src/Tools ${CMAKE_CURRENT_SOURCE_DIR}/src/Amqp ) include(GoogleTest) gtest_discover_tests(runTests) endif() diff --git a/shared/protos/CMakeLists.txt b/shared/protos/CMakeLists.txt index f09894a59..8c70e0523 100644 --- a/shared/protos/CMakeLists.txt +++ b/shared/protos/CMakeLists.txt @@ -1,94 +1,94 @@ project(grpc-comm) cmake_minimum_required(VERSION 3.4) include(GNUInstallDirs) -find_package(protobuf REQUIRED) +find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) set(CMAKE_CXX_STANDARD 14) # Allow for tools on PATH to be found find_program(_PROTOBUF_PROTOC protoc HINTS "${_PROTOBUF_PROTOC}") find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin HINTS "${_GRPC_CPP_PLUGIN_EXECUTABLE}") set(_proto_dir "${CMAKE_CURRENT_SOURCE_DIR}") set(_components backup blob tunnelbroker identity) set(TARGETS) # Iterate through each protobuf file # and create headers, sources, and export as component library foreach(component ${_components}) set(LIB_NAME comm-${component}-grpc) set(TARGETS ${TARGETS} ${LIB_NAME}) set(BIN_PROTO_HDRS ${component}.pb.h ${component}.grpc.pb.h ) set(BIN_PROTO_SRCS ${component}.pb.cc ${component}.grpc.pb.cc ) set(_proto_file "${_proto_dir}/${component}.proto") # Generate headers from protobuf files, and copy them to _generated dir add_custom_command( OUTPUT ${BIN_PROTO_HDRS} ${BIN_PROTO_SRCS} COMMAND ${_PROTOBUF_PROTOC} --grpc_out "${CMAKE_CURRENT_BINARY_DIR}" --cpp_out "${CMAKE_CURRENT_BINARY_DIR}" -I "${_proto_dir}" --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}" "${_proto_file}" COMMAND sed 's|^// Genera|// @genera|g' ${component}.grpc.pb.h > ${CMAKE_CURRENT_SOURCE_DIR}/_generated/${component}.grpc.pb.h COMMAND sed 's|^// Genera|// @genera|g' ${component}.grpc.pb.cc > ${CMAKE_CURRENT_SOURCE_DIR}/_generated/${component}.grpc.pb.cc COMMAND sed 's|^// Genera|// @genera|g' ${component}.pb.h > ${CMAKE_CURRENT_SOURCE_DIR}/_generated/${component}.pb.h COMMAND sed 's|^// Genera|// @genera|g' ${component}.pb.cc > ${CMAKE_CURRENT_SOURCE_DIR}/_generated/${component}.pb.cc DEPENDS "${_proto_file}" MAIN_DEPENDENCY "${_proto_file}" COMMENT "Generate protobuf files for ${component}" ) add_library(${LIB_NAME} ${BIN_PROTO_HDRS} ${BIN_PROTO_SRCS} ) target_link_libraries(${LIB_NAME} gRPC::grpc++ protobuf::libprotobuf ) # reference local directory when building # use installation path when installing target_include_directories(${LIB_NAME} PUBLIC $ $ ) install(TARGETS ${LIB_NAME} EXPORT comm-grpc-export RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${LIB_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${LIB_NAME} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${LIB_NAME} ) # ensure headers are also installed install(FILES ${PROTO_HDRS} DESTINATION include/comm/grpc) endforeach() export(TARGETS ${TARGETS} NAMESPACE comm:: FILE ${CMAKE_CURRENT_BINARY_DIR}/cmake/comm/comm-grpc-targets.cmake ) # For installation install(EXPORT comm-grpc-export FILE comm-grpc-targets.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/comm-grpc NAMESPACE comm:: )