Skip to content

Commit e28ae2d

Browse files
committed
init datahub cpp sdk
Change-Id: Ib550b8a3c3d3ded9fa8d3a908c4a51518db4ca46
0 parents  commit e28ae2d

305 files changed

Lines changed: 37169 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
############################################################
2+
# datahub-cpp-sdk
3+
############################################################
4+
5+
cmake_minimum_required(VERSION 3.5)
6+
7+
#system processor will set by project, so set first
8+
execute_process(
9+
COMMAND bash -c "uname -m"
10+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
11+
OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR
12+
OUTPUT_STRIP_TRAILING_WHITESPACE
13+
)
14+
15+
set(CMAKE_C_COMPILER ${CMAKE_SOURCE_DIR}/thirdparty/${CMAKE_SYSTEM_PROCESSOR}/gcc/bin/gcc)
16+
set(CMAKE_CXX_COMPILER ${CMAKE_SOURCE_DIR}/thirdparty/${CMAKE_SYSTEM_PROCESSOR}/gcc/bin/g++)
17+
18+
project(datahub-cpp-sdk)
19+
enable_testing()
20+
21+
############################################################
22+
# Globale Variables
23+
############################################################
24+
25+
if(NOT CMAKE_BUILD_TYPE)
26+
set(CMAKE_BUILD_TYPE Release)
27+
endif()
28+
29+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
30+
31+
############################################################
32+
# Compile & Link Options
33+
############################################################
34+
35+
add_compile_options(-pthread)
36+
add_compile_options(-D_FILE_OFFSET_BITS=64)
37+
add_compile_options(-g3)
38+
add_compile_options(-fno-strict-aliasing)
39+
add_compile_options(-Wno-deprecated-declarations)
40+
add_compile_options(-Wall)
41+
add_compile_options(-Werror)
42+
add_compile_options(-D__STDC_LIMIT_MACROS)
43+
add_compile_options(-D__USE_XOPEN2K8)
44+
add_compile_options(-fPIC)
45+
add_compile_options(-ffunction-sections -fdata-sections)
46+
47+
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
48+
add_compile_options(-march=armv8-a+crc)
49+
else()
50+
add_compile_options(-m64)
51+
endif()
52+
53+
if (CMAKE_COMPILER_IS_GNUCXX)
54+
set(CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS}")
55+
endif(CMAKE_COMPILER_IS_GNUCXX)
56+
57+
execute_process(
58+
COMMAND bash -c "ld -v | sed 's#[^2]*2\\.#2\\.#' | awk -F . '{printf(\"%02d%02d\", $1,$2)}'"
59+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
60+
OUTPUT_VARIABLE LD_VERSION
61+
OUTPUT_STRIP_TRAILING_WHITESPACE
62+
)
63+
64+
############################################################
65+
# paths
66+
############################################################
67+
set(THIRD_PARTY_PATH ${CMAKE_SOURCE_DIR}/thirdparty/${CMAKE_SYSTEM_PROCESSOR}/ CACHE STRING "")
68+
69+
if (${LD_VERSION} GREATER 0221)
70+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--copy-dt-needed-entries -Wl,-rpath ${THIRD_PARTY_PATH}")
71+
else()
72+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-rpath-link ${THIRD_PARTY_PATH}")
73+
endif()
74+
75+
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
76+
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--gc-sections -Wl,-z,defs -Wl,--exclude-libs,ALL -Wl,-export-dynamic")
77+
else()
78+
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--gc-sections -Wl,-z,defs -Wl,--exclude-libs,ALL -Wl,-export-dynamic -m64")
79+
endif()
80+
81+
############################################################
82+
set(PACKAGE_ROOT_PATH ${CMAKE_SOURCE_DIR}/package)
83+
set(PROTO_ROOT_PATH ${CMAKE_SOURCE_DIR})
84+
set(PROTOBUF_INCLUDE_DIR ${THIRD_PARTY_PATH}/include)
85+
set(PROTOBUF_PROTOC_EXECUTABLE ${THIRD_PARTY_PATH}/bin/protoc)
86+
87+
############################################################
88+
# Functions
89+
############################################################
90+
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
91+
if(NOT ARGN)
92+
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
93+
return()
94+
endif()
95+
96+
if(NOT PROTO_ROOT_PATH)
97+
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() PROTO_ROOT_PATH is not set")
98+
return()
99+
endif()
100+
101+
set(${SRCS})
102+
set(${HDRS})
103+
foreach(FIL ${ARGN})
104+
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
105+
get_filename_component(FIL_WE ${FIL} NAME_WE)
106+
get_filename_component(FIL_DIR ${FIL} DIRECTORY)
107+
108+
file(RELATIVE_PATH REL ${PROTO_ROOT_PATH} ${FIL_DIR})
109+
110+
list(APPEND ${SRCS} "${CMAKE_BINARY_DIR}/${REL}/${FIL_WE}.pb.cc")
111+
list(APPEND ${HDRS} "${CMAKE_BINARY_DIR}/${REL}/${FIL_WE}.pb.h")
112+
113+
add_custom_command(
114+
OUTPUT "${CMAKE_BINARY_DIR}/${REL}/${FIL_WE}.pb.cc"
115+
"${CMAKE_BINARY_DIR}/${REL}/${FIL_WE}.pb.h"
116+
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
117+
ARGS --cpp_out ${CMAKE_BINARY_DIR} -I${PROTO_ROOT_PATH} ${ABS_FIL}
118+
DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE}
119+
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
120+
VERBATIM )
121+
endforeach()
122+
123+
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
124+
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
125+
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
126+
endfunction()
127+
128+
function(CREATE_PACKAGE TARGET_NAME PACKAGE_NAME)
129+
if(NOT PACKAGE_ROOT_PATH)
130+
message(SEND_ERROR "Error: CREATE_PACKAGE() PACKAGE_ROOT_PATH is not set")
131+
return()
132+
endif()
133+
134+
set(get_link "grep -E \"thirdparty\" | grep \".so\" | awk '{print $3}'")
135+
set(depends ${EXT_PACKAGE_DEPENDS})
136+
set(STATE "flag")
137+
foreach(ARG ${ARGN})
138+
if(${STATE} STREQUAL "flag")
139+
if(${ARG} STREQUAL "TARGETS" OR ${ARG} STREQUAL "RTARGETS"
140+
OR ${ARG} STREQUAL "LINKLIB" OR ${ARG} STREQUAL "FILE_LINK"
141+
OR ${ARG} STREQUAL "FILE_PATH" OR ${ARG} STREQUAL "DIR_PATH")
142+
set(FLAG ${ARG})
143+
else()
144+
message(SEND_ERROR "Error: CREATE_PACKAGE invalid flag ${ARG}")
145+
return()
146+
endif()
147+
set(STATE "src")
148+
elseif(${STATE} STREQUAL "src")
149+
set(SRC ${ARG})
150+
if (NOT ${FLAG} STREQUAL "DIR_PATH")
151+
set(depends ${depends} ${ARG})
152+
endif()
153+
set(STATE "dst")
154+
else()
155+
set(STATE "flag")
156+
set(IN_PACKAGE_PATH ${ARG})
157+
set(DEST_PATH ${PACKAGE_ROOT_PATH}/tmp/${PACKAGE_NAME}/${IN_PACKAGE_PATH})
158+
if(${FLAG} STREQUAL "TARGETS")
159+
set(DEBUG_EXT ".debug")
160+
get_filename_component(FILE_NAME ${SRC} NAME)
161+
set(dump_debug_info "${CMAKE_OBJCOPY} --only-keep-debug ${FILE_NAME} ${FILE_NAME}${DEBUG_EXT}")
162+
set(strip_bin_debug "${CMAKE_OBJCOPY} --strip-debug ${FILE_NAME}")
163+
set(link_debug_info "${CMAKE_OBJCOPY} --add-gnu-debuglink=${FILE_NAME}${DEBUG_EXT} ${FILE_NAME}")
164+
set(COPY_TARGETS ${COPY_TARGETS} COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SRC}> ${DEST_PATH}/$<TARGET_FILE_NAME:${SRC}>)
165+
set(COPY_TARGETS ${COPY_TARGETS} COMMAND sh -c "cd ${DEST_PATH} && ${dump_debug_info} && ${strip_bin_debug} && ${link_debug_info}")
166+
elseif(${FLAG} STREQUAL "RTARGETS")
167+
set(COPY_RTARGETS ${COPY_RTARGETS} COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SRC}> ${DEST_PATH}/$<TARGET_FILE_NAME:${SRC}>)
168+
elseif(${FLAG} STREQUAL "LINKLIB")
169+
set(COPY_LINKS ${COPY_LINKS} COMMAND sh -c "mkdir -p ${DEST_PATH} && ldd $<TARGET_FILE:${SRC}> | ${get_link} | xargs -i cp -u {} ${DEST_PATH}")
170+
elseif(${FLAG} STREQUAL "FILE_PATH")
171+
get_filename_component(FILE_NAME ${SRC} NAME)
172+
set(COPY_FILES ${COPY_FILES} COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DEST_PATH}/${FILE_NAME})
173+
elseif(${FLAG} STREQUAL "FILE_LINK")
174+
get_filename_component(FILE_NAME ${SRC} NAME)
175+
set(COPY_FILES ${COPY_FILES} COMMAND ${CMAKE_COMMAND} -E create_symlink ${FILE_NAME} ${DEST_PATH})
176+
else()
177+
get_filename_component(DIR_NAME ${SRC} NAME)
178+
set(COPY_DIRS ${COPY_DIRS} COMMAND ${CMAKE_COMMAND} -E copy_directory ${SRC} ${DEST_PATH}/${DIR_NAME})
179+
endif()
180+
endif()
181+
endforeach()
182+
183+
set(INPUT_DIR ${PACKAGE_ROOT_PATH}/tmp/${PACKAGE_NAME})
184+
set(OUTPUT_PATH ${PACKAGE_ROOT_PATH}/${PACKAGE_NAME}.tar.gz)
185+
186+
add_custom_target(
187+
${TARGET_NAME}
188+
${COPY_TARGETS}
189+
${COPY_RTARGETS}
190+
${COPY_LINKS}
191+
${COPY_FILES}
192+
${COPY_DIRS}
193+
COMMAND ${CMAKE_COMMAND} -E chdir "${INPUT_DIR}" tar "czvf" "${OUTPUT_PATH}" "."
194+
DEPENDS ${depends}
195+
COMMENT "Creating package ${PACKAGE_NAME}"
196+
VERBATIM)
197+
endfunction()
198+
199+
############################################################
200+
# datahub-cpp-sdk
201+
############################################################
202+
203+
include_directories(
204+
./
205+
${THIRD_PARTY_PATH}/include/
206+
${CMAKE_SOURCE_DIR}/include/
207+
${CMAKE_SOURCE_DIR}/src/
208+
${CMAKE_CURRENT_BINARY_DIR}/
209+
${CMAKE_CURRENT_BINARY_DIR}/include
210+
)
211+
212+
link_directories(
213+
${THIRD_PARTY_PATH}/lib/
214+
)
215+
216+
file(GLOB SDK_SOURCES
217+
${CMAKE_CURRENT_SOURCE_DIR}/*.h
218+
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
219+
${CMAKE_CURRENT_SOURCE_DIR}/src/model/*.cpp)
220+
221+
file(GLOB PROTO_FILES
222+
${CMAKE_SOURCE_DIR}/proto/*.proto)
223+
224+
PROTOBUF_GENERATE_CPP(PROTO_SOURCES PROTO_HEADERS ${PROTO_FILES})
225+
226+
add_library(datahub-sdk SHARED ${SDK_SOURCES} ${PROTO_SOURCES})
227+
add_library(datahub-sdk-static STATIC ${SDK_SOURCES} ${PROTO_SOURCES})
228+
229+
# The version number.
230+
set(SDK_VERSION_MAJOR 2)
231+
set(SDK_VERSION_MINOR 25)
232+
set(SDK_VERSION_PATCH 0)
233+
set(SDK_VERSION ${SDK_VERSION_MAJOR}.${SDK_VERSION_MINOR}.${SDK_VERSION_PATCH})
234+
235+
# configure a header file to pass some of the CMake settings
236+
# to the source code
237+
configure_file (
238+
${CMAKE_CURRENT_SOURCE_DIR}/include/datahub/sdk_version.h.in
239+
${CMAKE_CURRENT_BINARY_DIR}/include/datahub/sdk_version.h
240+
)
241+
242+
set_target_properties(
243+
datahub-sdk PROPERTIES
244+
VERSION ${SDK_VERSION}
245+
SOVERSION ${SDK_VERSION_MAJOR}
246+
)
247+
248+
target_link_libraries(datahub-sdk
249+
protobuf
250+
curl
251+
ssl
252+
crypto
253+
lz4
254+
z
255+
pthread
256+
)
257+
258+
############################################################
259+
# datahub-cpp-client
260+
############################################################
261+
262+
file(GLOB CLIENT_SOURCES
263+
${CMAKE_CURRENT_SOURCE_DIR}/*.h
264+
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
265+
${CMAKE_CURRENT_SOURCE_DIR}/src/model/*.cpp
266+
${CMAKE_CURRENT_SOURCE_DIR}/client/src/*.h
267+
${CMAKE_CURRENT_SOURCE_DIR}/client/src/*.cpp)
268+
269+
include_directories(client/example client/include client/src)
270+
271+
add_library(datahub-client SHARED ${CLIENT_SOURCES} ${PROTO_SOURCES})
272+
add_library(datahub-client-static STATIC ${CLIENT_SOURCES} ${PROTO_SOURCES})
273+
274+
add_dependencies(datahub-client datahub-sdk)
275+
add_dependencies(datahub-client-static datahub-sdk-static)
276+
277+
set_target_properties(
278+
datahub-client PROPERTIES
279+
VERSION ${SDK_VERSION}
280+
SOVERSION ${SDK_VERSION_MAJOR}
281+
)
282+
283+
target_link_libraries(datahub-client datahub-sdk log4cpp)
284+
285+
add_subdirectory(example)
286+
add_subdirectory(tests)
287+
add_subdirectory(client)
288+
289+
############################################################
290+
# create sdk package
291+
############################################################
292+
293+
set(PACKAGE_FILES
294+
RTARGETS datahub-sdk-static lib
295+
RTARGETS datahub-sdk lib
296+
LINKLIB datahub-sdk lib
297+
RTARGETS datahub-client-static lib
298+
RTARGETS datahub-client lib
299+
LINKLIB datahub-client lib
300+
FILE_PATH ${THIRD_PARTY_PATH}/lib/libcurl.a lib
301+
FILE_PATH ${THIRD_PARTY_PATH}/lib/liblz4.a lib
302+
FILE_PATH ${THIRD_PARTY_PATH}/lib/libz.a lib
303+
FILE_PATH ${THIRD_PARTY_PATH}/lib/libssl.a lib
304+
FILE_PATH ${THIRD_PARTY_PATH}/lib/libcrypto.a lib
305+
FILE_PATH ${THIRD_PARTY_PATH}/lib/libprotobuf.a lib
306+
FILE_PATH ${THIRD_PARTY_PATH}/lib/liblog4cpp.a lib
307+
FILE_PATH ${CMAKE_SOURCE_DIR}/example/readme example
308+
FILE_PATH ${CMAKE_SOURCE_DIR}/example/example_c.c example/datahub
309+
FILE_PATH ${CMAKE_SOURCE_DIR}/example/example_cpp.cpp example/datahub
310+
FILE_PATH ${CMAKE_SOURCE_DIR}/example/example_blob.cpp example/datahub
311+
FILE_PATH ${CMAKE_SOURCE_DIR}/example/example_pub_sub.cpp example/datahub
312+
FILE_PATH ${CMAKE_SOURCE_DIR}/client/example/example_general_produce.cpp example/client
313+
FILE_PATH ${CMAKE_SOURCE_DIR}/client/example/example_async_produce.cpp example/client
314+
FILE_PATH ${CMAKE_SOURCE_DIR}/client/example/example_collaborative_consume.cpp example/client
315+
FILE_PATH ${CMAKE_SOURCE_DIR}/makefile/CMakeLists.txt .
316+
DIR_PATH ${CMAKE_SOURCE_DIR}/include .
317+
DIR_PATH ${CMAKE_SOURCE_DIR}/client/include .
318+
DIR_PATH ${THIRD_PARTY_PATH}/include/rapidjson include
319+
FILE_PATH ${CMAKE_CURRENT_BINARY_DIR}/include/datahub/sdk_version.h include/datahub
320+
FILE_LINK ${CMAKE_BINARY_DIR}/libdatahub-sdk.so.${SDK_VERSION_MAJOR} lib/libdatahub-sdk.so
321+
FILE_LINK ${CMAKE_BINARY_DIR}/libdatahub-sdk.so.${SDK_VERSION} lib/libdatahub-sdk.so.${SDK_VERSION_MAJOR}
322+
FILE_LINK ${CMAKE_BINARY_DIR}/libdatahub-client.so.${SDK_VERSION_MAJOR} lib/libdatahub-client.so
323+
FILE_LINK ${CMAKE_BINARY_DIR}/libdatahub-client.so.${SDK_VERSION} lib/libdatahub-client.so.${SDK_VERSION_MAJOR}
324+
)
325+
326+
set(EXT_PACKAGE_DEPENDS)
327+
create_package("sdk" "datahub_cpp_sdk_release_64" ${PACKAGE_FILES})

0 commit comments

Comments
 (0)