-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
124 lines (97 loc) · 3.87 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
cmake_minimum_required(VERSION 3.8)
project(MotherDuckFivetranDestination C CXX)
# Debug Asan/Ubsan
if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT DISABLE_SANITIZER)
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang$")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-blacklist=${CMAKE_CURRENT_LIST_DIR}/sanitizer-disallowed-entries.txt")
set(ENABLE_UBSAN TRUE)
else()
set(ENABLE_UBSAN FALSE)
endif()
add_compile_options("-fsanitize=address,undefined")
add_link_options("-fsanitize=address,undefined")
set(ENABLE_SANITIZER TRUE)
else()
set(ENABLE_SANITIZER FALSE)
set(ENABLE_UBSAN FALSE)
endif()
message("-- ENABLE_SANITIZER=${ENABLE_SANITIZER}")
message("-- ENABLE_UBSAN=${ENABLE_UBSAN}")
# Proto generation
set(TARGET_ROOT ${PROJECT_SOURCE_DIR}/gen)
include(./proto_helper.cmake)
find_package(Threads REQUIRED)
message(WARNING "DEPENDENCIES DIR: " ${MD_FIVETRAN_DEPENDENCIES_DIR})
# absl and utf8_range is required by protobuf
find_package(absl CONFIG REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc NO_DEFAULT_PATH)
find_package(utf8_range CONFIG REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc NO_DEFAULT_PATH)
find_package(Protobuf CONFIG REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc NO_DEFAULT_PATH)
find_package(Arrow REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/arrow NO_DEFAULT_PATH)
message(STATUS "Using arrow ${ARROW_VERSION}")
set(Protobuf_INCLUDE_DIR "${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc/include")
set(Protobuf_LIBRARIES "${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc/lib")
set(Openssl_INCLUDE_DIR "${MD_FIVETRAN_DEPENDENCIES_DIR}/openssl/include")
set(Openssl_LIBRARIES "${MD_FIVETRAN_DEPENDENCIES_DIR}/openssl/lib")
message(STATUS "Using protobuf ${Protobuf_VERSION}")
find_package(gRPC CONFIG REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/grpc NO_DEFAULT_PATH)
message(STATUS "Using gRPC ${gRPC_VERSION}")
set(_GRPC_GRPCPP gRPC::grpc++)
if(CMAKE_CROSSCOMPILING)
find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
endif()
# Proto files
generate_protos(${CMAKE_CURRENT_SOURCE_DIR}/protos/common.proto)
generate_protos(${CMAKE_CURRENT_SOURCE_DIR}/protos/destination_sdk.proto)
# DuckDB amalgamation
set(DuckDB_SOURCE_DIR ./libduckdb-src)
add_library(motherduck_destination_sources STATIC
"src/motherduck_destination_server.cpp"
"src/sql_generator.cpp"
"src/decryption.cpp"
"src/csv_arrow_ingest.cpp"
"src/fivetran_duckdb_interop.cpp"
"src/md_logging.cpp"
${TARGET_ROOT}/cpp/destination_sdk.pb.cc
${TARGET_ROOT}/cpp/destination_sdk.grpc.pb.cc
${TARGET_ROOT}/cpp/common.pb.cc
${TARGET_ROOT}/cpp/common.grpc.pb.cc
${DuckDB_SOURCE_DIR}/duckdb.cpp
)
target_include_directories(motherduck_destination_sources PUBLIC
${TARGET_ROOT}/cpp
includes
${DuckDB_SOURCE_DIR}
${Openssl_INCLUDE_DIR}/include/openssl
${DUCKDB_INCLUDES}
)
link_dependencies(motherduck_destination_sources)
target_link_libraries(motherduck_destination_sources
${_REFLECTION}
${_GRPC_GRPCPP}
${_PROTOBUF_LIBPROTOBUF}
Arrow::arrow_static
)
add_executable(motherduck_destination "src/motherduck_destination.cpp")
target_link_libraries(
motherduck_destination motherduck_destination_sources
)
# Testing
find_package(Catch2 3 REQUIRED PATHS ${MD_FIVETRAN_DEPENDENCIES_DIR}/Catch2 NO_DEFAULT_PATH)
add_executable(integration_tests
test/integration/test_server.cpp
)
target_compile_definitions(integration_tests PRIVATE
TEST_RESOURCES_LOCATION=${CMAKE_CURRENT_LIST_DIR}/test/files/
)
target_include_directories(integration_tests PUBLIC
${TARGET_ROOT}/cpp
includes
${Protobuf_INCLUDE_DIR}
${DUCKDB_INCLUDES}
)
target_link_libraries(integration_tests PRIVATE
Catch2::Catch2WithMain
motherduck_destination_sources
)