diff --git a/CMakeLists.txt b/CMakeLists.txt index 35365b27..53c5fffd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ option(WITH_THRIFT "With thrift framed protocol supported" OFF) option(WITH_SNAPPY "With snappy" OFF) option(WITH_RDMA "With RDMA" OFF) option(BUILD_UNIT_TESTS "Whether to build unit tests" OFF) -option(BUILD_BRPC_TOOLS "Whether to build brpc tools" ON) +option(BUILD_BRPC_TOOLS "Whether to build brpc tools" OFF) option(DOWNLOAD_GTEST "Download and build a fresh copy of googletest. Requires Internet access." ON) # Enable MACOSX_RPATH. Run "cmake --help-policy CMP0042" for policy details. @@ -66,7 +66,8 @@ endif() if(WITH_THRIFT) set(THRIFT_CPP_FLAG "-DENABLE_THRIFT_FRAMED_PROTOCOL") - set(THRIFT_LIB "thrift") + find_package(Thrift CONFIG REQUIRED) + set(THRIFT_LIB "thrift::thrift") endif() set(WITH_RDMA_VAL "0") @@ -150,14 +151,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() endif() -find_package(Protobuf REQUIRED) +find_package(protobuf CONFIG REQUIRED) +get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) +set(PROTOBUF_LIBRARIES protobuf::libprotobuf) find_package(Threads REQUIRED) -find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h) -find_library(LEVELDB_LIB NAMES leveldb) -if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) - message(FATAL_ERROR "Fail to find leveldb") -endif() +find_package(leveldb CONFIG REQUIRED) +set(LEVELDB_INCLUDE_PATH ${PROTOBUF_INCLUDE_DIR}) +set(LEVELDB_LIB leveldb::leveldb) if(WITH_SNAPPY) find_path(SNAPPY_INCLUDE_PATH NAMES snappy.h) @@ -169,8 +170,9 @@ if(WITH_SNAPPY) endif() if(WITH_GLOG) - find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h) - find_library(GLOG_LIB NAMES glog) + find_package(glog CONFIG REQUIRED) + get_target_property(GLOG_INCLUDE_PATH glog::glog INTERFACE_INCLUDE_DIRECTORIES) + set(GLOG_LIB glog::glog) if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB)) message(FATAL_ERROR "Fail to find glog") endif() @@ -197,7 +199,7 @@ if(WITH_RDMA) endif() endif() -find_library(PROTOC_LIB NAMES protoc) +set(PROTOC_LIB "protobuf::libprotoc") if(NOT PROTOC_LIB) message(FATAL_ERROR "Fail to find protoc lib") endif() @@ -208,7 +210,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") ) endif() -find_package(OpenSSL) +find_package(OpenSSL REQUIRED) include_directories( ${GFLAGS_INCLUDE_PATH} @@ -223,9 +225,9 @@ set(DYNAMIC_LIB ${LEVELDB_LIB} ${PROTOC_LIB} ${CMAKE_THREAD_LIBS_INIT} - ${THRIFT_LIB} - ${THRIFTNB_LIB} ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + ${THRIFT_LIB} dl z) diff --git a/cmake/FindGFLAGS.cmake b/cmake/FindGFLAGS.cmake index dfad5fd8..8423d55a 100644 --- a/cmake/FindGFLAGS.cmake +++ b/cmake/FindGFLAGS.cmake @@ -24,7 +24,9 @@ if (GFLAGS_STATIC) set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif (WIN32) endif (GFLAGS_STATIC) -find_library(GFLAGS_LIBRARY NAMES gflags libgflags) +find_package(gflags CONFIG REQUIRED) +set(GFLAGS_LIBRARY gflags::gflags) +get_target_property(GFLAGS_INCLUDE_PATH gflags::gflags INTERFACE_INCLUDE_DIRECTORIES) if(GFLAGS_INCLUDE_PATH AND GFLAGS_LIBRARY) set(GFLAGS_FOUND TRUE) endif(GFLAGS_INCLUDE_PATH AND GFLAGS_LIBRARY) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fbcc7cc5..c2d0d7bb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,16 +31,24 @@ add_dependencies(SOURCES_LIB PROTO_LIB) set_property(TARGET ${SOURCES_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) set_property(TARGET ${BUTIL_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) +if(NOT BUILD_SHARED_LIBS) add_library(brpc-static STATIC $ $ $) -if(BRPC_WITH_THRIFT) +if(WITH_THRIFT) target_link_libraries(brpc-static thrift) endif() +target_link_libraries(brpc-static PUBLIC ${DYNAMIC_LIB}) +if(BRPC_WITH_GLOG) + target_link_libraries(brpc-static ${GLOG_LIB}) +endif() +target_include_directories(brpc-static PUBLIC $) SET_TARGET_PROPERTIES(brpc-static PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) +endif() +if(0) # for protoc-gen-mcpack set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/output/bin) @@ -49,35 +57,57 @@ set(protoc_gen_mcpack_SOURCES ) add_executable(protoc-gen-mcpack ${protoc_gen_mcpack_SOURCES}) +endif() if(BUILD_SHARED_LIBS) add_library(brpc-shared SHARED $ $ $) - target_link_libraries(brpc-shared ${DYNAMIC_LIB}) + target_include_directories(brpc-shared PUBLIC $) if(BRPC_WITH_GLOG) target_link_libraries(brpc-shared ${GLOG_LIB}) endif() - if(BRPC_WITH_THRIFT) + if(WITH_THRIFT) target_link_libraries(brpc-shared thrift) endif() SET_TARGET_PROPERTIES(brpc-shared PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) target_link_libraries(protoc-gen-mcpack brpc-shared ${DYNAMIC_LIB} pthread) - install(TARGETS brpc-shared + install(TARGETS brpc-shared EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) else() - target_link_libraries(protoc-gen-mcpack brpc-static ${DYNAMIC_LIB} pthread) endif() -install(TARGETS brpc-static +if(NOT BUILD_SHARED_LIBS) +install(TARGETS brpc-static EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) +endif() +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/unofficial-brpc-config.cmake" +[[include(CMakeFindDependencyMacro) +find_dependency(OpenSSL) +find_dependency(Threads) +find_dependency(gflags CONFIG) +find_dependency(protobuf CONFIG) +find_dependency(leveldb CONFIG) +find_dependency(Thrift CONFIG) +find_dependency(glog CONFIG) +file(GLOB TARGET_FILES "${CMAKE_CURRENT_LIST_DIR}/unofficial-brpcTargets.cmake") +foreach (TARGET_FILE ${TARGET_FILES}) + include("${TARGET_FILE}") +endforeach() +]]) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/unofficial-brpc-config.cmake" DESTINATION share/unofficial-brpc) + +install(EXPORT unofficial-brpcTargets + NAMESPACE unofficial::brpc:: + DESTINATION share/unofficial-brpc +)