blob: ec93aa5037740163d06cfef788bd82305cae8e96 [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
set(THIRDPARTY_LOG_OPTIONS
LOG_CONFIGURE
1
LOG_BUILD
1
LOG_INSTALL
1
LOG_DOWNLOAD
1)
set(THIRDPARTY_CONFIGURE_COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}")
if(CMAKE_GENERATOR_TOOLSET)
list(APPEND THIRDPARTY_CONFIGURE_COMMAND -T "${CMAKE_GENERATOR_TOOLSET}")
endif()
string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_BUILD_TYPE)
string(TOLOWER ${CMAKE_BUILD_TYPE} LOWERCASE_BUILD_TYPE)
set(EP_COMMON_TOOLCHAIN "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
macro(set_urls URLS)
set(${URLS} ${ARGN})
endmacro()
set(THIRDPARTY_DIR "${CMAKE_SOURCE_DIR}/third_party")
# Read toolchain versions from third_party/versions.txt
file(STRINGS "${THIRDPARTY_DIR}/versions.txt" TOOLCHAIN_VERSIONS_TXT)
foreach(_VERSION_ENTRY ${TOOLCHAIN_VERSIONS_TXT})
# Exclude comments
if(NOT
((_VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_VERSION=")
OR (_VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_CHECKSUM=")
OR (_VERSION_ENTRY MATCHES "^[^#][A-Za-z0-9-_]+_PKG_NAME=")))
continue()
endif()
string(REGEX MATCH "^[^=]*" _VARIABLE_NAME ${_VERSION_ENTRY})
string(REPLACE "${_VARIABLE_NAME}=" "" _VARIABLE_VALUE ${_VERSION_ENTRY})
# Skip blank or malformed lines
if(_VARIABLE_VALUE STREQUAL "")
continue()
endif()
set(${_VARIABLE_NAME} ${_VARIABLE_VALUE})
if(_VARIABLE_NAME MATCHES "_PKG_NAME$")
# Expand version to package name
string(CONFIGURE "${${_VARIABLE_NAME}}" _EXPANDED ESCAPE_QUOTES)
set(${_VARIABLE_NAME} "${_EXPANDED}")
endif()
# For debugging
message(STATUS "${_VARIABLE_NAME}: ${${_VARIABLE_NAME}}")
endforeach()
if(DEFINED ENV{PAIMON_THIRDPARTY_MIRROR_URL})
set(THIRDPARTY_MIRROR_URL "$ENV{PAIMON_THIRDPARTY_MIRROR_URL}")
else()
set(THIRDPARTY_MIRROR_URL "")
endif()
if(DEFINED ENV{PAIMON_ARROW_URL})
set(ARROW_SOURCE_URL "$ENV{PAIMON_ARROW_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_ARROW_PKG_NAME}")
set_urls(ARROW_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_ARROW_PKG_NAME}")
else()
set_urls(ARROW_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/apache/arrow/releases/download/apache-arrow-${PAIMON_ARROW_BUILD_VERSION}/apache-arrow-${PAIMON_ARROW_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_RAPIDJSON_URL})
set(RAPIDJSON_SOURCE_URL "$ENV{PAIMON_RAPIDJSON_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_RAPIDJSON_PKG_NAME}")
set_urls(RAPIDJSON_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_RAPIDJSON_PKG_NAME}")
else()
set_urls(RAPIDJSON_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/miloyip/rapidjson/archive/${PAIMON_RAPIDJSON_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_FMT_URL})
set(FMT_SOURCE_URL "$ENV{PAIMON_FMT_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_FMT_PKG_NAME}")
set_urls(FMT_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_FMT_PKG_NAME}")
else()
set_urls(FMT_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/fmtlib/fmt/archive/refs/tags/${PAIMON_FMT_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_LUCENE_URL})
set(LUCENE_SOURCE_URL "$ENV{PAIMON_LUCENE_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_LUCENE_PKG_NAME}")
set_urls(LUCENE_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_LUCENE_PKG_NAME}")
else()
set_urls(LUCENE_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/luceneplusplus/LucenePlusPlus/archive/refs/tags/rel_${PAIMON_LUCENE_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_LIMONP_URL})
set(LIMONP_SOURCE_URL "$ENV{PAIMON_LIMONP_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_LIMONP_PKG_NAME}")
set_urls(LIMONP_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_LIMONP_PKG_NAME}")
else()
set_urls(LIMONP_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/yanyiwu/limonp/archive/refs/tags/v${PAIMON_LIMONP_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_JIEBA_URL})
set(JIEBA_SOURCE_URL "$ENV{PAIMON_JIEBA_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_JIEBA_PKG_NAME}")
set_urls(JIEBA_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_JIEBA_PKG_NAME}")
else()
set_urls(JIEBA_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/yanyiwu/cppjieba/archive/refs/tags/${PAIMON_JIEBA_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_RE2_URL})
set(RE2_SOURCE_URL "$ENV{PAIMON_RE2_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_RE2_PKG_NAME}")
set_urls(RE2_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_RE2_PKG_NAME}")
else()
set_urls(RE2_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/google/re2/archive/${PAIMON_RE2_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_GLOG_URL})
set(GLOG_SOURCE_URL "$ENV{PAIMON_GLOG_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_GLOG_PKG_NAME}")
set_urls(GLOG_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_GLOG_PKG_NAME}")
else()
set_urls(GLOG_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/google/glog/archive/${PAIMON_GLOG_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_ZLIB_URL})
set(ZLIB_SOURCE_URL "$ENV{PAIMON_ZLIB_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_ZLIB_PKG_NAME}")
set_urls(ZLIB_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_ZLIB_PKG_NAME}")
else()
set_urls(ZLIB_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/madler/zlib/releases/download/v${PAIMON_ZLIB_BUILD_VERSION}/zlib-${PAIMON_ZLIB_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_ZSTD_URL})
set(ZSTD_SOURCE_URL "$ENV{PAIMON_ZSTD_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_ZSTD_PKG_NAME}")
set_urls(ZSTD_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_ZSTD_PKG_NAME}")
else()
set_urls(ZSTD_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/facebook/zstd/releases/download/v${PAIMON_ZSTD_BUILD_VERSION}/zstd-${PAIMON_ZSTD_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_LZ4_URL})
set(LZ4_SOURCE_URL "$ENV{PAIMON_LZ4_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_LZ4_PKG_NAME}")
set_urls(LZ4_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_LZ4_PKG_NAME}")
else()
set_urls(LZ4_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/lz4/lz4/archive/${PAIMON_LZ4_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_SNAPPY_URL})
set(SNAPPY_SOURCE_URL "$ENV{PAIMON_SNAPPY_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_SNAPPY_PKG_NAME}")
set_urls(SNAPPY_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_SNAPPY_PKG_NAME}")
else()
set_urls(SNAPPY_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/google/snappy/archive/${PAIMON_SNAPPY_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_PROTOBUF_URL})
set(PROTOBUF_SOURCE_URL "$ENV{PAIMON_PROTOBUF_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_PROTOBUF_PKG_NAME}")
set_urls(PROTOBUF_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_PROTOBUF_PKG_NAME}")
else()
set_urls(PROTOBUF_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/protocolbuffers/protobuf/releases/download/v${PAIMON_PROTOBUF_BUILD_VERSION}/protobuf-all-${PAIMON_PROTOBUF_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_GTEST_URL})
set(GTEST_SOURCE_URL "$ENV{PAIMON_GTEST_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_GTEST_PKG_NAME}")
set_urls(GTEST_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_GTEST_PKG_NAME}")
else()
set_urls(GTEST_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/google/googletest/archive/release-${PAIMON_GTEST_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_TBB_URL})
set(TBB_SOURCE_URL "$ENV{PAIMON_TBB_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_TBB_PKG_NAME}")
set_urls(TBB_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_TBB_PKG_NAME}")
else()
set_urls(TBB_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/uxlfoundation/oneTBB/archive/refs/tags/${PAIMON_TBB_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_ORC_URL})
set(ORC_SOURCE_URL "$ENV{PAIMON_ORC_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_ORC_PKG_NAME}")
set_urls(ORC_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_ORC_PKG_NAME}")
else()
set_urls(ORC_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/apache/orc/archive/refs/tags/${PAIMON_ORC_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_AVRO_URL})
set(AVRO_SOURCE_URL "$ENV{PAIMON_AVRO_URL}")
else()
if(EXISTS "${THIRDPARTY_DIR}/${PAIMON_AVRO_PKG_NAME}")
set_urls(AVRO_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_AVRO_PKG_NAME}")
else()
set_urls(AVRO_SOURCE_URL
"${THIRDPARTY_MIRROR_URL}https://github.com/apache/avro/archive/${PAIMON_AVRO_BUILD_VERSION}.tar.gz"
)
endif()
endif()
if(DEFINED ENV{PAIMON_LUMINA_URL})
set(LUMINA_SOURCE_URL "$ENV{PAIMON_LUMINA_URL}")
elseif(EXISTS "${THIRDPARTY_DIR}/${PAIMON_LUMINA_PKG_NAME}")
set_urls(LUMINA_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_LUMINA_PKG_NAME}")
else()
set_urls(LUMINA_SOURCE_URL
"https://paimon-cpp.oss-cn-beijing.aliyuncs.com/thirdparty/lumina/lumina_release-${PAIMON_LUMINA_BUILD_VERSION}.tar.gz"
)
endif()
if(DEFINED ENV{PAIMON_BOOST_URL})
set(BOOST_SOURCE_URL "$ENV{PAIMON_BOOST_URL}")
elseif(EXISTS "${THIRDPARTY_DIR}/${PAIMON_BOOST_PKG_NAME}")
set_urls(BOOST_SOURCE_URL "${THIRDPARTY_DIR}/${PAIMON_BOOST_PKG_NAME}")
else()
set_urls(BOOST_SOURCE_URL
"https://paimon-cpp.oss-cn-beijing.aliyuncs.com/thirdparty/boost/${PAIMON_BOOST_PKG_NAME}"
)
endif()
if(APPLE)
set(JINDOSDK_C_DYNAMIC_LIB_NAME "jindosdk_c.${PAIMON_JINDOSDK_C_BUILD_VERSION}")
set(JINDOSDK_C_DYNAMIC_LIB_FILE "lib${JINDOSDK_C_DYNAMIC_LIB_NAME}.dylib")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
set(JINDOSDK_C_BUILD_SHA256_CHECKSUM
"${PAIMON_JINDOSDK_C_MACOS_X86_64_BUILD_SHA256_CHECKSUM}")
if(DEFINED ENV{PAIMON_JINDOSDK_C_MACOS_X86_64_URL})
set(JINDOSDK_C_SOURCE_URL "$ENV{PAIMON_JINDOSDK_C_MACOS_X86_64_URL}")
else()
set_urls(JINDOSDK_C_SOURCE_URL
"https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/${PAIMON_JINDOSDK_C_BUILD_VERSION}/jindosdk-${PAIMON_JINDOSDK_C_BUILD_VERSION}-macos-11_0-x86_64.tar.gz"
)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
set(JINDOSDK_C_BUILD_SHA256_CHECKSUM
"${PAIMON_JINDOSDK_C_MACOS_AARCH64_BUILD_SHA256_CHECKSUM}")
if(DEFINED ENV{PAIMON_JINDOSDK_C_MACOS_AARCH64_URL})
set(JINDOSDK_C_SOURCE_URL "$ENV{PAIMON_JINDOSDK_C_MACOS_AARCH64_URL}")
else()
set_urls(JINDOSDK_C_SOURCE_URL
"https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/${PAIMON_JINDOSDK_C_BUILD_VERSION}/jindosdk-${PAIMON_JINDOSDK_C_BUILD_VERSION}-macos-11_0-aarch64.tar.gz"
)
endif()
endif()
else()
set(JINDOSDK_C_DYNAMIC_LIB_NAME "jindosdk_c")
set(JINDOSDK_C_DYNAMIC_LIB_FILE "lib${JINDOSDK_C_DYNAMIC_LIB_NAME}.so")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64")
set(JINDOSDK_C_BUILD_SHA256_CHECKSUM
"${PAIMON_JINDOSDK_C_LINUX_X86_64_BUILD_SHA256_CHECKSUM}")
if(DEFINED ENV{PAIMON_JINDOSDK_C_LINUX_X86_64_URL})
set(JINDOSDK_C_SOURCE_URL "$ENV{PAIMON_JINDOSDK_C_LINUX_X86_64_URL}")
else()
set_urls(JINDOSDK_C_SOURCE_URL
"https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/${PAIMON_JINDOSDK_C_BUILD_VERSION}/jindosdk-${PAIMON_JINDOSDK_C_BUILD_VERSION}-linux.tar.gz"
)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
set(JINDOSDK_C_BUILD_SHA256_CHECKSUM
"${PAIMON_JINDOSDK_C_LINUX_AARCH64_BUILD_SHA256_CHECKSUM}")
if(DEFINED ENV{PAIMON_JINDOSDK_C_LINUX_AARCH64_URL})
set(JINDOSDK_C_SOURCE_URL "$ENV{PAIMON_JINDOSDK_C_LINUX_AARCH64_URL}")
else()
set_urls(JINDOSDK_C_SOURCE_URL
"https://jindodata-binary.oss-cn-shanghai.aliyuncs.com/release/${PAIMON_JINDOSDK_C_BUILD_VERSION}/jindosdk-${PAIMON_JINDOSDK_C_BUILD_VERSION}-linux-el7-aarch64.tar.gz"
)
endif()
endif()
endif()
set(EP_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(EP_C_FLAGS "${CMAKE_C_FLAGS}")
string(REPLACE "-Wglobal-constructors" "" EP_CXX_FLAGS ${EP_CXX_FLAGS})
string(REPLACE "-Wglobal-constructors" "" EP_C_FLAGS ${EP_C_FLAGS})
# Remove coverage flags from third-party dependencies to avoid gcov dependency
string(REPLACE "--coverage" "" EP_CXX_FLAGS ${EP_CXX_FLAGS})
string(REPLACE "--coverage" "" EP_C_FLAGS ${EP_C_FLAGS})
string(REPLACE "-DCOVERAGE_BUILD" "" EP_CXX_FLAGS ${EP_CXX_FLAGS})
string(REPLACE "-DCOVERAGE_BUILD" "" EP_C_FLAGS ${EP_C_FLAGS})
if(NOT MSVC_TOOLCHAIN)
# Set -fPIC on all external projects
string(APPEND EP_CXX_FLAGS
" -fPIC -Wno-error -Wno-sign-compare -Wno-ignored-attributes")
string(APPEND EP_C_FLAGS " -fPIC")
endif()
if(PAIMON_USE_CXX11_ABI)
string(APPEND EP_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=1")
else()
string(APPEND EP_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=0")
endif()
# External projects are still able to override the following declarations.
# cmake command line will favor the last defined variable when a duplicate is
# encountered. This requires that `EP_COMMON_CMAKE_ARGS` is always the first
# argument.
set(EP_COMMON_CMAKE_ARGS
${EP_COMMON_TOOLCHAIN}
-DBUILD_SHARED_LIBS=OFF
-DBUILD_STATIC_LIBS=ON
-DBUILD_TESTING=OFF
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_CXX_FLAGS=${EP_CXX_FLAGS}
-DCMAKE_C_FLAGS=${EP_C_FLAGS}
-DCMAKE_INSTALL_LIBDIR=lib)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30")
list(APPEND EP_COMMON_CMAKE_ARGS -DCMAKE_POLICY_VERSION_MINIMUM=3.5)
endif()
set(PAIMON_DEPENDENCY_SOURCE_VALUES AUTO BUNDLED SYSTEM)
function(paimon_validate_dependency_source SOURCE_VALUE OPTION_NAME)
string(TOUPPER "${SOURCE_VALUE}" _source)
list(FIND PAIMON_DEPENDENCY_SOURCE_VALUES "${_source}" _source_index)
if(_source_index EQUAL -1)
message(FATAL_ERROR "${OPTION_NAME} got invalid value '${SOURCE_VALUE}'. "
"Allowed values: AUTO, BUNDLED, SYSTEM.")
endif()
endfunction()
function(paimon_get_dependency_source DEPENDENCY_NAME OUT_VAR)
set(_source_option_name "${DEPENDENCY_NAME}_SOURCE")
set(_source "${${DEPENDENCY_NAME}_SOURCE}")
if("${_source}" STREQUAL "")
get_property(_source GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_DERIVED_SOURCE")
if("${_source}" STREQUAL "")
set(_source "${PAIMON_DEPENDENCY_SOURCE}")
set(_source_option_name "PAIMON_DEPENDENCY_SOURCE")
else()
set(_source_option_name "derived ${DEPENDENCY_NAME}_SOURCE")
endif()
endif()
string(TOUPPER "${_source}" _source)
paimon_validate_dependency_source("${_source}" "${_source_option_name}")
set(${OUT_VAR}
"${_source}"
PARENT_SCOPE)
endfunction()
function(paimon_set_dependency_source_default DEPENDENCY_NAME SOURCE_VALUE REASON)
if("${${DEPENDENCY_NAME}_SOURCE}" STREQUAL "")
string(TOUPPER "${SOURCE_VALUE}" _source)
paimon_validate_dependency_source("${_source}"
"derived ${DEPENDENCY_NAME}_SOURCE")
set_property(GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_DERIVED_SOURCE"
"${_source}")
message(STATUS "Defaulting ${DEPENDENCY_NAME}_SOURCE to ${_source}: ${REASON}")
endif()
endfunction()
function(paimon_enforce_patched_dependency_policy)
paimon_get_dependency_source(Arrow _arrow_source)
if(_arrow_source STREQUAL "SYSTEM")
message(FATAL_ERROR "Arrow_SOURCE=SYSTEM is not supported because paimon-cpp "
"requires project-specific Arrow patches. Use Arrow_SOURCE=BUNDLED."
)
elseif(_arrow_source STREQUAL "AUTO")
message(STATUS "Forcing Arrow_SOURCE to BUNDLED because paimon-cpp requires "
"project-specific Arrow patches")
set(Arrow_SOURCE
"BUNDLED"
CACHE STRING "Dependency source for Arrow" FORCE)
set(Arrow_SOURCE
"BUNDLED"
PARENT_SCOPE)
endif()
if(PAIMON_ENABLE_ORC)
paimon_get_dependency_source(ORC _orc_source)
if(_orc_source STREQUAL "SYSTEM")
message(FATAL_ERROR "ORC_SOURCE=SYSTEM is not supported because paimon-cpp "
"requires project-specific ORC patches. Use ORC_SOURCE=BUNDLED."
)
elseif(_orc_source STREQUAL "AUTO")
message(STATUS "Forcing ORC_SOURCE to BUNDLED because paimon-cpp requires "
"project-specific ORC patches")
set(ORC_SOURCE
"BUNDLED"
CACHE STRING "Dependency source for ORC" FORCE)
set(ORC_SOURCE
"BUNDLED"
PARENT_SCOPE)
endif()
endif()
endfunction()
function(paimon_apply_dependency_source_defaults)
paimon_get_dependency_source(Arrow _arrow_source)
if(_arrow_source STREQUAL "SYSTEM" OR _arrow_source STREQUAL "BUNDLED")
foreach(_dependency
zstd
Snappy
LZ4
ZLIB
RE2)
paimon_set_dependency_source_default(
${_dependency} ${_arrow_source}
"follow Arrow_SOURCE to avoid mixed transitive dependencies")
endforeach()
elseif(_arrow_source STREQUAL "AUTO")
paimon_configure_dependency_root(Arrow "${_arrow_source}" _arrow_resolved_source)
find_package(ArrowAlt QUIET MODULE)
if(ArrowAlt_FOUND)
set(_arrow_dependency_default SYSTEM)
set(_arrow_dependency_reason
"system Arrow found during AUTO dependency precheck")
else()
set(_arrow_dependency_default BUNDLED)
set(_arrow_dependency_reason
"system Arrow not found during AUTO dependency precheck")
endif()
foreach(_dependency
zstd
Snappy
LZ4
ZLIB
RE2)
paimon_set_dependency_source_default(
${_dependency} ${_arrow_dependency_default} "${_arrow_dependency_reason}")
endforeach()
endif()
if(PAIMON_ENABLE_ORC)
paimon_get_dependency_source(ORC _orc_source)
if(_orc_source STREQUAL "SYSTEM" OR _orc_source STREQUAL "BUNDLED")
paimon_set_dependency_source_default(
Protobuf ${_orc_source}
"follow ORC_SOURCE to avoid mixed transitive dependencies")
elseif(_orc_source STREQUAL "AUTO")
paimon_configure_dependency_root(ORC "${_orc_source}" _orc_resolved_source)
find_package(ORCAlt QUIET MODULE)
if(ORCAlt_FOUND)
paimon_set_dependency_source_default(
Protobuf SYSTEM "system ORC found during AUTO dependency precheck")
else()
paimon_set_dependency_source_default(
Protobuf BUNDLED
"system ORC not found during AUTO dependency precheck")
endif()
endif()
endif()
endfunction()
function(paimon_configure_dependency_root DEPENDENCY_NAME SOURCE_VALUE OUT_SOURCE)
set(${OUT_SOURCE}
"${SOURCE_VALUE}"
PARENT_SCOPE)
endfunction()
function(paimon_get_dependency_root DEPENDENCY_NAME OUT_VAR)
set(_root_var "${DEPENDENCY_NAME}_ROOT")
if(DEFINED ${_root_var} AND NOT "${${_root_var}}" STREQUAL "")
set(${OUT_VAR}
"${${_root_var}}"
PARENT_SCOPE)
elseif(NOT "${PAIMON_PACKAGE_PREFIX}" STREQUAL "")
set(${OUT_VAR}
"${PAIMON_PACKAGE_PREFIX}"
PARENT_SCOPE)
else()
set(${OUT_VAR}
"<default search paths>"
PARENT_SCOPE)
endif()
endfunction()
function(paimon_get_dependency_compat_target DEPENDENCY_NAME OUT_VAR)
if("${DEPENDENCY_NAME}" STREQUAL "Arrow")
set(_target arrow)
elseif("${DEPENDENCY_NAME}" STREQUAL "ORC")
set(_target orc::orc)
elseif("${DEPENDENCY_NAME}" STREQUAL "Protobuf")
set(_target libprotobuf)
elseif("${DEPENDENCY_NAME}" STREQUAL "GTest")
set(_target GTest::gtest)
elseif("${DEPENDENCY_NAME}" STREQUAL "RE2")
set(_target re2::re2)
elseif("${DEPENDENCY_NAME}" STREQUAL "Snappy")
set(_target snappy)
elseif("${DEPENDENCY_NAME}" STREQUAL "LZ4")
set(_target lz4)
elseif("${DEPENDENCY_NAME}" STREQUAL "ZLIB")
set(_target zlib)
elseif("${DEPENDENCY_NAME}" STREQUAL "TBB")
set(_target tbb)
elseif("${DEPENDENCY_NAME}" STREQUAL "Avro")
set(_target avro)
else()
set(_target "${DEPENDENCY_NAME}")
endif()
set(${OUT_VAR}
"${_target}"
PARENT_SCOPE)
endfunction()
function(paimon_record_dependency_resolution
DEPENDENCY_NAME
REQUESTED_SOURCE
ACTUAL_SOURCE
TARGET_NAME)
get_property(_dependencies GLOBAL PROPERTY PAIMON_RESOLVED_DEPENDENCIES)
list(APPEND _dependencies "${DEPENDENCY_NAME}")
list(REMOVE_DUPLICATES _dependencies)
set_property(GLOBAL PROPERTY PAIMON_RESOLVED_DEPENDENCIES "${_dependencies}")
paimon_get_dependency_root("${DEPENDENCY_NAME}" _root)
set_property(GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_REQUESTED_SOURCE"
"${REQUESTED_SOURCE}")
set_property(GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_ACTUAL_SOURCE"
"${ACTUAL_SOURCE}")
set_property(GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_ROOT" "${_root}")
set_property(GLOBAL PROPERTY "PAIMON_${DEPENDENCY_NAME}_TARGET" "${TARGET_NAME}")
endfunction()
function(paimon_print_dependency_resolution_summary)
get_property(_dependencies GLOBAL PROPERTY PAIMON_RESOLVED_DEPENDENCIES)
if(NOT _dependencies)
return()
endif()
message(STATUS "Dependency resolution summary:")
foreach(_dependency IN LISTS _dependencies)
get_property(_requested GLOBAL PROPERTY "PAIMON_${_dependency}_REQUESTED_SOURCE")
get_property(_actual GLOBAL PROPERTY "PAIMON_${_dependency}_ACTUAL_SOURCE")
get_property(_root GLOBAL PROPERTY "PAIMON_${_dependency}_ROOT")
get_property(_target GLOBAL PROPERTY "PAIMON_${_dependency}_TARGET")
message(STATUS " ${_dependency}: requested=${_requested}, actual=${_actual}, target=${_target}, root=${_root}"
)
endforeach()
endfunction()
macro(paimon_build_dependency DEPENDENCY_NAME)
if("${DEPENDENCY_NAME}" STREQUAL "Arrow")
build_arrow()
elseif("${DEPENDENCY_NAME}" STREQUAL "fmt")
build_fmt()
elseif("${DEPENDENCY_NAME}" STREQUAL "RapidJSON")
build_rapidjson()
elseif("${DEPENDENCY_NAME}" STREQUAL "zstd")
build_zstd()
elseif("${DEPENDENCY_NAME}" STREQUAL "Snappy")
build_snappy()
elseif("${DEPENDENCY_NAME}" STREQUAL "LZ4")
build_lz4()
elseif("${DEPENDENCY_NAME}" STREQUAL "ZLIB")
build_zlib()
elseif("${DEPENDENCY_NAME}" STREQUAL "RE2")
build_re2()
elseif("${DEPENDENCY_NAME}" STREQUAL "Protobuf")
build_protobuf()
elseif("${DEPENDENCY_NAME}" STREQUAL "ORC")
build_orc()
elseif("${DEPENDENCY_NAME}" STREQUAL "TBB")
build_tbb()
elseif("${DEPENDENCY_NAME}" STREQUAL "glog")
build_glog()
elseif("${DEPENDENCY_NAME}" STREQUAL "Avro")
build_avro()
elseif("${DEPENDENCY_NAME}" STREQUAL "GTest")
build_gtest()
else()
message(FATAL_ERROR "No bundled build rule for ${DEPENDENCY_NAME}")
endif()
endmacro()
macro(resolve_dependency DEPENDENCY_NAME)
set(options)
set(one_value_args FIND_PACKAGE_NAME)
set(multi_value_args)
cmake_parse_arguments(ARG
"${options}"
"${one_value_args}"
"${multi_value_args}"
${ARGN})
if(ARG_FIND_PACKAGE_NAME)
set(_paimon_find_package_name "${ARG_FIND_PACKAGE_NAME}")
else()
set(_paimon_find_package_name "${DEPENDENCY_NAME}")
endif()
set(_paimon_alt_package_name "${_paimon_find_package_name}Alt")
set(_paimon_found_var "${_paimon_alt_package_name}_FOUND")
paimon_get_dependency_source(${DEPENDENCY_NAME} _paimon_requested_source)
paimon_configure_dependency_root(${DEPENDENCY_NAME} "${_paimon_requested_source}"
_paimon_resolved_source)
paimon_get_dependency_compat_target(${DEPENDENCY_NAME} _paimon_target_name)
if(_paimon_resolved_source STREQUAL "BUNDLED")
message(STATUS "Using bundled ${DEPENDENCY_NAME}")
paimon_build_dependency(${DEPENDENCY_NAME})
set(PAIMON_${DEPENDENCY_NAME}_ACTUAL_SOURCE
"BUNDLED"
CACHE INTERNAL "Actual source for ${DEPENDENCY_NAME}")
paimon_record_dependency_resolution(
${DEPENDENCY_NAME} "${_paimon_requested_source}" "BUNDLED"
"${_paimon_target_name}")
elseif(_paimon_resolved_source STREQUAL "SYSTEM")
message(STATUS "Using system ${DEPENDENCY_NAME}")
find_package(${_paimon_alt_package_name} REQUIRED MODULE)
set(PAIMON_${DEPENDENCY_NAME}_ACTUAL_SOURCE
"${_paimon_requested_source}"
CACHE INTERNAL "Actual source for ${DEPENDENCY_NAME}")
paimon_record_dependency_resolution(
${DEPENDENCY_NAME} "${_paimon_requested_source}"
"${_paimon_requested_source}" "${_paimon_target_name}")
elseif(_paimon_resolved_source STREQUAL "AUTO")
message(STATUS "Resolving ${DEPENDENCY_NAME} with AUTO source")
find_package(${_paimon_alt_package_name} QUIET MODULE)
if(${_paimon_found_var})
message(STATUS "Using system ${DEPENDENCY_NAME}")
set(PAIMON_${DEPENDENCY_NAME}_ACTUAL_SOURCE
"SYSTEM"
CACHE INTERNAL "Actual source for ${DEPENDENCY_NAME}")
paimon_record_dependency_resolution(
${DEPENDENCY_NAME} "${_paimon_requested_source}" "SYSTEM"
"${_paimon_target_name}")
else()
message(STATUS "System ${DEPENDENCY_NAME} not found; using bundled")
paimon_build_dependency(${DEPENDENCY_NAME})
set(PAIMON_${DEPENDENCY_NAME}_ACTUAL_SOURCE
"BUNDLED"
CACHE INTERNAL "Actual source for ${DEPENDENCY_NAME}")
paimon_record_dependency_resolution(
${DEPENDENCY_NAME} "${_paimon_requested_source}" "BUNDLED"
"${_paimon_target_name}")
endif()
else()
message(FATAL_ERROR "Unsupported source ${_paimon_resolved_source} "
"for ${DEPENDENCY_NAME}")
endif()
unset(_paimon_find_package_name)
unset(_paimon_alt_package_name)
unset(_paimon_found_var)
unset(_paimon_requested_source)
unset(_paimon_resolved_source)
unset(_paimon_target_name)
endmacro()
function(paimon_warn_if_mixed_arrow_dependencies)
if(NOT DEFINED PAIMON_Arrow_ACTUAL_SOURCE)
return()
endif()
foreach(_dependency
zstd
Snappy
LZ4
ZLIB
RE2)
if(DEFINED PAIMON_${_dependency}_ACTUAL_SOURCE
AND NOT "${PAIMON_${_dependency}_ACTUAL_SOURCE}" STREQUAL
"${PAIMON_Arrow_ACTUAL_SOURCE}")
message(WARNING "Arrow resolved from ${PAIMON_Arrow_ACTUAL_SOURCE}, but "
"${_dependency} resolved from "
"${PAIMON_${_dependency}_ACTUAL_SOURCE}. Mixing SYSTEM "
"and BUNDLED dependencies can cause ABI conflicts.")
endif()
endforeach()
endfunction()
macro(build_lucene)
message(STATUS "Building lucene from source")
get_target_property(LUCENE_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(LUCENE_ZLIB_ROOT "${LUCENE_ZLIB_INCLUDE_DIR}" DIRECTORY)
set(LUCENE_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lucene_ep-install")
set(LUCENE_CMAKE_CXX_FLAGS "-pthread")
if(PAIMON_USE_CXX11_ABI)
string(APPEND LUCENE_CMAKE_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=1")
else()
string(APPEND LUCENE_CMAKE_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=0")
endif()
set(LUCENE_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DLUCENE_BUILD_SHARED=OFF"
"-DENABLE_TEST=OFF"
"-DCMAKE_C_FLAGS=-pthread"
"-DCMAKE_CXX_FLAGS=${LUCENE_CMAKE_CXX_FLAGS}"
"-DCMAKE_EXE_LINKER_FLAGS=-pthread"
"-DBoost_NO_BOOST_CMAKE=ON"
"-DBoost_NO_SYSTEM_PATHS=ON"
"-DBoost_USE_STATIC_LIBS=ON"
"-DBoost_INCLUDE_DIR=${BOOST_INCLUDE_DIR}"
"-DBoost_LIBRARY_DIR=${BOOST_LIBRARY_DIR}"
"-DBOOST_ROOT=${BOOST_INSTALL}"
"-DBoost_CHRONO_FOUND=TRUE"
"-DBoost_THREAD_FOUND=TRUE"
"-DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR}"
"-DZLIB_LIBRARY_RELEASE=${ZLIB_LIBRARIES}"
"-DZLIB_ROOT=${LUCENE_ZLIB_ROOT}"
"-DCMAKE_INSTALL_PREFIX=${LUCENE_PREFIX}")
set(LUCENE_LIB "${LUCENE_PREFIX}/lib/liblucene++.a")
externalproject_add(lucene_ep
${EP_COMMON_OPTIONS}
URL ${LUCENE_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_LUCENE_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${LUCENE_CMAKE_ARGS}
BUILD_BYPRODUCTS ${LUCENE_LIB}
DEPENDS zlib
boost_date_time
boost_filesystem
boost_regex
boost_thread
boost_iostreams
boost_system
boost_chrono
boost_atomic)
set(LUCENE_INCLUDE_DIR "${LUCENE_PREFIX}/include")
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${LUCENE_INCLUDE_DIR}")
include_directories(SYSTEM ${LUCENE_INCLUDE_DIR} ${BOOST_INCLUDE_DIR})
add_library(lucene STATIC IMPORTED)
set_target_properties(lucene
PROPERTIES IMPORTED_LOCATION "${LUCENE_LIB}"
INTERFACE_INCLUDE_DIRECTORIES
"${LUCENE_INCLUDE_DIR}")
target_link_libraries(lucene
INTERFACE zlib
boost_date_time
boost_filesystem
boost_regex
boost_thread
boost_iostreams
boost_system
boost_chrono
boost_atomic
pthread
dl)
add_dependencies(lucene lucene_ep)
endmacro()
macro(build_jieba)
message(STATUS "Building limonp from source")
set(LIMONP_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/limonp_ep-prefix")
externalproject_add(limonp_ep
URL ${LIMONP_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_LIMONP_BUILD_SHA256_CHECKSUM}"
INSTALL_COMMAND "")
message(STATUS "Building jieba from source")
set(JIEBA_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/jieba_ep-prefix")
set(JIEBA_INSTALL "${CMAKE_CURRENT_BINARY_DIR}/jieba_ep-install")
set(JIEBA_INCLUDE_DIR "${JIEBA_INSTALL}/include")
set(JIEBA_DICT_DIR "${JIEBA_INSTALL}/dict")
file(MAKE_DIRECTORY ${JIEBA_INCLUDE_DIR})
file(MAKE_DIRECTORY ${JIEBA_DICT_DIR})
set(JIEBA_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS} "-DENABLE_TEST=OFF" "-DCPPJIEBA_TOP_LEVEL_PROJECT=OFF"
"-DCMAKE_INSTALL_PREFIX=${JIEBA_INSTALL}")
set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/jieba.diff")
externalproject_add(jieba_ep
${EP_COMMON_OPTIONS}
URL ${JIEBA_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_JIEBA_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${JIEBA_CMAKE_ARGS}
LOG_PATCH ON
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> bash -c
"[ -f .patched ] && echo '<SOURCE_DIR> patch already applied, ignore...' || patch -s -N -p1 -i '${PATCH_FILE}' && touch .patched"
INSTALL_COMMAND bash -c
"cp -r ${JIEBA_PREFIX}/src/jieba_ep/include/* ${JIEBA_INSTALL}/include/ && cp -r ${JIEBA_PREFIX}/src/jieba_ep/dict/* ${JIEBA_INSTALL}/dict/ && cp -r ${LIMONP_PREFIX}/src/limonp_ep/include/* ${JIEBA_INSTALL}/include/"
)
# The include directory must exist before it is referenced by a target.
include_directories(SYSTEM ${JIEBA_INCLUDE_DIR} ${JIEBA_DICT_DIR})
add_library(jieba INTERFACE IMPORTED)
target_include_directories(jieba SYSTEM INTERFACE ${JIEBA_INCLUDE_DIR}
${JIEBA_DICT_DIR})
add_dependencies(jieba_ep limonp_ep)
add_dependencies(jieba jieba_ep)
endmacro()
macro(build_rapidjson)
message(STATUS "Building RapidJSON from source")
set(RAPIDJSON_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/rapidjson_ep-install")
set(RAPIDJSON_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
-DRAPIDJSON_BUILD_DOC=OFF
-DRAPIDJSON_BUILD_EXAMPLES=OFF
-DRAPIDJSON_BUILD_TESTS=OFF
"-DCMAKE_INSTALL_PREFIX=${RAPIDJSON_PREFIX}")
externalproject_add(rapidjson_ep
${EP_COMMON_OPTIONS}
URL ${RAPIDJSON_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_RAPIDJSON_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS})
set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include")
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}")
include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
add_library(RapidJSON INTERFACE IMPORTED)
target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}")
add_dependencies(RapidJSON rapidjson_ep)
endmacro()
macro(build_fmt)
message(STATUS "Building fmt from source")
set(FMT_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/fmt_ep-install")
set(FMT_INCLUDE_DIR "${FMT_PREFIX}/include")
if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG")
set(FMT_LIB_SUFFIX "d")
else()
set(FMT_LIB_SUFFIX "")
endif()
set(FMT_STATIC_LIB_NAME fmt)
set(FMT_STATIC_LIB
"${FMT_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${FMT_STATIC_LIB_NAME}${FMT_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(FMT_LIBRARIES ${FMT_STATIC_LIB})
set(FMT_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
set(FMT_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error")
string(REPLACE "-Werror" "" FMT_CMAKE_CXX_FLAGS ${FMT_CMAKE_CXX_FLAGS})
set(FMT_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=${FMT_PREFIX}
"-DCMAKE_CXX_FLAGS=${FMT_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${FMT_CMAKE_C_FLAGS}"
-DFMT_TEST=OFF
-DFMT_DOC=OFF)
set(FMT_CONFIGURE CMAKE_ARGS ${FMT_CMAKE_ARGS})
externalproject_add(fmt_ep
URL ${FMT_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_FMT_BUILD_SHA256_CHECKSUM}"
${FMT_CONFIGURE} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS ${FMT_STATIC_LIB})
file(MAKE_DIRECTORY "${FMT_INCLUDE_DIR}")
include_directories(SYSTEM ${FMT_INCLUDE_DIR})
add_library(fmt STATIC IMPORTED)
set_target_properties(fmt PROPERTIES IMPORTED_LOCATION ${FMT_STATIC_LIB})
target_include_directories(fmt INTERFACE ${FMT_INCLUDE_DIR})
add_dependencies(fmt fmt_ep)
endmacro(build_fmt)
macro(build_boost)
message(STATUS "Building boost from source")
set(BOOST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/boost_ep-prefix")
set(BOOST_INSTALL "${CMAKE_CURRENT_BINARY_DIR}/boost_ep-install")
set(BOOST_INCLUDE_DIR "${BOOST_INSTALL}/include")
set(BOOST_LIBRARY_DIR ${BOOST_INSTALL}/lib)
file(MAKE_DIRECTORY ${BOOST_INCLUDE_DIR})
file(MAKE_DIRECTORY ${BOOST_LIBRARY_DIR})
set(BOOST_BYPRODUCTS
${BOOST_LIBRARY_DIR}/libboost_date_time.a
${BOOST_LIBRARY_DIR}/libboost_filesystem.a
${BOOST_LIBRARY_DIR}/libboost_system.a
${BOOST_LIBRARY_DIR}/libboost_regex.a
${BOOST_LIBRARY_DIR}/libboost_thread.a
${BOOST_LIBRARY_DIR}/libboost_atomic.a
${BOOST_LIBRARY_DIR}/libboost_chrono.a
${BOOST_LIBRARY_DIR}/libboost_iostreams.a)
set(BOOST_CXX_FLAGS "-fPIC")
if(PAIMON_USE_CXX11_ABI)
string(APPEND BOOST_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=1")
else()
string(APPEND BOOST_CXX_FLAGS " -D_GLIBCXX_USE_CXX11_ABI=0")
endif()
externalproject_add(boost_ep
URL ${BOOST_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_BOOST_BUILD_SHA256_CHECKSUM}"
CONFIGURE_COMMAND ${BOOST_PREFIX}/src/boost_ep/bootstrap.sh
--with-libraries=date_time,filesystem,iostreams,regex,system,thread,chrono,atomic
BUILD_IN_SOURCE TRUE
BUILD_COMMAND ${BOOST_PREFIX}/src/boost_ep/b2
--prefix=${BOOST_INSTALL}
--libdir=${BOOST_LIBRARY_DIR} link=static
-sZLIB_INCLUDE=${ZLIB_INCLUDE_DIR}
-sZLIB_LIBRARY_PATH=${ZLIB_PREFIX}/lib
runtime-link=shared threading=multi variant=release
cxxflags=${BOOST_CXX_FLAGS} install
INSTALL_COMMAND bash -c
"mkdir -p ${BOOST_INSTALL}/include/boost && cp -r ${BOOST_PREFIX}/src/boost_ep/libs/*/include/boost/* ${BOOST_INSTALL}/include/boost && cp -r ${BOOST_PREFIX}/src/boost_ep/libs/*/*/include/boost/* ${BOOST_INSTALL}/include/boost"
DEPENDS zlib
BUILD_BYPRODUCTS ${BOOST_BYPRODUCTS}
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON)
include_directories(SYSTEM ${BOOST_INCLUDE_DIR})
add_library(boost_atomic STATIC IMPORTED)
set_target_properties(boost_atomic
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_atomic.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_chrono STATIC IMPORTED)
set_target_properties(boost_chrono
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_chrono.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_date_time STATIC IMPORTED)
set_target_properties(boost_date_time
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_date_time.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_filesystem STATIC IMPORTED)
set_target_properties(boost_filesystem
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_filesystem.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_regex STATIC IMPORTED)
set_target_properties(boost_regex
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_regex.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_thread STATIC IMPORTED)
set_target_properties(boost_thread
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_thread.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_iostreams STATIC IMPORTED)
set_target_properties(boost_iostreams
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_iostreams.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_library(boost_system STATIC IMPORTED)
set_target_properties(boost_system
PROPERTIES IMPORTED_LOCATION
${BOOST_LIBRARY_DIR}/libboost_system.a
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR})
add_dependencies(boost_atomic boost_ep)
add_dependencies(boost_chrono boost_ep)
add_dependencies(boost_date_time boost_ep)
add_dependencies(boost_filesystem boost_ep)
add_dependencies(boost_regex boost_ep)
add_dependencies(boost_thread boost_ep)
add_dependencies(boost_iostreams boost_ep)
add_dependencies(boost_system boost_ep)
endmacro(build_boost)
macro(build_re2)
message(STATUS "Building RE2 from source")
set(RE2_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/re2_ep-install")
set(RE2_INCLUDE_DIR "${RE2_PREFIX}/include")
set(RE2_STATIC_LIB
"${RE2_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}re2${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(RE2_LIBRARIES ${RE2_STATIC_LIB})
set(RE2_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${RE2_PREFIX}")
externalproject_add(re2_ep
${EP_COMMON_OPTIONS}
INSTALL_DIR ${RE2_PREFIX}
URL ${RE2_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_RE2_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${RE2_CMAKE_ARGS} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${RE2_STATIC_LIB}")
file(MAKE_DIRECTORY "${RE2_INCLUDE_DIR}")
include_directories(SYSTEM ${RE2_INCLUDE_DIR})
add_library(re2::re2 STATIC IMPORTED)
set_target_properties(re2::re2 PROPERTIES IMPORTED_LOCATION "${RE2_STATIC_LIB}")
target_include_directories(re2::re2 INTERFACE "${RE2_INCLUDE_DIR}")
add_dependencies(re2::re2 re2_ep)
endmacro()
macro(build_snappy)
message(STATUS "Building snappy from source")
set(SNAPPY_HOME "${CMAKE_CURRENT_BINARY_DIR}/snappy_ep-install")
set(SNAPPY_INCLUDE_DIR "${SNAPPY_HOME}/include")
set(SNAPPY_STATIC_LIB
"${SNAPPY_HOME}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}snappy${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(SNAPPY_LIBRARIES ${SNAPPY_STATIC_LIB})
set(SNAPPY_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${SNAPPY_HOME}
-DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF)
externalproject_add(snappy_ep
URL ${SNAPPY_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_SNAPPY_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${SNAPPY_CMAKE_ARGS} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${SNAPPY_STATIC_LIB}")
file(MAKE_DIRECTORY "${SNAPPY_INCLUDE_DIR}")
include_directories(SYSTEM ${SNAPPY_INCLUDE_DIR})
add_library(snappy STATIC IMPORTED)
set_target_properties(snappy PROPERTIES IMPORTED_LOCATION ${SNAPPY_STATIC_LIB})
target_include_directories(snappy INTERFACE ${SNAPPY_INCLUDE_DIR})
add_dependencies(snappy snappy_ep)
endmacro()
macro(build_zlib)
message(STATUS "Building zlib from source")
set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep-install")
set(ZLIB_INCLUDE_DIR "${ZLIB_PREFIX}/include")
set(ZLIB_STATIC_LIB_NAME z)
set(ZLIB_STATIC_LIB
"${ZLIB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZLIB_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB})
set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX})
externalproject_add(zlib_ep
URL ${ZLIB_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_ZLIB_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${ZLIB_CMAKE_ARGS} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}")
file(MAKE_DIRECTORY "${ZLIB_INCLUDE_DIR}")
include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
add_library(zlib STATIC IMPORTED)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_STATIC_LIB})
target_include_directories(zlib INTERFACE ${ZLIB_INCLUDE_DIR})
add_dependencies(zlib zlib_ep)
endmacro()
macro(build_zstd)
message(STATUS "Building zstd from source")
set(ZSTD_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zstd_ep-install")
set(ZSTD_INCLUDE_DIR "${ZSTD_PREFIX}/include")
set(ZSTD_STATIC_LIB_NAME zstd)
set(ZSTD_STATIC_LIB
"${ZSTD_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${ZSTD_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ZSTD_LIBRARIES ${ZSTD_STATIC_LIB})
set(ZSTD_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
set(ZSTD_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error")
string(REPLACE "-Werror" "" ZSTD_CMAKE_CXX_FLAGS ${ZSTD_CMAKE_CXX_FLAGS})
set(ZSTD_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=${ZSTD_PREFIX}
"-DCMAKE_CXX_FLAGS=${ZSTD_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${ZSTD_CMAKE_C_FLAGS}"
-DZSTD_BUILD_SHARED=OFF
-DZSTD_BUILD_PROGRAMS=OFF)
set(ZSTD_CONFIGURE SOURCE_SUBDIR "build/cmake" CMAKE_ARGS ${ZSTD_CMAKE_ARGS})
externalproject_add(zstd_ep
URL ${ZSTD_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_ZSTD_BUILD_SHA256_CHECKSUM}"
${ZSTD_CONFIGURE} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS ${ZSTD_STATIC_LIB})
file(MAKE_DIRECTORY "${ZSTD_INCLUDE_DIR}")
include_directories(SYSTEM ${ZSTD_INCLUDE_DIR})
add_library(zstd STATIC IMPORTED)
set_target_properties(zstd PROPERTIES IMPORTED_LOCATION ${ZSTD_STATIC_LIB})
target_include_directories(zstd INTERFACE ${ZSTD_INCLUDE_DIR})
add_dependencies(zstd zstd_ep)
endmacro(build_zstd)
macro(build_lz4)
message(STATUS "Building lz4 from source")
set(LZ4_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lz4_ep-install")
set(LZ4_INCLUDE_DIR "${LZ4_PREFIX}/include")
set(LZ4_STATIC_LIB
"${LZ4_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(LZ4_LIBRARIES ${LZ4_STATIC_LIB})
set(LZ4_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX=${LZ4_PREFIX}
-DLZ4_BUILD_CLI=OFF -DLZ4_BUILD_LEGACY_LZ4C=OFF)
set(LZ4_CONFIGURE SOURCE_SUBDIR "build/cmake" CMAKE_ARGS ${LZ4_CMAKE_ARGS})
externalproject_add(lz4_ep
URL ${LZ4_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_LZ4_BUILD_SHA256_CHECKSUM}"
${LZ4_CONFIGURE} ${THIRDPARTY_LOG_OPTIONS}
BUILD_BYPRODUCTS ${LZ4_STATIC_LIB})
file(MAKE_DIRECTORY "${LZ4_INCLUDE_DIR}")
include_directories(SYSTEM ${LZ4_INCLUDE_DIR})
add_library(lz4 STATIC IMPORTED)
set_target_properties(lz4 PROPERTIES IMPORTED_LOCATION ${LZ4_STATIC_LIB})
target_include_directories(lz4 INTERFACE ${LZ4_INCLUDE_DIR})
add_dependencies(lz4 lz4_ep)
endmacro()
macro(build_jindosdk_c)
message(STATUS "Building jindosdk-c from precompiled package")
set(JINDOSDK_C_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/jindosdk_ep-install")
set(JINDOSDK_C_HOME "${JINDOSDK_C_PREFIX}")
set(JINDOSDK_C_INCLUDE_DIR "${JINDOSDK_C_PREFIX}/include")
set(JINDOSDK_C_LIB_DIR "${JINDOSDK_C_PREFIX}/lib/native")
set(JINDOSDK_C_DYNAMIC_LIB "${JINDOSDK_C_LIB_DIR}/${JINDOSDK_C_DYNAMIC_LIB_FILE}")
# Extract and install jindosdk from precompiled package
externalproject_add(jindosdk_ep
URL ${JINDOSDK_C_SOURCE_URL}
URL_HASH "SHA256=${JINDOSDK_C_BUILD_SHA256_CHECKSUM}"
${THIRDPARTY_LOG_OPTIONS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND bash -c
"cp -r <SOURCE_DIR>/include/* ${JINDOSDK_C_INCLUDE_DIR}"
COMMAND bash -c
"cp -r <SOURCE_DIR>/lib/native/${JINDOSDK_C_DYNAMIC_LIB_FILE}* ${JINDOSDK_C_LIB_DIR}"
BUILD_BYPRODUCTS "${JINDOSDK_C_DYNAMIC_LIB}")
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${JINDOSDK_C_INCLUDE_DIR}")
file(MAKE_DIRECTORY "${JINDOSDK_C_LIB_DIR}")
add_library(jindosdk::c_sdk SHARED IMPORTED)
set_target_properties(jindosdk::c_sdk
PROPERTIES IMPORTED_LOCATION "${JINDOSDK_C_DYNAMIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES
"${JINDOSDK_C_INCLUDE_DIR}")
list(APPEND JINDOSDK_INCLUDE_DIR ${JINDOSDK_C_INCLUDE_DIR})
add_dependencies(jindosdk::c_sdk jindosdk_ep)
install(DIRECTORY "${JINDOSDK_C_LIB_DIR}/"
DESTINATION ${CMAKE_INSTALL_LIBDIR}
FILES_MATCHING
PATTERN "${JINDOSDK_C_DYNAMIC_LIB_FILE}*")
endmacro()
macro(build_lumina)
message(STATUS "Installing Lumina from precompiled package")
set(LUMINA_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lumina_ep-install")
set(LUMINA_INCLUDE_DIR "${LUMINA_PREFIX}/include")
set(LUMINA_LIB_DIR "${LUMINA_PREFIX}/lib")
set(LUMINA_DYNAMIC_LIB "${LUMINA_LIB_DIR}/liblumina.so")
externalproject_add(lumina_ep
URL ${LUMINA_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_LUMINA_BUILD_SHA256_CHECKSUM}"
${THIRDPARTY_LOG_OPTIONS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory
<SOURCE_DIR>/artifacts/cpp/linux-x86_64/install-root/usr/local/include
${LUMINA_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
<SOURCE_DIR>/artifacts/cpp/linux-x86_64/install-root/usr/local/lib/liblumina.so
${LUMINA_DYNAMIC_LIB}
BUILD_BYPRODUCTS "${LUMINA_DYNAMIC_LIB}")
file(MAKE_DIRECTORY "${LUMINA_INCLUDE_DIR}")
file(MAKE_DIRECTORY "${LUMINA_LIB_DIR}")
add_library(lumina::interface SHARED IMPORTED GLOBAL)
set_target_properties(lumina::interface
PROPERTIES IMPORTED_LOCATION "${LUMINA_DYNAMIC_LIB}"
IMPORTED_NO_SONAME TRUE
INTERFACE_INCLUDE_DIRECTORIES
"${LUMINA_INCLUDE_DIR}")
add_dependencies(lumina::interface lumina_ep)
install(FILES "${LUMINA_DYNAMIC_LIB}" DESTINATION ${CMAKE_INSTALL_LIBDIR})
endmacro()
macro(build_jindosdk_nextarch)
message(STATUS "Building jindosdk-nextarch from local source")
set(JINDOSDK_NEXTARCH_PREFIX
"${CMAKE_CURRENT_BINARY_DIR}/jindosdk-nextarch_ep-install")
set(JINDOSDK_NEXTARCH_HOME "${JINDOSDK_NEXTARCH_PREFIX}")
set(JINDOSDK_NEXTARCH_INCLUDE_DIR "${JINDOSDK_NEXTARCH_PREFIX}/include")
set(JINDOSDK_NEXTARCH_LIB_DIR "${JINDOSDK_NEXTARCH_PREFIX}/lib")
set(JINDOSDK_NEXTARCH_SOURCE_DIR "${CMAKE_SOURCE_DIR}/third_party/jindosdk-nextarch")
set(JINDOSDK_NEXTARCH_STATIC_LIB
"${JINDOSDK_NEXTARCH_LIB_DIR}/libjindosdk-nextarch.a")
# Get jindosdk dependencies (headers and dynamic library)
get_target_property(JINDOSDK_C_INCLUDE_DIR jindosdk::c_sdk
INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(JINDOSDK_C_LIBRARY_LOCATION jindosdk::c_sdk IMPORTED_LOCATION)
get_filename_component(JINDOSDK_C_DIR_ROOT "${JINDOSDK_C_INCLUDE_DIR}" DIRECTORY)
# Compile flags for jindosdk-nextarch
set(JINDOSDK_NEXTARCH_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS}")
set(JINDOSDK_NEXTARCH_CMAKE_C_FLAGS "${EP_C_FLAGS}")
set(JINDOSDK_NEXTARCH_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${JINDOSDK_NEXTARCH_PREFIX}"
"-DCMAKE_CXX_FLAGS=${JINDOSDK_NEXTARCH_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${JINDOSDK_NEXTARCH_CMAKE_C_FLAGS}"
-DJINDOSDK_ROOT=${JINDOSDK_C_DIR_ROOT}
-DJINDOSDK_LIBRARY_NAME=${JINDOSDK_C_DYNAMIC_LIB_NAME})
externalproject_add(jindosdk-nextarch_ep
SOURCE_DIR ${JINDOSDK_NEXTARCH_SOURCE_DIR}
CMAKE_ARGS ${JINDOSDK_NEXTARCH_CMAKE_ARGS}
BUILD_BYPRODUCTS "${JINDOSDK_NEXTARCH_STATIC_LIB}"
DEPENDS jindosdk::c_sdk ${THIRDPARTY_LOG_OPTIONS})
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${JINDOSDK_NEXTARCH_INCLUDE_DIR}")
file(MAKE_DIRECTORY "${JINDOSDK_NEXTARCH_LIB_DIR}")
add_library(jindosdk::nextarch STATIC IMPORTED)
set_target_properties(jindosdk::nextarch
PROPERTIES IMPORTED_LOCATION "${JINDOSDK_NEXTARCH_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES
"${JINDOSDK_NEXTARCH_INCLUDE_DIR}")
target_link_libraries(jindosdk::nextarch INTERFACE jindosdk::c_sdk pthread dl)
list(APPEND JINDOSDK_INCLUDE_DIR ${JINDOSDK_NEXTARCH_INCLUDE_DIR})
add_dependencies(jindosdk::nextarch jindosdk-nextarch_ep)
endmacro()
macro(build_protobuf)
message(STATUS "Building protobuf from source")
set(PROTOBUF_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep-install")
set(PROTOBUF_INCLUDE_DIR "${PROTOBUF_PREFIX}/include")
set(PROTOBUF_STATIC_LIB
"${PROTOBUF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}protobuf${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(PROTOC_STATIC_LIB
"${PROTOBUF_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}protoc${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(PROTOBUF_LIBRARIES ${PROTOBUF_STATIC_LIB})
set(PROTOBUF_COMPILER "${PROTOBUF_PREFIX}/bin/protoc")
get_target_property(THIRDPARTY_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(THIRDPARTY_ZLIB_ROOT "${THIRDPARTY_ZLIB_INCLUDE_DIR}"
DIRECTORY)
# Strip lto flags (which may be added by dh_auto_configure)
# See https://github.com/protocolbuffers/protobuf/issues/7092
set(PROTOBUF_C_FLAGS ${EP_C_FLAGS})
set(PROTOBUF_CXX_FLAGS ${EP_CXX_FLAGS})
string(REPLACE "-flto=auto" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}")
string(REPLACE "-ffat-lto-objects" "" PROTOBUF_C_FLAGS "${PROTOBUF_C_FLAGS}")
string(REPLACE "-flto=auto" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}")
string(REPLACE "-ffat-lto-objects" "" PROTOBUF_CXX_FLAGS "${PROTOBUF_CXX_FLAGS}")
string(APPEND PROTOBUF_CXX_FLAGS
" -Wno-inconsistent-missing-override -Wno-unneeded-internal-declaration")
set(PROTOBUF_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=${PROTOBUF_PREFIX}
"-DCMAKE_CXX_FLAGS=${PROTOBUF_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${PROTOBUF_C_FLAGS}"
"-DZLIB_ROOT=${THIRDPARTY_ZLIB_ROOT}"
-Dprotobuf_BUILD_TESTS=OFF
-Dprotobuf_DEBUG_POSTFIX=)
set(PROTOBUF_CONFIGURE SOURCE_SUBDIR "cmake" CMAKE_ARGS ${PROTOBUF_CMAKE_ARGS})
externalproject_add(protobuf_ep
URL ${PROTOBUF_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_PROTOBUF_BUILD_SHA256_CHECKSUM}"
${PROTOBUF_CONFIGURE} ${THIRDPARTY_LOG_OPTIONS}
# BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS "${PROTOBUF_STATIC_LIB}" "${PROTOBUF_COMPILER}"
DEPENDS zlib)
file(MAKE_DIRECTORY "${PROTOBUF_INCLUDE_DIR}")
include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR})
add_library(libprotobuf STATIC IMPORTED)
set_target_properties(libprotobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_STATIC_LIB})
target_include_directories(libprotobuf INTERFACE ${PROTOBUF_INCLUDE_DIR})
add_library(libprotoc STATIC IMPORTED)
set_target_properties(libprotoc PROPERTIES IMPORTED_LOCATION ${PROTOC_STATIC_LIB})
target_include_directories(libprotoc INTERFACE ${PROTOBUF_INCLUDE_DIR})
add_executable(protoc IMPORTED)
set_target_properties(protoc PROPERTIES IMPORTED_LOCATION ${PROTOBUF_COMPILER})
add_dependencies(libprotobuf protobuf_ep)
add_dependencies(protoc protobuf_ep)
endmacro()
macro(build_avro)
message(STATUS "Building avro from source")
set(AVRO_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/avro_ep-install")
set(AVRO_INCLUDE_DIR "${AVRO_PREFIX}/include")
set(AVRO_STATIC_LIB_NAME avrocpp_s)
set(AVRO_STATIC_LIB
"${AVRO_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${AVRO_STATIC_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(AVRO_LIBRARIES ${AVRO_STATIC_LIB})
get_target_property(AVRO_SNAPPY_INCLUDE_DIR snappy INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(AVRO_SNAPPY_ROOT "${AVRO_SNAPPY_INCLUDE_DIR}" DIRECTORY)
get_target_property(AVRO_ZSTD_INCLUDE_DIR zstd INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(AVRO_ZSTD_ROOT "${AVRO_ZSTD_INCLUDE_DIR}" DIRECTORY)
get_target_property(AVRO_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(AVRO_ZLIB_ROOT "${AVRO_ZLIB_INCLUDE_DIR}" DIRECTORY)
get_target_property(AVRO_FMT_INCLUDE_DIR fmt INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(AVRO_FMT_ROOT "${AVRO_FMT_INCLUDE_DIR}" DIRECTORY)
set(AVRO_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
set(AVRO_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error")
set(AVRO_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${AVRO_PREFIX}"
"-DCMAKE_CXX_FLAGS=${AVRO_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${AVRO_CMAKE_C_FLAGS}"
"-DAVRO_BUILD_TESTS=OFF"
"-DAVRO_BUILD_EXECUTABLES=OFF"
"-DZLIB_ROOT=${AVRO_ZLIB_ROOT}"
"-Dfmt_ROOT=${AVRO_FMT_ROOT}"
"-Dzstd_ROOT=${AVRO_ZSTD_ROOT}"
"-DSnappy_ROOT=${AVRO_SNAPPY_ROOT}")
externalproject_add(avro_ep
URL ${AVRO_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_AVRO_BUILD_SHA256_CHECKSUM}"
SOURCE_SUBDIR "lang/c++"
CMAKE_ARGS ${AVRO_CMAKE_ARGS}
BUILD_BYPRODUCTS "${AVRO_STATIC_LIB}"
DEPENDS fmt zlib zstd snappy)
file(MAKE_DIRECTORY "${AVRO_INCLUDE_DIR}")
include_directories(SYSTEM ${AVRO_INCLUDE_DIR})
add_library(avro STATIC IMPORTED)
set_target_properties(avro PROPERTIES IMPORTED_LOCATION ${AVRO_STATIC_LIB})
target_include_directories(avro INTERFACE ${AVRO_INCLUDE_DIR})
target_link_libraries(avro INTERFACE zlib zstd snappy)
add_dependencies(avro avro_ep)
endmacro()
macro(build_orc)
message(STATUS "Building orc from source")
get_target_property(ORC_SNAPPY_INCLUDE_DIR snappy INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_SNAPPY_ROOT "${ORC_SNAPPY_INCLUDE_DIR}" DIRECTORY)
get_target_property(ORC_LZ4_INCLUDE_DIR lz4 INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_LZ4_ROOT "${ORC_LZ4_INCLUDE_DIR}" DIRECTORY)
get_target_property(ORC_ZSTD_INCLUDE_DIR zstd INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_ZSTD_ROOT "${ORC_ZSTD_INCLUDE_DIR}" DIRECTORY)
get_target_property(ORC_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_ZLIB_ROOT "${ORC_ZLIB_INCLUDE_DIR}" DIRECTORY)
get_target_property(ORC_PROTOBUF_INCLUDE_DIR libprotobuf
INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ORC_PROTOBUF_ROOT "${ORC_PROTOBUF_INCLUDE_DIR}" DIRECTORY)
get_property(PAIMON_RPATH GLOBAL PROPERTY PAIMON_RPATH)
message(STATUS "PAIMON_RPATH value: ${PAIMON_RPATH}")
set(ORC_RPATH ${PAIMON_RPATH})
message(STATUS "ORC_RPATH value: ${ORC_RPATH}")
string(REPLACE "-Werror" "" EP_CXX_FLAGS ${EP_CXX_FLAGS})
set(ORC_CMAKE_CXX_FLAGS
"${EP_CXX_FLAGS} -fPIC -Wno-error ${CMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}}")
set(ORC_CMAKE_C_FLAGS
"${EP_C_FLAGS} -fPIC -Wno-error ${CMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}}")
set(ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/orc_ep-prefix")
set(ORC_INCLUDE_DIR "${ORC_PREFIX}/include")
set(ORC_SOURCE_DIR "${ORC_PREFIX}/cpp")
set(ORC_BUILD_DIR "${CMAKE_BINARY_DIR}/build/orc")
set(ORC_STATIC_LIB "${ORC_PREFIX}/lib/liborc.a")
message("ORC_STATIC_LIB IS ${ORC_STATIC_LIB}")
message("ORC_CMAKE_CXX_FLAGS ${ORC_CMAKE_CXX_FLAGS}")
message("ORC_CMAKE_C_FLAGS ${ORC_CMAKE_C_FLAGS}")
set(ORC_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}"
"-DCMAKE_CXX_FLAGS=${ORC_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${ORC_CMAKE_C_FLAGS}"
"-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${ORC_CMAKE_CXX_FLAGS}"
"-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}"
"-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}"
"-DCMAKE_MODULE_LINKER_FLAGS=-Wl,-rpath=${ORC_RPATH}"
"-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}"
"-DLZ4_HOME=${ORC_LZ4_ROOT}"
"-DZSTD_HOME=${ORC_ZSTD_ROOT}"
"-DZLIB_HOME=${ORC_ZLIB_ROOT}"
"-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}"
"-DProtobuf_ROOT=${ORC_PROTOBUF_ROOT}"
-DBUILD_JAVA=OFF
-DBUILD_CPP_TESTS=OFF
-DBUILD_TOOLS=OFF
-DBUILD_CPP_ENABLE_METRICS=ON)
set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/orc.diff")
externalproject_add(orc_ep
URL ${ORC_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_ORC_BUILD_SHA256_CHECKSUM}"
SOURCE_DIR ${ORC_SOURCE_DIR}
BINARY_DIR ${ORC_BUILD_DIR}
CMAKE_ARGS ${ORC_CMAKE_ARGS}
LOG_PATCH ON
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> bash -c
"[ -f .patched ] && echo '<SOURCE_DIR> patch already applied, ignore...' || patch -s -N -p1 -i '${PATCH_FILE}' && touch .patched"
UPDATE_DISCONNECTED 1
BUILD_BYPRODUCTS ${ORC_STATIC_LIB}
DEPENDS zstd
snappy
lz4
zlib
libprotobuf)
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${ORC_INCLUDE_DIR}")
add_library(orc::orc STATIC IMPORTED)
set_target_properties(orc::orc
PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${ORC_INCLUDE_DIR}")
target_link_libraries(orc::orc
INTERFACE zstd
snappy
lz4
zlib
libprotobuf)
add_dependencies(orc::orc orc_ep)
endmacro()
macro(build_arrow)
message(STATUS "Building Arrow from source")
get_target_property(ARROW_SNAPPY_INCLUDE_DIR snappy INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ARROW_SNAPPY_ROOT "${ARROW_SNAPPY_INCLUDE_DIR}" DIRECTORY)
get_target_property(ARROW_LZ4_INCLUDE_DIR lz4 INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ARROW_LZ4_ROOT "${ARROW_LZ4_INCLUDE_DIR}" DIRECTORY)
get_target_property(ARROW_ZSTD_INCLUDE_DIR zstd INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ARROW_ZSTD_ROOT "${ARROW_ZSTD_INCLUDE_DIR}" DIRECTORY)
get_target_property(ARROW_ZLIB_INCLUDE_DIR zlib INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ARROW_ZLIB_ROOT "${ARROW_ZLIB_INCLUDE_DIR}" DIRECTORY)
get_target_property(ARROW_RE2_INCLUDE_DIR re2::re2 INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(ARROW_RE2_ROOT "${ARROW_RE2_INCLUDE_DIR}" DIRECTORY)
set(ARROW_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
set(ARROW_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error")
string(REPLACE "-Werror" "" ARROW_CMAKE_CXX_FLAGS ${ARROW_CMAKE_CXX_FLAGS})
# Fix for thrift Mutex.h missing #include <cstdint> (GCC 15 strictness)
# Use -include to force include cstdint for all C++ files
string(APPEND ARROW_CMAKE_CXX_FLAGS " -include cstdint")
set(ARROW_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/arrow_ep-install")
set(ARROW_HOME "${ARROW_PREFIX}")
set(ARROW_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/arrow_ep-prefix/src/arrow_ep")
set(_ARROW_LIBRARY_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(ARROW_INCLUDE_DIR "${ARROW_PREFIX}/include")
file(MAKE_DIRECTORY "${ARROW_INCLUDE_DIR}")
set(ARROW_BUILD_DIR "${CMAKE_BINARY_DIR}/arrow")
set(ARROW_STATIC_LIB
"${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}arrow${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ARROW_DATASET_STATIC_LIB
"${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}arrow_dataset${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ARROW_ACERO_STATIC_LIB
"${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}arrow_acero${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ARROW_BUNDLED_DEP_STATIC_LIB
"${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}arrow_bundled_dependencies${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(PARQUET_STATIC_LIB
"${ARROW_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}parquet${CMAKE_STATIC_LIBRARY_SUFFIX}"
)
set(ARROW_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${ARROW_PREFIX}"
"-DCMAKE_CXX_FLAGS=${ARROW_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${ARROW_CMAKE_C_FLAGS}"
"-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${ARROW_CMAKE_CXX_FLAGS}"
-DARROW_DEPENDENCY_USE_SHARED=OFF
-DARROW_BUILD_SHARED=OFF
-DARROW_BUILD_STATIC=ON
-DARROW_BUILD_TESTS=OFF
-DARROW_BUILD_BENCHMARKS=OFF
-DARROW_BUILD_EXAMPLES=OFF
-DARROW_JEMALLOC=OFF
-DARROW_WITH_RE2=ON
-DARROW_WITH_UTF8PROC=OFF
-DARROW_ORC=OFF
-DARROW_SIMD_LEVEL=NONE
-DARROW_RUNTIME_SIMD_LEVEL=NONE
-DARROW_PARQUET=ON
-DARROW_IPC=ON
-DARROW_DATASET=ON
-DARROW_JSON=ON
-DARROW_COMPUTE=ON
-DARROW_WITH_SNAPPY=ON
-DARROW_WITH_ZLIB=ON
-DARROW_WITH_LZ4=ON
-DARROW_WITH_ZSTD=ON
-DARROW_WITH_BZ2=OFF
-DARROW_WITH_BROTLI=ON
-DZSTD_ROOT=${ARROW_ZSTD_ROOT}
-DZLIB_ROOT=${ARROW_ZLIB_ROOT}
-DSnappy_ROOT=${ARROW_SNAPPY_ROOT}
-DLZ4_ROOT=${ARROW_LZ4_ROOT}
-Dre2_ROOT=${ARROW_RE2_ROOT}
-DBUILD_WARNING_LEVEL=PRODUCTION) # ignore warnings under gcc8
set(ARROW_CONFIGURE SOURCE_SUBDIR "cpp" CMAKE_ARGS ${ARROW_CMAKE_ARGS})
set(PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/arrow.diff")
externalproject_add(arrow_ep
URL ${ARROW_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_ARROW_BUILD_SHA256_CHECKSUM}"
LOG_PATCH ON
PATCH_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR> bash -c
"[ -f .patched ] && echo '<SOURCE_DIR> patch already applied, ignore...' || patch -s -N -p1 -i '${PATCH_FILE}' && touch .patched"
GIT_SUBMODULES "" GIT_SUBMODULES_RECURSE FALSE ${ARROW_CONFIGURE}
UPDATE_DISCONNECTED 1
BUILD_BYPRODUCTS "${ARROW_STATIC_LIB}"
"${ARROW_BUNDLED_DEP_STATIC_LIB}"
"${PARQUET_STATIC_LIB}"
"${ARROW_DATASET_STATIC_LIB}"
"${ARROW_ACERO_STATIC_LIB}"
DEPENDS zstd
snappy
lz4
zlib
re2::re2)
add_library(arrow STATIC IMPORTED)
set_target_properties(arrow
PROPERTIES IMPORTED_LOCATION "${ARROW_PREFIX}/lib/libarrow.a"
INTERFACE_INCLUDE_DIRECTORIES "${ARROW_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${ARROW_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_library(arrow_dataset STATIC IMPORTED)
set_target_properties(arrow_dataset
PROPERTIES IMPORTED_LOCATION
"${ARROW_PREFIX}/lib/libarrow_dataset.a"
INTERFACE_INCLUDE_DIRECTORIES "${ARROW_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${ARROW_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_library(arrow_acero STATIC IMPORTED)
set_target_properties(arrow_acero
PROPERTIES IMPORTED_LOCATION
"${ARROW_PREFIX}/lib/libarrow_acero.a"
INTERFACE_INCLUDE_DIRECTORIES "${ARROW_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${ARROW_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_library(parquet STATIC IMPORTED)
set_target_properties(parquet
PROPERTIES IMPORTED_LOCATION "${ARROW_PREFIX}/lib/libparquet.a"
INTERFACE_INCLUDE_DIRECTORIES "${ARROW_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${ARROW_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_library(arrow_bundled_dependencies STATIC IMPORTED)
set_target_properties(arrow_bundled_dependencies
PROPERTIES IMPORTED_LOCATION
"${ARROW_PREFIX}/lib/libarrow_bundled_dependencies.a"
INTERFACE_INCLUDE_DIRECTORIES "${ARROW_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${ARROW_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_dependencies(arrow arrow_ep)
add_dependencies(parquet arrow_ep)
add_dependencies(arrow_bundled_dependencies arrow_ep)
add_dependencies(arrow_dataset arrow_ep)
add_dependencies(arrow_acero arrow_ep)
target_link_libraries(arrow_acero INTERFACE arrow)
target_link_libraries(arrow_dataset INTERFACE arrow_acero)
target_link_libraries(arrow
INTERFACE zstd
snappy
lz4
zlib
re2::re2
arrow_bundled_dependencies)
target_link_libraries(parquet
INTERFACE zstd
snappy
lz4
zlib
arrow_bundled_dependencies
arrow_dataset)
endmacro(build_arrow)
macro(build_gtest)
message(STATUS "Building gtest from source")
set(GTEST_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
string(REPLACE "-Werror" "" GTEST_CMAKE_CXX_FLAGS ${GTEST_CMAKE_CXX_FLAGS})
set(GTEST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest_ep-install")
set(GTEST_INCLUDE_DIR "${GTEST_PREFIX}/include")
set(_GTEST_RUNTIME_DIR ${BUILD_OUTPUT_ROOT_DIRECTORY})
# Library and runtime same on non-Windows
set(_GTEST_LIBRARY_DIR "${_GTEST_RUNTIME_DIR}")
if(LOWERCASE_BUILD_TYPE STREQUAL "debug")
set(GTEST_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtestd.a")
set(GMOCK_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmockd.a")
set(GTEST_MAIN_STATIC_LIB
"${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_maind.a")
else()
set(GTEST_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest.a")
set(GMOCK_STATIC_LIB "${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmock.a")
set(GTEST_MAIN_STATIC_LIB
"${GTEST_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main.a")
endif()
set(GTEST_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${GTEST_PREFIX}"
"-DCMAKE_CXX_FLAGS=${GTEST_CMAKE_CXX_FLAGS}"
"-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${GTEST_CMAKE_CXX_FLAGS}"
"-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${_GTEST_RUNTIME_DIR}"
"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}=${_GTEST_RUNTIME_DIR}")
externalproject_add(googletest_ep
URL ${GTEST_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_GTEST_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${GTEST_CMAKE_ARGS}
BUILD_BYPRODUCTS "${GTEST_STATIC_LIB}" "${GTEST_MAIN_STATIC_LIB}"
"${GMOCK_STATIC_LIB}")
# The include directory must exist before it is referenced by a target.
file(MAKE_DIRECTORY "${GTEST_INCLUDE_DIR}")
add_library(GTest::gtest STATIC IMPORTED)
set_target_properties(GTest::gtest
PROPERTIES IMPORTED_LOCATION "${GTEST_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
add_library(GTest::gtest_main STATIC IMPORTED)
set_target_properties(GTest::gtest_main
PROPERTIES IMPORTED_LOCATION "${GTEST_MAIN_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
add_library(GTest::gmock STATIC IMPORTED)
set_target_properties(GTest::gmock
PROPERTIES IMPORTED_LOCATION "${GMOCK_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
add_dependencies(GTest::gtest googletest_ep)
add_dependencies(GTest::gtest_main googletest_ep)
add_dependencies(GTest::gmock googletest_ep)
find_package(Threads REQUIRED)
set(GTEST_LINK_TOOLCHAIN GTest::gtest_main GTest::gtest GTest::gmock Threads::Threads)
endmacro()
macro(build_tbb)
message(STATUS "Building Tbb from source")
set(TBB_CMAKE_CXX_FLAGS "${EP_CXX_FLAGS} -Wno-error")
set(TBB_CMAKE_C_FLAGS "${EP_C_FLAGS} -Wno-error")
string(REPLACE "-Werror" "" TBB_CMAKE_CXX_FLAGS ${TBB_CMAKE_CXX_FLAGS})
string(REPLACE "-Wdocumentation" "" TBB_CMAKE_CXX_FLAGS ${TBB_CMAKE_CXX_FLAGS})
string(REPLACE "-Wdocumentation" "" TBB_CMAKE_C_FLAGS ${TBB_CMAKE_C_FLAGS})
set(TBB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/tbb_ep-install")
if(LOWERCASE_BUILD_TYPE STREQUAL "debug")
set(TBB_STATIC_LIB "${TBB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tbb_debug.a")
else()
set(TBB_STATIC_LIB "${TBB_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tbb.a")
endif()
set(TBB_INCLUDE_DIR "${TBB_PREFIX}/include")
file(MAKE_DIRECTORY "${TBB_INCLUDE_DIR}")
set(TBB_BUILD_DIR "${CMAKE_BINARY_DIR}/tbb")
set(TBB_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
"-DCMAKE_INSTALL_PREFIX=${TBB_PREFIX}"
"-DCMAKE_CXX_FLAGS=${TBB_CMAKE_CXX_FLAGS}"
"-DCMAKE_C_FLAGS=${TBB_CMAKE_C_FLAGS}"
"-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${TBB_CMAKE_CXX_FLAGS}"
-DTBB_TEST=OFF)
externalproject_add(tbb_ep
URL ${TBB_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_TBB_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${TBB_CMAKE_ARGS}
BUILD_BYPRODUCTS "${TBB_STATIC_LIB}")
add_library(tbb STATIC IMPORTED)
set_target_properties(tbb
PROPERTIES IMPORTED_LOCATION "${TBB_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${TBB_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES
"${TBB_BUILD_DIR}/${LOWERCASE_BUILD_TYPE}")
add_dependencies(tbb tbb_ep)
endmacro(build_tbb)
macro(build_glog)
message(STATUS "Building glog from source")
set(GLOG_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/glog_ep-install")
set(GLOG_INCLUDE_DIR "${GLOG_PREFIX}/include")
if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG")
set(GLOG_LIB_SUFFIX "d")
else()
set(GLOG_LIB_SUFFIX "")
endif()
set(GLOG_STATIC_LIB "${GLOG_PREFIX}/lib/libglog${GLOG_LIB_SUFFIX}.a")
set(GLOG_CMAKE_CXX_FLAGS " -Wno-error ${EP_CXX_FLAGS}")
set(GLOG_CMAKE_C_FLAGS " -Wno-error ${EP_C_FLAGS}")
if(CMAKE_THREAD_LIBS_INIT)
string(APPEND GLOG_CMAKE_CXX_FLAGS " ${CMAKE_THREAD_LIBS_INIT}")
string(APPEND GLOG_CMAKE_C_FLAGS " ${CMAKE_THREAD_LIBS_INIT}")
endif()
set(GLOG_CMAKE_ARGS
${EP_COMMON_CMAKE_ARGS}
-DCMAKE_INSTALL_PREFIX=${GLOG_PREFIX}
-DWITH_GFLAGS=OFF
-DWITH_GTEST=OFF
-DCMAKE_CXX_FLAGS=${GLOG_CMAKE_CXX_FLAGS}
-DCMAKE_C_FLAGS=${GLOG_CMAKE_C_FLAGS})
externalproject_add(glog_ep
URL ${GLOG_SOURCE_URL}
URL_HASH "SHA256=${PAIMON_GLOG_BUILD_SHA256_CHECKSUM}"
CMAKE_ARGS ${GLOG_CMAKE_ARGS}
BUILD_BYPRODUCTS "${GLOG_STATIC_LIB}")
file(MAKE_DIRECTORY "${GLOG_INCLUDE_DIR}")
add_library(glog STATIC IMPORTED)
set_target_properties(glog
PROPERTIES IMPORTED_LOCATION "${GLOG_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIR}"
INTERFACE_LINK_DIRECTORIES "${GLOG_BUILD_DIR}/lib"
INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT")
add_dependencies(glog glog_ep)
find_library(LIBUNWIND_LIBRARY NAMES unwind)
if(LIBUNWIND_LIBRARY)
target_link_libraries(glog INTERFACE ${LIBUNWIND_LIBRARY})
endif()
endmacro()
resolve_dependency(fmt)
resolve_dependency(RapidJSON)
paimon_enforce_patched_dependency_policy()
paimon_apply_dependency_source_defaults()
resolve_dependency(RE2)
resolve_dependency(Snappy)
resolve_dependency(zstd)
resolve_dependency(ZLIB)
resolve_dependency(LZ4)
resolve_dependency(Arrow)
paimon_warn_if_mixed_arrow_dependencies()
resolve_dependency(TBB)
resolve_dependency(glog)
if(PAIMON_ENABLE_AVRO)
resolve_dependency(Avro)
endif()
if(PAIMON_ENABLE_ORC)
resolve_dependency(Protobuf)
resolve_dependency(ORC)
endif()
if(PAIMON_ENABLE_JINDO)
build_jindosdk_c()
build_jindosdk_nextarch()
endif()
if(PAIMON_ENABLE_LUMINA)
build_lumina()
endif()
if(PAIMON_ENABLE_LUCENE)
build_boost()
build_lucene()
build_jieba()
endif()