diff --git a/CMakeLists.txt b/CMakeLists.txt index 057695af..ed4979f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,7 +63,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() include(GNUInstallDirs) @@ -142,18 +143,21 @@ 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) +find_package(leveldb CONFIG REQUIRED) +set(LEVELDB_INCLUDE_PATH ${PROTOBUF_INCLUDE_DIR}) +set(LEVELDB_LIB leveldb::leveldb) if ((NOT LEVELDB_INCLUDE_PATH) OR (NOT LEVELDB_LIB)) message(FATAL_ERROR "Fail to find leveldb") 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() @@ -171,7 +175,7 @@ if(WITH_MESALINK) include_directories(${MESALINK_INCLUDE_PATH}) 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() @@ -182,7 +186,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") ) endif() -find_package(OpenSSL) +find_package(OpenSSL REQUIRED) include_directories( ${GFLAGS_INCLUDE_PATH} @@ -197,9 +201,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) @@ -434,7 +438,9 @@ if(BUILD_UNIT_TESTS) enable_testing() add_subdirectory(test) endif() +if(BUILD_TOOLS) add_subdirectory(tools) +endif() file(COPY ${CMAKE_CURRENT_BINARY_DIR}/brpc/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/output/include/brpc/ diff --git a/cmake/FindGFLAGS.cmake b/cmake/FindGFLAGS.cmake index dfad5fd8..83a167f0 100644 --- a/cmake/FindGFLAGS.cmake +++ b/cmake/FindGFLAGS.cmake @@ -15,7 +15,8 @@ set(_gflags_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) -find_path(GFLAGS_INCLUDE_PATH gflags/gflags.h) +find_package(gflags CONFIG REQUIRED) +get_target_property(GFLAGS_INCLUDE_PATH gflags::gflags INTERFACE_INCLUDE_DIRECTORIES) if (GFLAGS_STATIC) if (WIN32) @@ -24,7 +25,7 @@ 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) +set(GFLAGS_LIBRARY gflags::gflags) 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 ee616eb1..35a5b48e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,45 +31,77 @@ 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) -add_library(brpc-shared SHARED $ +if (BUILD_SHARED_LIBS) +add_library(brpc-shared SHARED $ $ $) +else() add_library(brpc-static STATIC $ $ $) - -target_link_libraries(brpc-shared ${DYNAMIC_LIB}) +endif() +if (BUILD_SHARED_LIBS) +target_include_directories(brpc-shared PUBLIC $) +target_link_libraries(brpc-shared PUBLIC ${DYNAMIC_LIB}) +else() +target_include_directories(brpc-static PUBLIC $) +target_link_libraries(brpc-static PUBLIC ${DYNAMIC_LIB}) +endif() if(BRPC_WITH_GLOG) + if (BUILD_SHARED_LIBS) target_link_libraries(brpc-shared ${GLOG_LIB}) + else() + target_link_libraries(brpc-static ${GLOG_LIB}) + endif() endif() if(BRPC_WITH_THRIFT) + if (BUILD_SHARED_LIBS) target_link_libraries(brpc-shared thrift) + else() target_link_libraries(brpc-static thrift) + endif() endif() +if (NOT BUILD_SHARED_LIBS) SET_TARGET_PROPERTIES(brpc-static PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) +else() SET_TARGET_PROPERTIES(brpc-shared PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) +endif() -# for protoc-gen-mcpack -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/output/bin) - -set(protoc_gen_mcpack_SOURCES - ${PROJECT_SOURCE_DIR}/src/mcpack2pb/generator.cpp - ) -add_executable(protoc-gen-mcpack ${protoc_gen_mcpack_SOURCES}) -target_link_libraries(protoc-gen-mcpack brpc-shared) - #install directory -install(TARGETS brpc-shared +if (BUILD_SHARED_LIBS) +install(TARGETS brpc-shared EXPORT unofficial-brpcTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) - -install(TARGETS brpc-static +else() +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 +)