milvus/internal/storage/cwrapper/CMakeLists.txt

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)