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
|
cmake_minimum_required(VERSION 3.6)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "build type")
project(srpc_tutorial
LANGUAGES C CXX
)
###Options
if (WIN32)
option(SRPC_TUTORIAL_BUILD_STATIC_RUNTIME "Use static runtime" ON)
endif ()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
if (NOT "$ENV{LIBRARY_PATH}" STREQUAL "")
string(REPLACE ":" ";" LIBRARY_PATH $ENV{LIBRARY_PATH})
set(CMAKE_SYSTEM_LIBRARY_PATH ${LIBRARY_PATH};${CMAKE_SYSTEM_LIBRARY_PATH})
endif ()
if (NOT "$ENV{CPLUS_INCLUDE_PATH}" STREQUAL "")
string(REPLACE ":" ";" INCLUDE_PATH $ENV{CPLUS_INCLUDE_PATH})
set(CMAKE_SYSTEM_INCLUDE_PATH ${INCLUDE_PATH};${CMAKE_SYSTEM_INCLUDE_PATH})
endif ()
find_package(OpenSSL REQUIRED)
find_package(srpc REQUIRED CONFIG HINTS ..)
set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
if (WIN32)
find_package(Protobuf CONFIG REQUIRED)
find_library(LZ4_LIBRARY NAMES lz4)
if(LZ4_LIBRARY STREQUAL "LZ4_LIBRARY-NOTFOUND")
find_package(lz4)
if(lz4_FOUND)
set(LZ4_LIBRARY ${lz4_LIBRARIES})
endif()
endif()
find_package(Snappy CONFIG REQUIRED)
else ()
find_package(Protobuf REQUIRED)
endif ()
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/lz4/lib/lz4.h")
set(LZ4_LIB lz4)
endif ()
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/snappy/cmake")
set(SNAPPY_LIB snappy)
endif ()
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/workflow/workflow-config.cmake.in")
find_package(Workflow REQUIRED CONFIG HINTS ../workflow)
endif ()
find_package(ZLIB REQUIRED)
include_directories(
${OPENSSL_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${Protobuf_INCLUDE_DIR}
${WORKFLOW_INCLUDE_DIR}
${SRPC_INCLUDE_DIR}
)
if (WIN32)
link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/Debug/srpc_generator.exe)
else ()
get_filename_component(Protobuf_LIB_DIR ${Protobuf_LIBRARY} DIRECTORY)
link_directories(${SRPC_LIB_DIR} ${WORKFLOW_LIB_DIR} ${Protobuf_LIB_DIR})
set(SRPC_GEN_PROGRAM ${SRPC_BIN_DIR}/srpc_generator)
endif ()
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS echo_pb.proto)
protobuf_generate_cpp(HELLOWORLD_SRCS HELLOWORLD_HDRS helloworld.proto)
add_custom_target(
TURORIAL_GEN ALL
COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/echo_pb.proto ${PROJECT_SOURCE_DIR}
COMMAND ${SRPC_GEN_PROGRAM} ${PROJECT_SOURCE_DIR}/echo_thrift.thrift ${PROJECT_SOURCE_DIR}
COMMAND ${SRPC_GEN_PROGRAM} protobuf ${PROJECT_SOURCE_DIR}/helloworld.proto ${PROJECT_SOURCE_DIR}
COMMENT "srpc generator..."
)
if (WIN32)
if (SRPC_TUTORIAL_BUILD_STATIC_RUNTIME)
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach ()
endif ()
endif ()
if (WIN32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4200")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4200 /Zc:__cplusplus /std:c++14")
else ()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC -pipe -std=gnu90")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")
endif ()
set(TUTORIAL_PB_LIST
tutorial-01-srpc_pb_server
tutorial-02-srpc_pb_client
tutorial-05-brpc_pb_server
tutorial-06-brpc_pb_client
tutorial-09-client_task
tutorial-10-server_async
tutorial-15-srpc_pb_proxy
tutorial-16-server_with_metrics
)
if (APPLE)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
find_library(Workflow_LIB workflow HINTS ../workflow/_lib)
find_library(Srpc_LIB srpc HINTS ../_lib)
set(SRPC_LIB
${Srpc_LIB}
${Workflow_LIB}
pthread
OpenSSL::SSL
OpenSSL::Crypto
protobuf
z
)
elseif (WIN32)
set(SRPC_LIB
srpc
workflow
ws2_32
wsock32
OpenSSL::SSL
OpenSSL::Crypto
protobuf::libprotobuf
ZLIB::ZLIB
Snappy::snappy
${LZ4_LIBRARY}
)
else ()
set(SRPC_LIB
srpc
workflow
pthread
OpenSSL::SSL
OpenSSL::Crypto
protobuf
z
${SNAPPY_LIB}
${LZ4_LIB}
)
endif ()
foreach(src ${TUTORIAL_PB_LIST})
string(REPLACE "-" ";" arr ${src})
list(GET arr -1 bin_name)
add_executable(${bin_name} ${src}.cc ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(${bin_name} ${SRPC_LIB})
add_dependencies(${bin_name} TURORIAL_GEN)
endforeach()
set(TUTORIAL_THRIFT_LIST
tutorial-03-srpc_thrift_server
tutorial-04-srpc_thrift_client
tutorial-07-thrift_thrift_server
tutorial-08-thrift_thrift_client
)
foreach(src ${TUTORIAL_THRIFT_LIST})
string(REPLACE "-" ";" arr ${src})
list(GET arr -1 bin_name)
add_executable(${bin_name} ${src}.cc)
target_link_libraries(${bin_name} ${SRPC_LIB})
add_dependencies(${bin_name} TURORIAL_GEN)
endforeach()
set(TUTORIAL_HELLOWORLD_LIST
tutorial-11-trpc_pb_server
tutorial-12-trpc_pb_client
tutorial-13-trpc_http_server
tutorial-14-trpc_http_client
)
foreach(src ${TUTORIAL_HELLOWORLD_LIST})
string(REPLACE "-" ";" arr ${src})
list(GET arr -1 bin_name)
add_executable(${bin_name} ${src}.cc ${HELLOWORLD_SRCS} ${HELLOWORLD_HDRS})
target_link_libraries(${bin_name} ${SRPC_LIB})
add_dependencies(${bin_name} TURORIAL_GEN)
endforeach()
if (NOT WIN32)
set(TUTORIAL_HTTP_LIST
tutorial-17-http_server
tutorial-18-http_client
)
foreach(src ${TUTORIAL_HTTP_LIST})
string(REPLACE "-" ";" arr ${src})
list(GET arr -1 bin_name)
add_executable(${bin_name} ${src}.cc)
target_link_libraries(${bin_name} ${SRPC_LIB})
add_dependencies(${bin_name} TURORIAL_GEN)
endforeach()
endif ()
|