mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-31 07:55:38 +08:00
314 lines
9.1 KiB
Plaintext
314 lines
9.1 KiB
Plaintext
### This file is copyed from pulsar, and deleted add custom target "format".
|
|
|
|
cmake_minimum_required(VERSION 3.4)
|
|
project (pulsar-cpp)
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules")
|
|
|
|
find_program(CCACHE_PROGRAM ccache)
|
|
if(CCACHE_PROGRAM)
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER "ccache")
|
|
MESSAGE(STATUS "Using CCache")
|
|
endif(CCACHE_PROGRAM)
|
|
|
|
MESSAGE(STATUS "ARCHITECTURE: ${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
|
option(BUILD_TESTS "Build tests" ON)
|
|
MESSAGE(STATUS "BUILD_TESTS: " ${BUILD_TESTS})
|
|
|
|
option(BUILD_PYTHON_WRAPPER "Build Pulsar Python wrapper" ON)
|
|
MESSAGE(STATUS "BUILD_PYTHON_WRAPPER: " ${BUILD_PYTHON_WRAPPER})
|
|
|
|
option(LINK_STATIC "Link against static libraries" OFF)
|
|
MESSAGE(STATUS "LINK_STATIC: " ${LINK_STATIC})
|
|
|
|
option(USE_LOG4CXX "Build with Log4cxx support" OFF)
|
|
MESSAGE(STATUS "USE_LOG4CXX: " ${USE_LOG4CXX})
|
|
|
|
IF (CMAKE_BUILD_TYPE STREQUAL "")
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
ENDIF ()
|
|
|
|
MESSAGE(STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
|
|
|
|
set(Boost_NO_BOOST_CMAKE ON)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_C_STANDARD 11)
|
|
|
|
if (MSVC)
|
|
# Visual Studio compiler flags
|
|
add_definitions(-DWIN32_LEAN_AND_MEAN -DNOGDI -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS)
|
|
add_compile_options(/wd4244 /wd4267 /wd4018 /wd4715 /wd4251 /wd4275)
|
|
else()
|
|
add_compile_options(-Werror=switch -Wno-deprecated-declarations)
|
|
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
|
|
add_compile_options(-msse4.2 -mpclmul)
|
|
endif()
|
|
endif(MSVC)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
set(Protobuf_LITE_LIBRARIES $ENV{PROTOBUF_LIBRARIES})
|
|
set(LOG_CATEGORY_NAME $ENV{LOG_CATEGORY_NAME})
|
|
|
|
if (NOT LOG_CATEGORY_NAME)
|
|
set(LOG_CATEGORY_NAME "\"pulsar.\"")
|
|
endif(NOT LOG_CATEGORY_NAME)
|
|
|
|
add_definitions(-DLOG_CATEGORY_NAME=${LOG_CATEGORY_NAME} -DBUILDING_PULSAR -DBOOST_ALL_NO_LIB -DBOOST_ALLOW_DEPRECATED_HEADERS)
|
|
|
|
### This part is to find and keep SSL dynamic libs in RECORD_OPENSSL_SSL_LIBRARY and RECORD_OPENSSL_CRYPTO_LIBRARY
|
|
### After find the libs, will unset related cache, and will not affact another same call to find_package.
|
|
if (APPLE)
|
|
set(OPENSSL_INCLUDE_DIR /usr/local/opt/openssl/include/)
|
|
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl/)
|
|
endif ()
|
|
|
|
set(OPENSSL_ROOT_DIR /usr/lib64/)
|
|
set(OPENSSL_USE_STATIC_LIBS FALSE)
|
|
find_package(OpenSSL REQUIRED)
|
|
set(RECORD_OPENSSL_SSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
|
|
set(RECORD_OPENSSL_CRYPTO_LIBRARY ${OPENSSL_CRYPTO_LIBRARY})
|
|
|
|
unset(OPENSSL_FOUND CACHE)
|
|
unset(OPENSSL_INCLUDE_DIR CACHE)
|
|
unset(OPENSSL_CRYPTO_LIBRARY CACHE)
|
|
unset(OPENSSL_CRYPTO_LIBRARIES CACHE)
|
|
unset(OPENSSL_SSL_LIBRARY CACHE)
|
|
unset(OPENSSL_SSL_LIBRARIES CACHE)
|
|
unset(OPENSSL_LIBRARIES CACHE)
|
|
unset(OPENSSL_VERSION CACHE)
|
|
|
|
if (LINK_STATIC)
|
|
find_library(ZLIB_LIBRARIES REQUIRED NAMES libz.a z zlib)
|
|
find_library(Protobuf_LITE_LIBRARIES NAMES libprotobuf-lite.a libprotobuf-lite)
|
|
find_library(CURL_LIBRARIES NAMES libcurl.a curl curl_a libcurl_a)
|
|
find_library(LIB_ZSTD NAMES libzstd.a)
|
|
find_library(LIB_SNAPPY NAMES libsnappy.a)
|
|
|
|
if (USE_LOG4CXX)
|
|
if (LOG4CXX_USE_DYNAMIC_LIBS)
|
|
find_library(LOG4CXX_LIBRARY_PATH log4cxx)
|
|
else ()
|
|
find_library(LOG4CXX_LIBRARY_PATH NAMES liblog4cxx.a)
|
|
|
|
# Libraries needed by log4cxx to link statically with
|
|
find_library(APR_LIBRARY_PATH NAMES libapr-1 PATHS /usr/lib /usr/local/apr/lib /usr/local/opt/apr/libexec/lib/)
|
|
find_library(APR_UTIL_LIBRARY_PATH NAMES libaprutil-1 PATHS /usr/lib /usr/local/apr/lib /usr/local/opt/apr-util/libexec/lib/)
|
|
find_library(EXPAT_LIBRARY_PATH NAMES libexpat expat)
|
|
if (APPLE)
|
|
find_library(ICONV_LIBRARY_PATH NAMES libiconv iconv)
|
|
else ()
|
|
set(ICONV_LIBRARY_PATH )
|
|
endif (APPLE)
|
|
endif (LOG4CXX_USE_DYNAMIC_LIBS)
|
|
endif (USE_LOG4CXX)
|
|
|
|
if (MSVC)
|
|
add_definitions(-DCURL_STATICLIB)
|
|
endif()
|
|
|
|
if (UNIX AND NOT APPLE)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
|
endif()
|
|
|
|
SET(Boost_USE_STATIC_LIBS ON)
|
|
SET(OPENSSL_USE_STATIC_LIBS TRUE)
|
|
else()
|
|
# Link to shared libraries
|
|
find_package(ZLIB REQUIRED)
|
|
set(ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
|
|
if (NOT PROTOBUF_LIBRARIES)
|
|
find_package(ProtoBuf QUIET)
|
|
if (NOT Protobuf_FOUND OR NOT Protobuf_LITE_LIBRARIES)
|
|
find_library(Protobuf_LITE_LIBRARIES protobuf-lite libprotobuf-lite)
|
|
find_path(Protobuf_INCLUDE_DIRS google/protobuf/stubs/common.h)
|
|
endif()
|
|
endif (NOT PROTOBUF_LIBRARIES)
|
|
|
|
find_library(LIB_ZSTD zstd)
|
|
find_library(LIB_SNAPPY NAMES snappy libsnappy)
|
|
find_library(CURL_LIBRARIES NAMES curl libcurl)
|
|
|
|
if (USE_LOG4CXX)
|
|
find_library(LOG4CXX_LIBRARY_PATH log4cxx)
|
|
find_path(LOG4CXX_INCLUDE_PATH log4cxx/logger.h)
|
|
endif (USE_LOG4CXX)
|
|
endif (LINK_STATIC)
|
|
|
|
if (MSVC)
|
|
find_package(Boost REQUIRED COMPONENTS program_options regex system date_time)
|
|
else()
|
|
find_package(Boost REQUIRED COMPONENTS program_options regex system)
|
|
endif()
|
|
|
|
if (BUILD_PYTHON_WRAPPER)
|
|
find_package(PythonLibs REQUIRED)
|
|
MESSAGE(STATUS "PYTHON: " ${PYTHONLIBS_VERSION_STRING})
|
|
|
|
if (PYTHONLIBS_VERSION_STRING MATCHES "^3.+$")
|
|
MESSAGE(STATUS "DETECTED Python 3")
|
|
string(REPLACE "." ";" PYTHONLIBS_VERSION_NO_LIST ${PYTHONLIBS_VERSION_STRING})
|
|
list(GET PYTHONLIBS_VERSION_NO_LIST 0 PYTHONLIBS_VERSION_MAJOR)
|
|
list(GET PYTHONLIBS_VERSION_NO_LIST 1 PYTHONLIBS_VERSION_MINOR)
|
|
set(BOOST_PYTHON_NAME_POSTFIX ${PYTHONLIBS_VERSION_MAJOR}${PYTHONLIBS_VERSION_MINOR})
|
|
# For python3 the lib name is boost_python3
|
|
set(BOOST_PYTHON_NAME_LIST python36;python37;python38;python3;python3-mt;python-py${BOOST_PYTHON_NAME_POSTFIX};python${BOOST_PYTHON_NAME_POSTFIX}-mt;python${BOOST_PYTHON_NAME_POSTFIX})
|
|
else ()
|
|
# Regular boost_python
|
|
set(BOOST_PYTHON_NAME_LIST python;python-mt;python-py27;python27-mt;python27)
|
|
endif ()
|
|
|
|
foreach (BOOST_PYTHON_NAME IN LISTS BOOST_PYTHON_NAME_LIST)
|
|
find_package(Boost QUIET COMPONENTS ${BOOST_PYTHON_NAME})
|
|
if (${Boost_FOUND})
|
|
set(BOOST_PYTHON_NAME_FOUND ${BOOST_PYTHON_NAME})
|
|
break()
|
|
endif()
|
|
endforeach()
|
|
|
|
if (NOT ${Boost_FOUND})
|
|
MESSAGE(FATAL_ERROR "Could not find Boost Python library")
|
|
endif ()
|
|
|
|
find_package(Boost REQUIRED COMPONENTS ${BOOST_PYTHON_NAME_FOUND})
|
|
endif (BUILD_PYTHON_WRAPPER)
|
|
|
|
if (APPLE)
|
|
set(OPENSSL_INCLUDE_DIR /usr/local/opt/openssl/include/)
|
|
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl/)
|
|
endif ()
|
|
|
|
find_package(OpenSSL REQUIRED)
|
|
|
|
if (BUILD_TESTS)
|
|
find_path(GTEST_INCLUDE_PATH gtest/gtest.h)
|
|
find_path(GMOCK_INCLUDE_PATH gmock/gmock.h)
|
|
endif ()
|
|
|
|
if (USE_LOG4CXX)
|
|
set(CMAKE_CXX_FLAGS " -DUSE_LOG4CXX ${CMAKE_CXX_FLAGS}")
|
|
find_path(LOG4CXX_INCLUDE_PATH log4cxx/logger.h)
|
|
endif (USE_LOG4CXX)
|
|
|
|
if (NOT APPLE AND NOT MSVC)
|
|
# we don't set options below to build _pulsar.so
|
|
set(CMAKE_CXX_FLAGS_PYTHON "${CMAKE_CXX_FLAGS}")
|
|
# Hide all non-exported symbols to avoid conflicts
|
|
add_compile_options(-fvisibility=hidden -Wl,--exclude-libs,ALL)
|
|
endif ()
|
|
|
|
if (LIB_ZSTD)
|
|
set(HAS_ZSTD 1)
|
|
else ()
|
|
set(HAS_ZSTD 0)
|
|
endif ()
|
|
MESSAGE(STATUS "HAS_ZSTD: ${HAS_ZSTD}")
|
|
|
|
if (LIB_SNAPPY)
|
|
set(HAS_SNAPPY 1)
|
|
else ()
|
|
set(HAS_SNAPPY 0)
|
|
endif ()
|
|
MESSAGE(STATUS "HAS_SNAPPY: ${HAS_SNAPPY}")
|
|
|
|
set(ADDITIONAL_LIBRARIES $ENV{PULSAR_ADDITIONAL_LIBRARIES})
|
|
link_directories( $ENV{PULSAR_ADDITIONAL_LIBRARY_PATH} )
|
|
|
|
set(AUTOGEN_DIR ${CMAKE_BINARY_DIR}/generated)
|
|
file(MAKE_DIRECTORY ${AUTOGEN_DIR})
|
|
|
|
include_directories(
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_SOURCE_DIR}/include
|
|
${AUTOGEN_DIR}
|
|
${Boost_INCLUDE_DIR}
|
|
${OPENSSL_INCLUDE_DIR}
|
|
${ZLIB_INCLUDE_DIRS}
|
|
${CURL_INCLUDE_DIRS}
|
|
${Protobuf_INCLUDE_DIRS}
|
|
${LOG4CXX_INCLUDE_PATH}
|
|
${GTEST_INCLUDE_PATH}
|
|
${GMOCK_INCLUDE_PATH}
|
|
)
|
|
|
|
set(COMMON_LIBS
|
|
${COMMON_LIBS}
|
|
${Boost_REGEX_LIBRARY}
|
|
${Boost_SYSTEM_LIBRARY}
|
|
${CURL_LIBRARIES}
|
|
${OPENSSL_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
${Protobuf_LITE_LIBRARIES}
|
|
${ADDITIONAL_LIBRARIES}
|
|
)
|
|
|
|
if (MSVC)
|
|
set(COMMON_LIBS
|
|
${COMMON_LIBS}
|
|
${Boost_DATE_TIME_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
if (NOT MSVC)
|
|
set(COMMON_LIBS
|
|
${COMMON_LIBS} -lpthread -lm
|
|
dl
|
|
pthread
|
|
)
|
|
else()
|
|
set(COMMON_LIBS
|
|
${COMMON_LIBS}
|
|
wldap32.lib
|
|
Normaliz.lib)
|
|
endif()
|
|
|
|
if (USE_LOG4CXX)
|
|
set(COMMON_LIBS
|
|
${COMMON_LIBS}
|
|
${LOG4CXX_LIBRARY_PATH}
|
|
${APR_LIBRARY_PATH}
|
|
${APR_UTIL_LIBRARY_PATH}
|
|
${EXPAT_LIBRARY_PATH}
|
|
${ICONV_LIBRARY_PATH}
|
|
)
|
|
endif ()
|
|
|
|
if (HAS_ZSTD)
|
|
set(COMMON_LIBS ${COMMON_LIBS} ${LIB_ZSTD} )
|
|
endif ()
|
|
|
|
add_definitions(-DHAS_ZSTD=${HAS_ZSTD})
|
|
|
|
if (HAS_SNAPPY)
|
|
set(COMMON_LIBS ${COMMON_LIBS} ${LIB_SNAPPY} )
|
|
endif ()
|
|
|
|
add_definitions(-DHAS_SNAPPY=${HAS_SNAPPY})
|
|
|
|
if(NOT APPLE AND NOT MSVC)
|
|
set(COMMON_LIBS ${COMMON_LIBS} rt)
|
|
endif ()
|
|
|
|
link_directories(${CMAKE_BINARY_DIR}/lib)
|
|
|
|
set(LIB_NAME $ENV{PULSAR_LIBRARY_NAME})
|
|
if (NOT LIB_NAME)
|
|
set(LIB_NAME pulsar)
|
|
endif(NOT LIB_NAME)
|
|
|
|
set(CLIENT_LIBS
|
|
${COMMON_LIBS}
|
|
${LIB_NAME}
|
|
)
|
|
|
|
add_subdirectory(lib)
|
|
add_subdirectory(perf)
|
|
add_subdirectory(examples)
|
|
|
|
if (BUILD_TESTS)
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
if (BUILD_PYTHON_WRAPPER)
|
|
add_subdirectory(python)
|
|
endif () |