-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
252 lines (182 loc) · 7.25 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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
cmake_minimum_required(VERSION 3.5)
project(gkvs C CXX)
set(CMAKE_CXX_STANDARD 11)
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
else()
add_definitions(-D_WIN32_WINNT=0x600)
endif()
#if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-as-needed -v")
#endif()
message(STATUS "Running on ${CMAKE_SYSTEM_NAME}")
message(STATUS "Direct build")
include(FindPkgConfig)
# JSON
include_directories("modules/nlohmann_json/include")
# REDIS
find_library(_REDIS_LIB libhiredis.a hiredis HINTS "modules/hiredis")
message(STATUS "Using hiredis ${_REDIS_LIB}")
list(APPEND SERVER_LIB_LIST ${_REDIS_LIB})
# AEROSPIKE
include_directories("modules/aerospike-client-c/modules/common/src/include")
include_directories("modules/aerospike-client-c/src/include")
find_library(_AEROSPIKE_LIB NAMES libaerospike.a aerospike HINTS "modules/aerospike-client-c/target/${CMAKE_SYSTEM_NAME}-x86_64/lib")
message(STATUS "Using Aerospike Client ${_AEROSPIKE_LIB}")
list(APPEND SERVER_LIB_LIST ${_AEROSPIKE_LIB})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAS_USE_LIBEVENT")
# LuaJIT
find_library(_LUAJIT_LIB NAMES libluajit-5.1.a luajit-5.1)
message(STATUS "Using luajit ${_LUAJIT_LIB}")
list(APPEND SERVER_LIB_LIST ${_LUAJIT_LIB})
# Msgpack
find_library(_MSGPACK_LIB libmsgpackc.a msgpackc HINTS "modules/msgpack-c/build")
message(STATUS "Using msgpack lib ${_MSGPACK_LIB}")
list(APPEND CLIENT_LIB_LIST ${_MSGPACK_LIB})
list(APPEND SERVER_LIB_LIST ${_MSGPACK_LIB})
# GRPC++
find_library(_GRPCPP_LIB NAMES libgrpc++.a grpc++ HINTS "modules/grpc/build")
message(STATUS "Using gRPC++ ${_GRPCPP_LIB}")
list(APPEND CLIENT_LIB_LIST ${_GRPCPP_LIB})
list(APPEND SERVER_LIB_LIST ${_GRPCPP_LIB})
# GRPC
find_library(_GRPC_LIB NAMES libgrpc.a grpc HINTS "modules/grpc/build")
message(STATUS "Using gRPC ${_GRPC_LIB}")
list(APPEND CLIENT_LIB_LIST ${_GRPC_LIB})
list(APPEND SERVER_LIB_LIST ${_GRPC_LIB})
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
## Boring SSL
find_library(_BORING_SSL_LIB NAMES libssl.a ssl HINTS "modules/grpc/build/third_party/boringssl/ssl")
message(STATUS "Using Boring SSL ${_BORING_SSL_LIB}")
list(APPEND CLIENT_LIB_LIST ${_BORING_SSL_LIB})
list(APPEND SERVER_LIB_LIST ${_BORING_SSL_LIB})
# Boring Crypto
find_library(_BORING_CRYPTO_LIB NAMES libcrypto.a crypto HINTS "modules/grpc/build/third_party/boringssl/crypto")
message(STATUS "Using Boring Crypto ${_BORING_CRYPTO_LIB}")
list(APPEND CLIENT_LIB_LIST ${_BORING_CRYPTO_LIB})
list(APPEND SERVER_LIB_LIST ${_BORING_CRYPTO_LIB})
endif()
# Protobuf
find_library(_PROTOBUF_LIB NAMES libprotobuf.a protobuf HINTS "modules/grpc/build/third_party/protobuf")
message(STATUS "Using protobuf ${_PROTOBUF_LIB}")
list(APPEND CLIENT_LIB_LIST ${_PROTOBUF_LIB})
list(APPEND SERVER_LIB_LIST ${_PROTOBUF_LIB})
# GPR
find_library(_GPR_LIB NAMES libgpr.a gpr HINTS "modules/grpc/build")
message(STATUS "Using GPR ${_GPR_LIB}")
list(APPEND CLIENT_LIB_LIST ${_GPR_LIB})
list(APPEND SERVER_LIB_LIST ${_GPR_LIB})
# CARES
find_library(_CARES_LIB NAMES libcares.a cares HINTS "modules/grpc/build/third_party/cares/cares/lib")
message(STATUS "Using Cares ${_CARES_LIB}")
list(APPEND CLIENT_LIB_LIST ${_CARES_LIB})
list(APPEND SERVER_LIB_LIST ${_CARES_LIB})
# Address Sorting
find_library(_ADDRESS_SORTING_LIB NAMES libaddress_sorting.a address_sorting HINTS "modules/grpc/build")
message(STATUS "Using Address Sorting ${_ADDRESS_SORTING_LIB}")
list(APPEND CLIENT_LIB_LIST ${_ADDRESS_SORTING_LIB})
list(APPEND SERVER_LIB_LIST ${_ADDRESS_SORTING_LIB})
# GLOG
find_library(_GLOG_LIB NAMES libglog.a glog)
message(STATUS "Using glog ${_GLOG_LIB}")
list(APPEND CLIENT_LIB_LIST ${_GLOG_LIB})
list(APPEND SERVER_LIB_LIST ${_GLOG_LIB})
# GFLAGS
set(gflags_STATIC ON)
find_package(gflags CONFIG REQUIRED)
message("-- Using gflags ${gflags_VERSION} libs ${gflags_LIBRARIES}")
list(APPEND CLIENT_LIB_LIST ${gflags_LIBRARIES})
list(APPEND SERVER_LIB_LIST ${gflags_LIBRARIES})
# OpenSSL
if(NOT OPENSSL_ROOT_DIR)
set(OPENSSL_ROOT_DIR "$ENV{OPENSSL_ROOT_DIR}")
endif()
message("OpenSSL Root Dir: ${OPENSSL_ROOT_DIR}")
#set(OPENSSL_STATIC ON)
#set(OPENSSL_USE_STATIC_LIBS TRUE)
find_package(OpenSSL REQUIRED)
message("OpenSSL Include Dir: ${OPENSSL_INCLUDE_DIR}")
message("OpenSSL Libraries: ${OPENSSL_LIBRARIES}")
include_directories(${OPENSSL_INCLUDE_DIR})
list(APPEND CLIENT_LIB_LIST ${OPENSSL_LIBRARIES})
list(APPEND SERVER_LIB_LIST ${OPENSSL_LIBRARIES})
# Z
find_library(_Z_LIB NAMES libz.a z)
message(STATUS "Using zlib ${_Z_LIB}")
list(APPEND CLIENT_LIB_LIST ${_Z_LIB})
list(APPEND SERVER_LIB_LIST ${_Z_LIB})
# Linux System Libs
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
list(APPEND SERVER_LIB_LIST "dl")
list(APPEND SERVER_LIB_LIST "c")
list(APPEND SERVER_LIB_LIST "m")
endif()
get_filename_component(gkvs_proto "protos/gkvs.proto" ABSOLUTE)
get_filename_component(gkvs_proto_path "${gkvs_proto}" PATH)
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gen")
# LibEvent
find_library(_EVENT_LIB NAMES libevent.a event)
message(STATUS "Using libevent ${_EVENT_LIB}")
list(APPEND SERVER_LIB_LIST ${_EVENT_LIB})
# Event-PThreads
find_library(_EVENT_PTHREADS_LIB NAMES libevent_pthreads.a event_pthreads)
message(STATUS "Using libevent_pthreads ${_EVENT_PTHREADS_LIB}")
list(APPEND SERVER_LIB_LIST ${_EVENT_PTHREADS_LIB})
# PThreads
#find_library(_PTHREADS_LIB NAMES libpthread.a pthread)
#message(STATUS "Using pthreads ${_PTHREADS_LIB}")
#list(APPEND CLIENT_LIB_LIST ${_PTHREADS_LIB})
#list(APPEND SERVER_LIB_LIST ${_PTHREADS_LIB})
# Protoc
find_program(_PROTOC_EXEC
NAMES protoc
DOC "protoc compiler"
)
message(STATUS "Using protoc ${_PROTOC_EXEC}")
# GRPC++ Plugin
find_program(_GRPCPP_PLUGIN_EXEC
NAMES grpc_cpp_plugin
DOC "grpc_cpp_plugin compiler"
)
message(STATUS "Using gRPC++ Plugin ${_GRPCPP_PLUGIN_EXEC}")
# Generated sources
set(gkvs_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/gen/gkvs.pb.cc")
set(gkvs_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gen/gkvs.pb.h")
set(gkvs_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/gen/gkvs.grpc.pb.cc")
set(gkvs_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/gen/gkvs.grpc.pb.h")
add_custom_command(
OUTPUT "${gkvs_proto_srcs}" "${gkvs_proto_hdrs}" "${gkvs_grpc_srcs}" "${gkvs_grpc_hdrs}"
COMMAND ${_PROTOC_EXEC}
ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}/gen"
--cpp_out "${CMAKE_CURRENT_BINARY_DIR}/gen"
-I "${gkvs_proto_path}"
--plugin=protoc-gen-grpc="${_GRPCPP_PLUGIN_EXEC}"
"${gkvs_proto}"
DEPENDS "${gkvs_proto}")
# Include generated *.pb.h files
include_directories("cmake-build-debug/gen")
include_directories("${CMAKE_CURRENT_BINARY_DIR}/gen")
include_directories("src")
# Build Client
add_executable(gkvs-cli
"src/gkvs_client.cc"
${gkvs_proto_srcs}
${gkvs_grpc_srcs})
message("-- CLIENT_LIB_LIST ${CLIENT_LIB_LIST}")
target_link_libraries(gkvs-cli
${CLIENT_LIB_LIST})
# Build Server
add_executable(gkvs
"src/gkvs_server.cc"
"src/helper.cc"
"src/as_driver.cc"
"src/as_driver_tests.cc"
"src/as_helper.cc"
"src/redis_driver.cc"
"src/crypto.cc"
"src/script.cc"
${gkvs_proto_srcs}
${gkvs_grpc_srcs})
message("-- SERVER_LIB_LIST ${SERVER_LIB_LIST}")
target_link_libraries(gkvs
${SERVER_LIB_LIST})