diff --git a/CMakeLists.txt b/CMakeLists.txt index 92f7114..f60e395 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,8 @@ endif() if(WITH_THRIFT) set(THRIFT_CPP_FLAG "-DENABLE_THRIFT_FRAMED_PROTOCOL") - find_library(THRIFT_LIB NAMES thrift) + find_package(Thrift CONFIG REQUIRED) + set(THRIFT_LIB "thrift::thrift") if (NOT THRIFT_LIB) message(FATAL_ERROR "Fail to find Thrift") endif() @@ -115,7 +116,10 @@ configure_file(${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_SOURCE_DIR}/src/butil list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -find_package(GFLAGS REQUIRED) +set(GFLAGS_USE_TARGET_NAMESPACE ON) +find_package(gflags CONFIG REQUIRED) +set(GFLAGS_INCLUDE_PATH "") +set(GFLAGS_LIBRARY gflags::gflags) include_directories( ${PROJECT_SOURCE_DIR}/src @@ -177,12 +181,17 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() find_package(Protobuf REQUIRED) +get_target_property(PROTOBUF_INCLUDE_DIR protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) +set(PROTOBUF_INCLUDE_DIRS "") +set(PROTOBUF_LIBRARIES protobuf::libprotobuf) if(Protobuf_VERSION GREATER 4.21) # required by absl set(CMAKE_CXX_STANDARD 17) find_package(absl REQUIRED CONFIG) set(protobuf_ABSL_USED_TARGETS + "") + set(protobuf_ABSL_provided_by_vcpkg absl::absl_check absl::absl_log absl::algorithm @@ -222,29 +231,21 @@ else() use_cxx11() endif() find_package(Threads REQUIRED) +find_package(ZLIB REQUIRED) +add_library(z ALIAS ZLIB::ZLIB) -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 "") +set(LEVELDB_LIB leveldb::leveldb) if(WITH_SNAPPY) - find_path(SNAPPY_INCLUDE_PATH NAMES snappy.h) - find_library(SNAPPY_LIB NAMES snappy) - if ((NOT SNAPPY_INCLUDE_PATH) OR (NOT SNAPPY_LIB)) - message(FATAL_ERROR "Fail to find snappy") - endif() - include_directories(${SNAPPY_INCLUDE_PATH}) + find_package(Snappy CONFIG REQUIRED) + set(SNAPPY_LIB Snappy::snappy) endif() if(WITH_GLOG) - find_path(GLOG_INCLUDE_PATH NAMES glog/logging.h) - find_library(GLOG_LIB NAMES glog) - if((NOT GLOG_INCLUDE_PATH) OR (NOT GLOG_LIB)) - message(FATAL_ERROR "Fail to find glog") - endif() - include_directories(${GLOG_INCLUDE_PATH}) + find_package(glog CONFIG REQUIRED) + set(GLOG_LIB glog::glog) endif() if(WITH_MESALINK) @@ -267,7 +268,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() @@ -277,9 +278,6 @@ if(WITH_BORINGSSL) include_directories(${BORINGSSL_INCLUDE_DIR}) else() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT OPENSSL_ROOT_DIR) - set(OPENSSL_ROOT_DIR - "/usr/local/opt/openssl" # Homebrew installed OpenSSL - ) endif() find_package(OpenSSL) @@ -305,6 +303,8 @@ set(DYNAMIC_LIB if(WITH_BORINGSSL) list(APPEND DYNAMIC_LIB ${BORINGSSL_SSL_LIBRARY}) list(APPEND DYNAMIC_LIB ${BORINGSSL_CRYPTO_LIBRARY}) +elseif(1) + list(APPEND DYNAMIC_LIB OpenSSL::SSL) else() list(APPEND DYNAMIC_LIB ${OPENSSL_CRYPTO_LIBRARY}) if(WITH_MESALINK) @@ -318,7 +318,8 @@ if(WITH_RDMA) list(APPEND DYNAMIC_LIB ${RDMA_LIB}) endif() -set(BRPC_PRIVATE_LIBS "-lgflags -lprotobuf -lleveldb -lprotoc -lssl -lcrypto -ldl -lz") +set(BRPC_PRIVATE_LIBS "-lleveldb -lprotoc -ldl") +set(BRPC_PRIVATE_REQUIRES "gflags protobuf openssl zlib") if(WITH_GLOG) set(DYNAMIC_LIB ${GLOG_LIB} ${DYNAMIC_LIB}) @@ -327,7 +328,7 @@ endif() if(WITH_SNAPPY) set(DYNAMIC_LIB ${DYNAMIC_LIB} ${SNAPPY_LIB}) - set(BRPC_PRIVATE_LIBS "${BRPC_PRIVATE_LIBS} -lsnappy") + set(BRPC_PRIVATE_REQUIRES "${BRPC_PRIVATE_LIBS} snappy") endif() if (WITH_BTHREAD_TRACER) @@ -551,6 +552,7 @@ compile_proto(PROTO_HDRS PROTO_SRCS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src "${PROTO_FILES}") add_library(PROTO_LIB OBJECT ${PROTO_SRCS} ${PROTO_HDRS}) +target_link_libraries(PROTO_LIB PUBLIC ${DYNAMIC_LIB}) set(SOURCES ${BVAR_SOURCES} diff --git a/cmake/brpc.pc.in b/cmake/brpc.pc.in index 723dab4..36277cd 100644 --- a/cmake/brpc.pc.in +++ b/cmake/brpc.pc.in @@ -24,3 +24,4 @@ Version: @BRPC_VERSION@ Cflags: -I${includedir} Libs: -L${libdir}/ -lbrpc Libs.private: @BRPC_PRIVATE_LIBS@ +Requires.private: @BRPC_PRIVATE_REQUIRES@ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1b4b233..e0bdb64 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,6 +26,10 @@ include_directories(${PROJECT_SOURCE_DIR}/src) add_library(BUTIL_LIB OBJECT ${BUTIL_SOURCES}) add_library(SOURCES_LIB OBJECT ${SOURCES}) add_dependencies(SOURCES_LIB PROTO_LIB) +if(WITH_GLOG) + target_link_libraries(BUTIL_LIB PRIVATE glog::glog) + target_link_libraries(SOURCES_LIB PRIVATE glog::glog) +endif() # shared library needs POSITION_INDEPENDENT_CODE set_property(TARGET ${SOURCES_LIB} PROPERTY POSITION_INDEPENDENT_CODE 1) @@ -58,10 +62,9 @@ function(check_thrift_version target_arg) endif() endfunction() +target_link_libraries(brpc-static PUBLIC ${DYNAMIC_LIB}) if(WITH_THRIFT) - target_link_libraries(brpc-static ${THRIFT_LIB}) - check_thrift_version(brpc-static) endif() SET_TARGET_PROPERTIES(brpc-static PROPERTIES OUTPUT_NAME brpc CLEAN_DIRECT_OUTPUT 1) @@ -74,24 +77,25 @@ set(protoc_gen_mcpack_SOURCES ) add_executable(protoc-gen-mcpack ${protoc_gen_mcpack_SOURCES}) +set_target_properties(protoc-gen-mcpack PROPERTIES EXCLUDE_FROM_ALL 1) if(BUILD_SHARED_LIBS) + set_target_properties(brpc-static PROPERTIES EXCLUDE_FROM_ALL 1) add_library(brpc-shared SHARED $ $ $) - target_link_libraries(brpc-shared ${DYNAMIC_LIB}) + target_link_libraries(brpc-shared PUBLIC ${DYNAMIC_LIB}) if(WITH_GLOG) - target_link_libraries(brpc-shared ${GLOG_LIB}) endif() if(WITH_THRIFT) - target_link_libraries(brpc-shared ${THRIFT_LIB}) - check_thrift_version(brpc-shared) 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) + target_include_directories(brpc-shared PUBLIC $) install(TARGETS brpc-shared + EXPORT unofficial-brpc-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -102,8 +106,38 @@ endif() +if(NOT BUILD_SHARED_LIBS) +target_include_directories(brpc-static PUBLIC $) install(TARGETS brpc-static + EXPORT unofficial-brpc-targets 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) +include("${CMAKE_CURRENT_LIST_DIR}/unofficial-brpc-targets.cmake") +if(NOT TARGET unofficial::brpc::brpc) + if(TARGET unofficial::brpc::brpc-static) + add_library(unofficial::brpc::brpc ALIAS unofficial::brpc::brpc-static) + else() + add_library(unofficial::brpc::brpc ALIAS unofficial::brpc::brpc-shared) + endif() +endif() +]]) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/unofficial-brpc-config.cmake" DESTINATION share/unofficial-brpc) + +install(EXPORT unofficial-brpc-targets + NAMESPACE unofficial::brpc:: + DESTINATION share/unofficial-brpc +)