CMakeLists.txt 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. # Licensed to the Apache Software Foundation (ASF) under one
  2. # or more contributor license agreements. See the NOTICE file
  3. # distributed with this work for additional information
  4. # regarding copyright ownership. The ASF licenses this file
  5. # to you under the Apache License, Version 2.0 (the
  6. # "License"); you may not use this file except in compliance
  7. # with the License. You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing,
  12. # software distributed under the License is distributed on an
  13. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. # KIND, either express or implied. See the License for the
  15. # specific language governing permissions and limitations
  16. # under the License.
  17. cmake_minimum_required(VERSION 2.8.10)
  18. project(brpc C CXX)
  19. option(WITH_GLOG "With glog" OFF)
  20. option(WITH_MESALINK "With MesaLink" OFF)
  21. option(DEBUG "Print debug logs" OFF)
  22. option(WITH_DEBUG_SYMBOLS "With debug symbols" ON)
  23. option(WITH_THRIFT "With thrift framed protocol supported" OFF)
  24. option(BUILD_UNIT_TESTS "Whether to build unit tests" OFF)
  25. option(DOWNLOAD_GTEST "Download and build a fresh copy of googletest. Requires Internet access." ON)
  26. # Enable MACOSX_RPATH. Run "cmake --help-policy CMP0042" for policy details.
  27. if(POLICY CMP0042)
  28. cmake_policy(SET CMP0042 NEW)
  29. endif()
  30. set(BRPC_VERSION 0.9.0)
  31. SET(CPACK_GENERATOR "DEB")
  32. SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "brpc authors")
  33. INCLUDE(CPack)
  34. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  35. # require at least gcc 4.8
  36. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
  37. message(FATAL_ERROR "GCC is too old, please install a newer version supporting C++11")
  38. endif()
  39. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  40. # require at least clang 3.3
  41. if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3)
  42. message(FATAL_ERROR "Clang is too old, please install a newer version supporting C++11")
  43. endif()
  44. else()
  45. message(WARNING "You are using an unsupported compiler! Compilation has only been tested with Clang and GCC.")
  46. endif()
  47. set(WITH_GLOG_VAL "0")
  48. if(WITH_GLOG)
  49. set(WITH_GLOG_VAL "1")
  50. set(BRPC_WITH_GLOG 1)
  51. endif()
  52. if(WITH_DEBUG_SYMBOLS)
  53. set(DEBUG_SYMBOL "-g")
  54. endif()
  55. if(WITH_THRIFT)
  56. set(THRIFT_CPP_FLAG "-DENABLE_THRIFT_FRAMED_PROTOCOL")
  57. set(THRIFT_LIB "thrift")
  58. endif()
  59. include(GNUInstallDirs)
  60. configure_file(${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_SOURCE_DIR}/src/butil/config.h @ONLY)
  61. set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  62. find_package(GFLAGS REQUIRED)
  63. execute_process(
  64. COMMAND bash -c "grep \"namespace [_A-Za-z0-9]\\+ {\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $2}' | tr -d '\n'"
  65. OUTPUT_VARIABLE GFLAGS_NS
  66. )
  67. if(${GFLAGS_NS} STREQUAL "GFLAGS_NAMESPACE")
  68. execute_process(
  69. COMMAND bash -c "grep \"#define GFLAGS_NAMESPACE [_A-Za-z0-9]\\+\" ${GFLAGS_INCLUDE_PATH}/gflags/gflags_declare.h | head -1 | awk '{print $3}' | tr -d '\n'"
  70. OUTPUT_VARIABLE GFLAGS_NS
  71. )
  72. endif()
  73. include_directories(
  74. ${PROJECT_SOURCE_DIR}/src
  75. ${CMAKE_CURRENT_BINARY_DIR}
  76. )
  77. execute_process(
  78. COMMAND bash -c "${PROJECT_SOURCE_DIR}/tools/get_brpc_revision.sh ${PROJECT_SOURCE_DIR} | tr -d '\n'"
  79. OUTPUT_VARIABLE BRPC_REVISION
  80. )
  81. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  82. include(CheckFunctionExists)
  83. CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
  84. if(NOT HAVE_CLOCK_GETTIME)
  85. set(DEFINE_CLOCK_GETTIME "-DNO_CLOCK_GETTIME_IN_MAC")
  86. endif()
  87. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -Wno-deprecated-declarations -Wno-inconsistent-missing-override")
  88. endif()
  89. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${DEFINE_CLOCK_GETTIME} -DBRPC_WITH_GLOG=${WITH_GLOG_VAL} -DGFLAGS_NS=${GFLAGS_NS}")
  90. if(WITH_MESALINK)
  91. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DUSE_MESALINK")
  92. endif()
  93. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -DBTHREAD_USE_FAST_PTHREAD_MUTEX -D__const__= -D_GNU_SOURCE -DUSE_SYMBOLIZE -DNO_TCMALLOC -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DBRPC_REVISION=\\\"${BRPC_REVISION}\\\" -D__STRICT_ANSI__")
  94. set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} ${DEBUG_SYMBOL} ${THRIFT_CPP_FLAG}")
  95. set(CMAKE_CXX_FLAGS "${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-invalid-offsetof -Wno-unused-parameter -fno-omit-frame-pointer")
  96. set(CMAKE_C_FLAGS "${CMAKE_CPP_FLAGS} -O2 -pipe -Wall -W -fPIC -fstrict-aliasing -Wno-unused-parameter -fno-omit-frame-pointer")
  97. macro(use_cxx11)
  98. if(CMAKE_VERSION VERSION_LESS "3.1.3")
  99. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  100. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  101. endif()
  102. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  103. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  104. endif()
  105. else()
  106. set(CMAKE_CXX_STANDARD 11)
  107. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  108. endif()
  109. endmacro(use_cxx11)
  110. use_cxx11()
  111. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  112. #required by butil/crc32.cc to boost performance for 10x
  113. if((CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4))
  114. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4 -msse4.2")
  115. elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64"))
  116. # segmentation fault in libcontext
  117. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-gcse")
  118. endif()
  119. if(NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
  120. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-aligned-new")
  121. endif()
  122. endif()
  123. find_package(Protobuf REQUIRED)
  124. find_package(Threads REQUIRED)
  125. find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h)
  126. find_library(LEVELDB_LIB NAMES leveldb)
  127. if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB))
  128. message(FATAL_ERROR "Fail to find leveldb")
  129. endif()
  130. if(WITH_GLOG)
  131. find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h)
  132. find_library(GLOG_LIB NAMES glog)
  133. if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB))
  134. message(FATAL_ERROR "Fail to find glog")
  135. endif()
  136. include_directories(${GLOG_INCLUDE_PATH})
  137. endif()
  138. if(WITH_MESALINK)
  139. find_path(MESALINK_INCLUDE_PATH NAMES mesalink/openssl/ssl.h)
  140. find_library(MESALINK_LIB NAMES mesalink)
  141. if((NOT MESALINK_INCLUDE_PATH) OR (NOT MESALINK_LIB))
  142. message(FATAL_ERROR "Fail to find MesaLink")
  143. else()
  144. message(STATUS "Found MesaLink: ${MESALINK_LIB}")
  145. endif()
  146. include_directories(${MESALINK_INCLUDE_PATH})
  147. endif()
  148. find_library(PROTOC_LIB NAMES protoc)
  149. if(NOT PROTOC_LIB)
  150. message(FATAL_ERROR "Fail to find protoc lib")
  151. endif()
  152. if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  153. set(OPENSSL_ROOT_DIR
  154. "/usr/local/opt/openssl" # Homebrew installed OpenSSL
  155. )
  156. endif()
  157. find_package(OpenSSL)
  158. include_directories(
  159. ${GFLAGS_INCLUDE_PATH}
  160. ${PROTOBUF_INCLUDE_DIRS}
  161. ${LEVELDB_INCLUDE_PATH}
  162. ${OPENSSL_INCLUDE_DIR}
  163. )
  164. set(DYNAMIC_LIB
  165. ${GFLAGS_LIBRARY}
  166. ${PROTOBUF_LIBRARIES}
  167. ${LEVELDB_LIB}
  168. ${PROTOC_LIB}
  169. ${CMAKE_THREAD_LIBS_INIT}
  170. ${THRIFT_LIB}
  171. ${THRIFTNB_LIB}
  172. ${OPENSSL_CRYPTO_LIBRARY}
  173. dl
  174. z)
  175. if(WITH_MESALINK)
  176. list(APPEND DYNAMIC_LIB ${MESALINK_LIB})
  177. else()
  178. list(APPEND DYNAMIC_LIB ${OPENSSL_SSL_LIBRARY})
  179. endif()
  180. set(BRPC_PRIVATE_LIBS "-lgflags -lprotobuf -lleveldb -lprotoc -lssl -lcrypto -ldl -lz")
  181. if(WITH_GLOG)
  182. set(DYNAMIC_LIB ${DYNAMIC_LIB} ${GLOG_LIB})
  183. set(BRPC_PRIVATE_LIBS "${BRPC_PRIVATE_LIBS} -lglog")
  184. endif()
  185. if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  186. set(DYNAMIC_LIB ${DYNAMIC_LIB} rt)
  187. set(BRPC_PRIVATE_LIBS "${BRPC_PRIVATE_LIBS} -lrt")
  188. elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  189. set(DYNAMIC_LIB ${DYNAMIC_LIB}
  190. pthread
  191. "-framework CoreFoundation"
  192. "-framework CoreGraphics"
  193. "-framework CoreData"
  194. "-framework CoreText"
  195. "-framework Security"
  196. "-framework Foundation"
  197. "-Wl,-U,_MallocExtension_ReleaseFreeMemory"
  198. "-Wl,-U,_ProfilerStart"
  199. "-Wl,-U,_ProfilerStop")
  200. endif()
  201. # for *.so
  202. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/output/lib)
  203. # for *.a
  204. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/output/lib)
  205. # the reason why not using file(GLOB_RECURSE...) is that we want to
  206. # include different files on different platforms.
  207. set(BUTIL_SOURCES
  208. ${PROJECT_SOURCE_DIR}/src/butil/third_party/dmg_fp/g_fmt.cc
  209. ${PROJECT_SOURCE_DIR}/src/butil/third_party/dmg_fp/dtoa_wrapper.cc
  210. ${PROJECT_SOURCE_DIR}/src/butil/third_party/dynamic_annotations/dynamic_annotations.c
  211. ${PROJECT_SOURCE_DIR}/src/butil/third_party/icu/icu_utf.cc
  212. ${PROJECT_SOURCE_DIR}/src/butil/third_party/superfasthash/superfasthash.c
  213. ${PROJECT_SOURCE_DIR}/src/butil/third_party/modp_b64/modp_b64.cc
  214. ${PROJECT_SOURCE_DIR}/src/butil/third_party/symbolize/demangle.cc
  215. ${PROJECT_SOURCE_DIR}/src/butil/third_party/symbolize/symbolize.cc
  216. ${PROJECT_SOURCE_DIR}/src/butil/third_party/snappy/snappy-sinksource.cc
  217. ${PROJECT_SOURCE_DIR}/src/butil/third_party/snappy/snappy-stubs-internal.cc
  218. ${PROJECT_SOURCE_DIR}/src/butil/third_party/snappy/snappy.cc
  219. ${PROJECT_SOURCE_DIR}/src/butil/third_party/murmurhash3/murmurhash3.cpp
  220. ${PROJECT_SOURCE_DIR}/src/butil/arena.cpp
  221. ${PROJECT_SOURCE_DIR}/src/butil/at_exit.cc
  222. ${PROJECT_SOURCE_DIR}/src/butil/atomicops_internals_x86_gcc.cc
  223. ${PROJECT_SOURCE_DIR}/src/butil/base64.cc
  224. ${PROJECT_SOURCE_DIR}/src/butil/big_endian.cc
  225. ${PROJECT_SOURCE_DIR}/src/butil/cpu.cc
  226. ${PROJECT_SOURCE_DIR}/src/butil/debug/alias.cc
  227. ${PROJECT_SOURCE_DIR}/src/butil/debug/asan_invalid_access.cc
  228. ${PROJECT_SOURCE_DIR}/src/butil/debug/crash_logging.cc
  229. ${PROJECT_SOURCE_DIR}/src/butil/debug/debugger.cc
  230. ${PROJECT_SOURCE_DIR}/src/butil/debug/debugger_posix.cc
  231. ${PROJECT_SOURCE_DIR}/src/butil/debug/dump_without_crashing.cc
  232. ${PROJECT_SOURCE_DIR}/src/butil/debug/proc_maps_linux.cc
  233. ${PROJECT_SOURCE_DIR}/src/butil/debug/stack_trace.cc
  234. ${PROJECT_SOURCE_DIR}/src/butil/debug/stack_trace_posix.cc
  235. ${PROJECT_SOURCE_DIR}/src/butil/environment.cc
  236. ${PROJECT_SOURCE_DIR}/src/butil/files/file.cc
  237. ${PROJECT_SOURCE_DIR}/src/butil/files/file_posix.cc
  238. ${PROJECT_SOURCE_DIR}/src/butil/files/file_enumerator.cc
  239. ${PROJECT_SOURCE_DIR}/src/butil/files/file_enumerator_posix.cc
  240. ${PROJECT_SOURCE_DIR}/src/butil/files/file_path.cc
  241. ${PROJECT_SOURCE_DIR}/src/butil/files/file_path_constants.cc
  242. ${PROJECT_SOURCE_DIR}/src/butil/files/memory_mapped_file.cc
  243. ${PROJECT_SOURCE_DIR}/src/butil/files/memory_mapped_file_posix.cc
  244. ${PROJECT_SOURCE_DIR}/src/butil/files/scoped_file.cc
  245. ${PROJECT_SOURCE_DIR}/src/butil/files/scoped_temp_dir.cc
  246. ${PROJECT_SOURCE_DIR}/src/butil/file_util.cc
  247. ${PROJECT_SOURCE_DIR}/src/butil/file_util_posix.cc
  248. ${PROJECT_SOURCE_DIR}/src/butil/guid.cc
  249. ${PROJECT_SOURCE_DIR}/src/butil/guid_posix.cc
  250. ${PROJECT_SOURCE_DIR}/src/butil/hash.cc
  251. ${PROJECT_SOURCE_DIR}/src/butil/lazy_instance.cc
  252. ${PROJECT_SOURCE_DIR}/src/butil/location.cc
  253. ${PROJECT_SOURCE_DIR}/src/butil/memory/aligned_memory.cc
  254. ${PROJECT_SOURCE_DIR}/src/butil/memory/ref_counted.cc
  255. ${PROJECT_SOURCE_DIR}/src/butil/memory/ref_counted_memory.cc
  256. ${PROJECT_SOURCE_DIR}/src/butil/memory/singleton.cc
  257. ${PROJECT_SOURCE_DIR}/src/butil/memory/weak_ptr.cc
  258. ${PROJECT_SOURCE_DIR}/src/butil/posix/file_descriptor_shuffle.cc
  259. ${PROJECT_SOURCE_DIR}/src/butil/posix/global_descriptors.cc
  260. ${PROJECT_SOURCE_DIR}/src/butil/process_util.cc
  261. ${PROJECT_SOURCE_DIR}/src/butil/rand_util.cc
  262. ${PROJECT_SOURCE_DIR}/src/butil/rand_util_posix.cc
  263. ${PROJECT_SOURCE_DIR}/src/butil/fast_rand.cpp
  264. ${PROJECT_SOURCE_DIR}/src/butil/safe_strerror_posix.cc
  265. ${PROJECT_SOURCE_DIR}/src/butil/sha1_portable.cc
  266. ${PROJECT_SOURCE_DIR}/src/butil/strings/latin1_string_conversions.cc
  267. ${PROJECT_SOURCE_DIR}/src/butil/strings/nullable_string16.cc
  268. ${PROJECT_SOURCE_DIR}/src/butil/strings/safe_sprintf.cc
  269. ${PROJECT_SOURCE_DIR}/src/butil/strings/string16.cc
  270. ${PROJECT_SOURCE_DIR}/src/butil/strings/string_number_conversions.cc
  271. ${PROJECT_SOURCE_DIR}/src/butil/strings/string_split.cc
  272. ${PROJECT_SOURCE_DIR}/src/butil/strings/string_piece.cc
  273. ${PROJECT_SOURCE_DIR}/src/butil/strings/string_util.cc
  274. ${PROJECT_SOURCE_DIR}/src/butil/strings/string_util_constants.cc
  275. ${PROJECT_SOURCE_DIR}/src/butil/strings/stringprintf.cc
  276. ${PROJECT_SOURCE_DIR}/src/butil/strings/utf_offset_string_conversions.cc
  277. ${PROJECT_SOURCE_DIR}/src/butil/strings/utf_string_conversion_utils.cc
  278. ${PROJECT_SOURCE_DIR}/src/butil/strings/utf_string_conversions.cc
  279. ${PROJECT_SOURCE_DIR}/src/butil/synchronization/cancellation_flag.cc
  280. ${PROJECT_SOURCE_DIR}/src/butil/synchronization/condition_variable_posix.cc
  281. ${PROJECT_SOURCE_DIR}/src/butil/synchronization/waitable_event_posix.cc
  282. ${PROJECT_SOURCE_DIR}/src/butil/threading/non_thread_safe_impl.cc
  283. ${PROJECT_SOURCE_DIR}/src/butil/threading/platform_thread_posix.cc
  284. ${PROJECT_SOURCE_DIR}/src/butil/threading/simple_thread.cc
  285. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_checker_impl.cc
  286. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_collision_warner.cc
  287. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_id_name_manager.cc
  288. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_local_posix.cc
  289. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_local_storage.cc
  290. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_local_storage_posix.cc
  291. ${PROJECT_SOURCE_DIR}/src/butil/threading/thread_restrictions.cc
  292. ${PROJECT_SOURCE_DIR}/src/butil/threading/watchdog.cc
  293. ${PROJECT_SOURCE_DIR}/src/butil/time/clock.cc
  294. ${PROJECT_SOURCE_DIR}/src/butil/time/default_clock.cc
  295. ${PROJECT_SOURCE_DIR}/src/butil/time/default_tick_clock.cc
  296. ${PROJECT_SOURCE_DIR}/src/butil/time/tick_clock.cc
  297. ${PROJECT_SOURCE_DIR}/src/butil/time/time.cc
  298. ${PROJECT_SOURCE_DIR}/src/butil/time/time_posix.cc
  299. ${PROJECT_SOURCE_DIR}/src/butil/version.cc
  300. ${PROJECT_SOURCE_DIR}/src/butil/logging.cc
  301. ${PROJECT_SOURCE_DIR}/src/butil/class_name.cpp
  302. ${PROJECT_SOURCE_DIR}/src/butil/errno.cpp
  303. ${PROJECT_SOURCE_DIR}/src/butil/find_cstr.cpp
  304. ${PROJECT_SOURCE_DIR}/src/butil/status.cpp
  305. ${PROJECT_SOURCE_DIR}/src/butil/string_printf.cpp
  306. ${PROJECT_SOURCE_DIR}/src/butil/thread_local.cpp
  307. ${PROJECT_SOURCE_DIR}/src/butil/unix_socket.cpp
  308. ${PROJECT_SOURCE_DIR}/src/butil/endpoint.cpp
  309. ${PROJECT_SOURCE_DIR}/src/butil/fd_utility.cpp
  310. ${PROJECT_SOURCE_DIR}/src/butil/files/temp_file.cpp
  311. ${PROJECT_SOURCE_DIR}/src/butil/files/file_watcher.cpp
  312. ${PROJECT_SOURCE_DIR}/src/butil/time.cpp
  313. ${PROJECT_SOURCE_DIR}/src/butil/zero_copy_stream_as_streambuf.cpp
  314. ${PROJECT_SOURCE_DIR}/src/butil/crc32c.cc
  315. ${PROJECT_SOURCE_DIR}/src/butil/containers/case_ignored_flat_map.cpp
  316. ${PROJECT_SOURCE_DIR}/src/butil/iobuf.cpp
  317. ${PROJECT_SOURCE_DIR}/src/butil/binary_printer.cpp
  318. ${PROJECT_SOURCE_DIR}/src/butil/recordio.cc
  319. ${PROJECT_SOURCE_DIR}/src/butil/popen.cpp
  320. )
  321. if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  322. set(BUTIL_SOURCES ${BUTIL_SOURCES}
  323. ${PROJECT_SOURCE_DIR}/src/butil/file_util_linux.cc
  324. ${PROJECT_SOURCE_DIR}/src/butil/threading/platform_thread_linux.cc
  325. ${PROJECT_SOURCE_DIR}/src/butil/strings/sys_string_conversions_posix.cc)
  326. elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  327. set(BUTIL_SOURCES ${BUTIL_SOURCES}
  328. ${PROJECT_SOURCE_DIR}/src/butil/mac/bundle_locations.mm
  329. ${PROJECT_SOURCE_DIR}/src/butil/mac/foundation_util.mm
  330. ${PROJECT_SOURCE_DIR}/src/butil/file_util_mac.mm
  331. ${PROJECT_SOURCE_DIR}/src/butil/threading/platform_thread_mac.mm
  332. ${PROJECT_SOURCE_DIR}/src/butil/strings/sys_string_conversions_mac.mm
  333. ${PROJECT_SOURCE_DIR}/src/butil/time/time_mac.cc
  334. ${PROJECT_SOURCE_DIR}/src/butil/mac/scoped_mach_port.cc)
  335. endif()
  336. file(GLOB_RECURSE BVAR_SOURCES "${PROJECT_SOURCE_DIR}/src/bvar/*.cpp")
  337. file(GLOB_RECURSE BTHREAD_SOURCES "${PROJECT_SOURCE_DIR}/src/bthread/*.cpp")
  338. file(GLOB_RECURSE JSON2PB_SOURCES "${PROJECT_SOURCE_DIR}/src/json2pb/*.cpp")
  339. file(GLOB_RECURSE BRPC_SOURCES "${PROJECT_SOURCE_DIR}/src/brpc/*.cpp")
  340. file(GLOB_RECURSE THRIFT_SOURCES "${PROJECT_SOURCE_DIR}/src/brpc/thrift*.cpp")
  341. if(WITH_THRIFT)
  342. message("brpc compile with thrift protocol")
  343. else()
  344. # Remove thrift sources
  345. foreach(v ${THRIFT_SOURCES})
  346. list(REMOVE_ITEM BRPC_SOURCES ${v})
  347. endforeach()
  348. set(THRIFT_SOURCES "")
  349. endif()
  350. set(MCPACK2PB_SOURCES
  351. ${PROJECT_SOURCE_DIR}/src/mcpack2pb/field_type.cpp
  352. ${PROJECT_SOURCE_DIR}/src/mcpack2pb/mcpack2pb.cpp
  353. ${PROJECT_SOURCE_DIR}/src/mcpack2pb/parser.cpp
  354. ${PROJECT_SOURCE_DIR}/src/mcpack2pb/serializer.cpp)
  355. include(CompileProto)
  356. set(PROTO_FILES idl_options.proto
  357. brpc/rtmp.proto
  358. brpc/rpc_dump.proto
  359. brpc/get_favicon.proto
  360. brpc/span.proto
  361. brpc/builtin_service.proto
  362. brpc/get_js.proto
  363. brpc/errno.proto
  364. brpc/nshead_meta.proto
  365. brpc/options.proto
  366. brpc/policy/baidu_rpc_meta.proto
  367. brpc/policy/hulu_pbrpc_meta.proto
  368. brpc/policy/public_pbrpc_meta.proto
  369. brpc/policy/sofa_pbrpc_meta.proto
  370. brpc/policy/mongo.proto
  371. brpc/trackme.proto
  372. brpc/streaming_rpc_meta.proto
  373. brpc/proto_base.proto)
  374. file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/output/include/brpc)
  375. set(PROTOC_FLAGS ${PROTOC_FLAGS} -I${PROTOBUF_INCLUDE_DIR})
  376. compile_proto(PROTO_HDRS PROTO_SRCS ${PROJECT_BINARY_DIR}
  377. ${PROJECT_BINARY_DIR}/output/include
  378. ${PROJECT_SOURCE_DIR}/src
  379. "${PROTO_FILES}")
  380. add_library(PROTO_LIB OBJECT ${PROTO_SRCS} ${PROTO_HDRS})
  381. set(SOURCES
  382. ${BVAR_SOURCES}
  383. ${BTHREAD_SOURCES}
  384. ${JSON2PB_SOURCES}
  385. ${MCPACK2PB_SOURCES}
  386. ${BRPC_SOURCES}
  387. ${THRIFT_SOURCES}
  388. )
  389. add_subdirectory(src)
  390. if(BUILD_UNIT_TESTS)
  391. enable_testing()
  392. add_subdirectory(test)
  393. endif()
  394. add_subdirectory(tools)
  395. file(COPY ${CMAKE_CURRENT_BINARY_DIR}/brpc/
  396. DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/brpc/
  397. FILES_MATCHING
  398. PATTERN "*.h"
  399. PATTERN "*.hpp"
  400. )
  401. file(COPY ${PROJECT_SOURCE_DIR}/src/
  402. DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/
  403. FILES_MATCHING
  404. PATTERN "*.h"
  405. PATTERN "*.hpp"
  406. )
  407. install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/output/include/
  408. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  409. FILES_MATCHING
  410. PATTERN "*.h"
  411. PATTERN "*.hpp"
  412. )
  413. # Install pkgconfig
  414. configure_file(cmake/brpc.pc.in ${PROJECT_BINARY_DIR}/brpc.pc @ONLY)
  415. install(FILES ${PROJECT_BINARY_DIR}/brpc.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)