From bf09c2047a47b74f089d701b9b1e4fcbe8955a7f Mon Sep 17 00:00:00 2001 From: luc1ph3r Date: Mon, 1 Oct 2018 19:44:55 +0300 Subject: [PATCH] Parquet data format: update CMake configurations --- CMakeLists.txt | 3 +-- cmake/find_parquet.cmake | 31 +++++++++++++++++++++++++++++++ contrib/CMakeLists.txt | 13 +++++++++++++ dbms/CMakeLists.txt | 10 ++++++---- 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 cmake/find_parquet.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f63ff854f..d35211b529 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,8 +263,7 @@ include (cmake/find_re2.cmake) include (cmake/find_rdkafka.cmake) include (cmake/find_capnp.cmake) include (cmake/find_llvm.cmake) -include (cmake/Modules/FindArrow.cmake) -include (cmake/Modules/FindParquet.cmake) +include (cmake/find_parquet.cmake) include (cmake/find_contrib_lib.cmake) find_contrib_lib(cityhash) diff --git a/cmake/find_parquet.cmake b/cmake/find_parquet.cmake new file mode 100644 index 0000000000..92da31a73a --- /dev/null +++ b/cmake/find_parquet.cmake @@ -0,0 +1,31 @@ +option (USE_INTERNAL_PARQUET_LIBRARY "Set to FALSE to use system parquet library instead of bundled" ${NOT_UNBUNDLED}) + +if (NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/arrow/cpp/CMakeLists.txt") + if (USE_INTERNAL_PARQUET_LIBRARY) + message (WARNING "submodule contrib/arrow (required for Parquet) is missing. to fix try run: \n git submodule update --init --recursive") + endif () + set (USE_INTERNAL_PARQUET_LIBRARY 0) + set (MISSING_INTERNAL_PARQUET_LIBRARY 1) +endif () + +if (NOT USE_INTERNAL_PARQUET_LIBRARY) + find_package (Arrow) + find_package (Parquet) +endif () + +if (ARROW_INCLUDE_DIR AND PARQUET_INCLUDE_DIR) +elseif (NOT MISSING_INTERNAL_PARQUET_LIBRARY) + set (USE_INTERNAL_PARQUET_LIBRARY 1) + # TODO: is it required? + # set (ARROW_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/arrow/cpp/src/arrow") + # set (PARQUET_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/arrow/cpp/src/parquet") + set (ARROW_LIBRARY arrow_static) + set (PARQUET_LIBRARY parquet_static) + set (USE_PARQUET 1) +endif () + +if (USE_PARQUET) + message (STATUS "Using Parquet: ${ARROW_INCLUDE_DIR} ${PARQUET_INCLUDE_DIR}") +else () + message (STATUS "Building without Parquet support") +endif () diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 104db478ef..1b839b03e2 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -121,6 +121,19 @@ if (USE_INTERNAL_CAPNP_LIBRARY) target_include_directories(${CAPNP_LIBRARY} PUBLIC $) endif () +if (USE_INTERNAL_PARQUET_LIBRARY) + set (ARROW_COMPUTE ON) + set (ARROW_PARQUET ON) + set (ARROW_VERBOSE_THIRDPARTY_BUILD ON) + set (PARQUET_ARROW_LINKAGE "static") + set (ARROW_BUILD_STATIC ON) + + # Because Arrow uses CMAKE_SOURCE_DIR as a project path + # Hopefully will be fixed in https://github.com/apache/arrow/pull/2676 + set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${ClickHouse_SOURCE_DIR}/contrib/arrow/cpp/cmake_modules") + add_subdirectory (arrow/cpp) +endif () + if (USE_INTERNAL_POCO_LIBRARY) set (save_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 60df07d0f7..69b06f50a6 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -220,10 +220,12 @@ if (USE_RDKAFKA) endif () endif () -# TODO: make it optional -# if (USE_PARQUET) - target_link_libraries(dbms ${ARROW_SHARED_LIB} ${PARQUET_SHARED_LIB}) -# endif () +if (USE_PARQUET) + target_link_libraries(dbms ${PARQUET_LIBRARY} ${ARROW_LIBRARY}) + if (NOT USE_INTERNAL_PARQUET_LIBRARY) + target_include_directories (dbms BEFORE PRIVATE ${PARQUET_INCLUDE_DIR} ${ARROW_INCLUDE_DIR}) + endif () +endif () target_link_libraries (dbms Threads::Threads -- GitLab