diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ac815d6..dbb9b7ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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,11 +151,15 @@ 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_package(ZLIB REQUIRED) +find_package(leveldb CONFIG REQUIRED) find_path(LEVELDB_INCLUDE_PATH NAMES leveldb/db.h) -find_library(LEVELDB_LIB NAMES leveldb) +set(LEVELDB_LIB leveldb::leveldb) if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) message(FATAL_ERROR "Fail to find leveldb") endif() @@ -169,8 +174,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 +203,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 +214,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") ) endif() -find_package(OpenSSL) +find_package(OpenSSL REQUIRED) include_directories( ${GFLAGS_INCLUDE_PATH} @@ -223,11 +229,11 @@ 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) + ZLIB::ZLIB) if(WITH_MESALINK) list(APPEND DYNAMIC_LIB ${MESALINK_LIB}) 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..95037a0d 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) - target_link_libraries(brpc-static thrift) +if(WITH_THRIFT) + target_link_libraries(brpc-static ${THRIFT_LIB}) 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,62 @@ 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) - target_link_libraries(brpc-shared thrift) + if(WITH_THRIFT) + target_link_libraries(brpc-shared ${THRIFT_LIB}) endif() SET_TARGET_PROPERTIES(brpc-shared PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) - + if(0) target_link_libraries(protoc-gen-mcpack brpc-shared ${DYNAMIC_LIB} pthread) - - install(TARGETS brpc-shared + endif() + install(TARGETS brpc-shared EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) else() +if(0) target_link_libraries(protoc-gen-mcpack brpc-static ${DYNAMIC_LIB} pthread) endif() +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(ZLIB) +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 +)