mirror of https://github.com/milvus-io/milvus.git
132 lines
4.8 KiB
CMake
132 lines
4.8 KiB
CMake
cmake_minimum_required(VERSION 3.14...3.17 FATAL_ERROR)
|
|
project(wrapper)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
include( ExternalProject )
|
|
set( ARROW_VERSION "2.0.0" )
|
|
set( ARROW_SOURCE_URL
|
|
"https://github.com/apache/arrow/archive/apache-arrow-${ARROW_VERSION}.tar.gz")
|
|
|
|
if( CUSTOM_THIRDPARTY_DOWNLOAD_PATH )
|
|
set( THIRDPARTY_DOWNLOAD_PATH ${CUSTOM_THIRDPARTY_DOWNLOAD_PATH} )
|
|
else()
|
|
set( THIRDPARTY_DOWNLOAD_PATH ${CMAKE_BINARY_DIR}/3rdparty_download/download )
|
|
endif()
|
|
message( STATUS "Thirdparty downloaded file path: ${THIRDPARTY_DOWNLOAD_PATH}" )
|
|
|
|
macro( build_arrow )
|
|
message( STATUS "Building ARROW-${ARROW_VERSION} from source" )
|
|
|
|
set( ARROW_CMAKE_ARGS
|
|
"-DARROW_WITH_LZ4=OFF"
|
|
"-DARROW_WITH_ZSTD=OFF"
|
|
"-DARROW_WITH_BROTLI=OFF"
|
|
"-DARROW_WITH_SNAPPY=OFF"
|
|
"-DARROW_WITH_ZLIB=OFF"
|
|
"-DARROW_BUILD_STATIC=ON"
|
|
"-DARROW_BUILD_SHARED=OFF"
|
|
"-DARROW_BOOST_USE_SHARED=OFF"
|
|
"-DARROW_BUILD_TESTS=OFF"
|
|
"-DARROW_TEST_MEMCHECK=OFF"
|
|
"-DARROW_BUILD_BENCHMARKS=OFF"
|
|
"-DARROW_CUDA=OFF"
|
|
"-DARROW_JEMALLOC=OFF"
|
|
"-DARROW_PYTHON=OFF"
|
|
"-DARROW_BUILD_UTILITIES=OFF"
|
|
"-DARROW_PARQUET=ON"
|
|
"-DPARQUET_BUILD_SHARED=OFF"
|
|
"-DThrift_SOURCE=BUNDLED"
|
|
"-Dutf8proc_SOURCE=BUNDLED"
|
|
"-DARROW_S3=OFF"
|
|
"-DCMAKE_VERBOSE_MAKEFILE=ON"
|
|
"-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}"
|
|
)
|
|
|
|
ExternalProject_Add(
|
|
arrow-ep
|
|
PREFIX ${CMAKE_BINARY_DIR}/3rdparty_download/arrow-subbuild
|
|
BINARY_DIR arrow-bin
|
|
DOWNLOAD_DIR ${THIRDPARTY_DOWNLOAD_PATH}
|
|
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
|
|
SOURCE_SUBDIR "cpp"
|
|
URL ${ARROW_SOURCE_URL}
|
|
URL_MD5 "37fbe42e7f155dd76cf6f63257373b24"
|
|
CMAKE_ARGS ${ARROW_CMAKE_ARGS}
|
|
${EP_LOG_OPTIONS}
|
|
)
|
|
|
|
ExternalProject_Get_Property( arrow-ep INSTALL_DIR )
|
|
ExternalProject_Get_Property( arrow-ep BINARY_DIR )
|
|
set( THRIFT_LOCATION ${BINARY_DIR}/thrift_ep-install )
|
|
set( UTF8PROC_LOCATION ${BINARY_DIR}/utf8proc_ep-install )
|
|
|
|
if( NOT IS_DIRECTORY ${INSTALL_DIR}/include )
|
|
file( MAKE_DIRECTORY "${INSTALL_DIR}/include" )
|
|
endif()
|
|
if( NOT IS_DIRECTORY ${THRIFT_LOCATION}/include )
|
|
file( MAKE_DIRECTORY "${THRIFT_LOCATION}/include" )
|
|
endif()
|
|
if( NOT IS_DIRECTORY ${UTF8PROC_LOCATION}/include )
|
|
file( MAKE_DIRECTORY "${UTF8PROC_LOCATION}/include" )
|
|
endif()
|
|
|
|
|
|
add_library( thrift STATIC IMPORTED )
|
|
set_target_properties( thrift
|
|
PROPERTIES
|
|
IMPORTED_GLOBAL TRUE
|
|
IMPORTED_LOCATION ${THRIFT_LOCATION}/lib/libthrift.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${THRIFT_LOCATION}/include )
|
|
add_dependencies(thrift arrow-ep)
|
|
|
|
add_library( utf8proc STATIC IMPORTED )
|
|
set_target_properties( utf8proc
|
|
PROPERTIES
|
|
IMPORTED_GLOBAL TRUE
|
|
IMPORTED_LOCATION ${UTF8PROC_LOCATION}/lib/libutf8proc.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${UTF8PROC_LOCATION}/include )
|
|
add_dependencies(utf8proc arrow-ep)
|
|
|
|
add_library( arrow STATIC IMPORTED )
|
|
set_target_properties( arrow
|
|
PROPERTIES
|
|
IMPORTED_GLOBAL TRUE
|
|
IMPORTED_LOCATION ${INSTALL_DIR}/lib/libarrow.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include )
|
|
add_dependencies(arrow arrow-ep )
|
|
|
|
add_library( parquet STATIC IMPORTED )
|
|
set_target_properties( parquet
|
|
PROPERTIES
|
|
IMPORTED_GLOBAL TRUE
|
|
IMPORTED_LOCATION ${INSTALL_DIR}/lib/libparquet.a
|
|
INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include )
|
|
add_dependencies(parquet arrow-ep)
|
|
target_link_libraries(parquet INTERFACE arrow thrift utf8proc)
|
|
endmacro()
|
|
|
|
build_arrow()
|
|
|
|
add_library(wrapper STATIC)
|
|
target_sources(wrapper PUBLIC ParquetWrapper.cpp PayloadStream.cpp
|
|
|
|
)
|
|
set_target_properties( wrapper PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR} )
|
|
target_link_libraries(wrapper PUBLIC parquet pthread)
|
|
|
|
if(NOT CMAKE_INSTALL_PREFIX)
|
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
|
|
endif()
|
|
|
|
get_target_property( THRIFT_LIB thrift LOCATION )
|
|
get_target_property( ARROW_LIB arrow LOCATION )
|
|
get_target_property( PARQUET_LIB parquet LOCATION )
|
|
get_target_property( UTF8PROC_LIB utf8proc LOCATION )
|
|
install(TARGETS wrapper DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
install(
|
|
FILES ${ARROW_LIB} ${PARQUET_LIB} ${THRIFT_LIB} ${UTF8PROC_LIB} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
|
|
add_subdirectory(test)
|