Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions cmake_modules/DefineOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,53 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
define_option(PAIMON_USE_TSAN "Enable Thread Sanitizer checks" OFF)
define_option(PAIMON_USE_UBSAN "Enable Undefined Behaviour Sanitizer checks" OFF)

#----------------------------------------------------------------------
set_option_category("Thirdparty dependencies")

if(NOT "$ENV{CONDA_PREFIX}" STREQUAL "")
set(PAIMON_DEPENDENCY_SOURCE_DEFAULT "CONDA")
else()
set(PAIMON_DEPENDENCY_SOURCE_DEFAULT "AUTO")
endif()

define_option_string(PAIMON_DEPENDENCY_SOURCE
"Method to use for acquiring Paimon's build dependencies"
"${PAIMON_DEPENDENCY_SOURCE_DEFAULT}"
"AUTO"
"BUNDLED"
"SYSTEM"
"CONDA"
"VCPKG"
"BREW")

define_option(PAIMON_VERBOSE_THIRDPARTY_BUILD
"Show output from ExternalProjects rather than just logging to files"
OFF)

define_option(PAIMON_DEPENDENCY_USE_SHARED
"Link to shared libraries for dependencies where available"
ON)

define_option(PAIMON_SNAPPY_USE_SHARED
"Rely on Snappy shared libraries where relevant"
${PAIMON_DEPENDENCY_USE_SHARED})

define_option(PAIMON_ZSTD_USE_SHARED
"Rely on zstd shared libraries where relevant"
${PAIMON_DEPENDENCY_USE_SHARED})

define_option(PAIMON_LZ4_USE_SHARED
"Rely on lz4 shared libraries where relevant"
${PAIMON_DEPENDENCY_USE_SHARED})

define_option(PAIMON_ZLIB_USE_SHARED
"Rely on zlib shared libraries where relevant"
${PAIMON_DEPENDENCY_USE_SHARED})

define_option(PAIMON_GLOG_USE_SHARED
"Rely on glog shared libraries where relevant"
${PAIMON_DEPENDENCY_USE_SHARED})

#----------------------------------------------------------------------
set_option_category("Advanced developer")

Expand Down
109 changes: 109 additions & 0 deletions cmake_modules/FindSnappyAlt.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# 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.

if(SnappyAlt_FOUND)
return()
endif()

set(find_package_args)
if(SnappyAlt_FIND_VERSION)
list(APPEND find_package_args ${SnappyAlt_FIND_VERSION})
endif()
if(SnappyAlt_FIND_QUIETLY)
list(APPEND find_package_args QUIET)
endif()

# Try to find Snappy using standard find_package first
find_package(Snappy ${find_package_args})
if(Snappy_FOUND)
if(PAIMON_SNAPPY_USE_SHARED)
set(Snappy_TARGET Snappy::snappy)
set(SnappyAlt_FOUND TRUE)
return()
else()
if(TARGET Snappy::snappy-static)
set(Snappy_TARGET Snappy::snappy-static)
set(SnappyAlt_FOUND TRUE)
return()
else()
get_target_property(Snappy_TYPE Snappy::snappy TYPE)
if(Snappy_TYPE STREQUAL "STATIC_LIBRARY" OR Snappy_TYPE STREQUAL "INTERFACE_LIBRARY")
set(Snappy_TARGET Snappy::snappy)
set(SnappyAlt_FOUND TRUE)
return()
endif()
endif()
endif()
endif()

# Manual search if standard find_package didn't work
set(PAIMON_LIBRARY_PATH_SUFFIXES
lib
lib64
lib/${CMAKE_LIBRARY_ARCHITECTURE})
set(PAIMON_INCLUDE_PATH_SUFFIXES include)

if(PAIMON_SNAPPY_USE_SHARED)
set(SNAPPY_LIB_NAMES)
if(CMAKE_IMPORT_LIBRARY_SUFFIX)
list(APPEND SNAPPY_LIB_NAMES
"${CMAKE_IMPORT_LIBRARY_PREFIX}snappy${CMAKE_IMPORT_LIBRARY_SUFFIX}")
endif()
list(APPEND SNAPPY_LIB_NAMES
"${CMAKE_SHARED_LIBRARY_PREFIX}snappy${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
set(SNAPPY_LIB_NAMES
"${CMAKE_STATIC_LIBRARY_PREFIX}snappy${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif()

if(Snappy_ROOT)
find_library(Snappy_LIB
NAMES ${SNAPPY_LIB_NAMES}
PATHS ${Snappy_ROOT}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES}
NO_DEFAULT_PATH)
find_path(Snappy_INCLUDE_DIR
NAMES snappy.h
PATHS ${Snappy_ROOT}
NO_DEFAULT_PATH
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
else()
find_library(Snappy_LIB NAMES ${SNAPPY_LIB_NAMES}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES})
find_path(Snappy_INCLUDE_DIR
NAMES snappy.h
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
endif()

find_package_handle_standard_args(SnappyAlt REQUIRED_VARS Snappy_LIB Snappy_INCLUDE_DIR)

if(SnappyAlt_FOUND)
if(PAIMON_SNAPPY_USE_SHARED)
set(Snappy_TARGET Snappy::snappy)
set(Snappy_TARGET_TYPE SHARED)
else()
set(Snappy_TARGET Snappy::snappy)
set(Snappy_TARGET_TYPE STATIC)
endif()

if(NOT TARGET ${Snappy_TARGET})
add_library(${Snappy_TARGET} ${Snappy_TARGET_TYPE} IMPORTED)
set_target_properties(${Snappy_TARGET}
PROPERTIES IMPORTED_LOCATION "${Snappy_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${Snappy_INCLUDE_DIR}")
endif()
endif()
99 changes: 99 additions & 0 deletions cmake_modules/FindglogAlt.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# 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.

if(glogAlt_FOUND)
return()
endif()

set(find_package_args)
if(glogAlt_FIND_VERSION)
list(APPEND find_package_args ${glogAlt_FIND_VERSION})
endif()
if(glogAlt_FIND_QUIETLY)
list(APPEND find_package_args QUIET)
endif()

# Try to find glog using standard find_package first
find_package(glog ${find_package_args})
if(glog_FOUND)
set(glogAlt_FOUND TRUE)
if(TARGET glog::glog)
return()
endif()
endif()

# Manual search
set(PAIMON_LIBRARY_PATH_SUFFIXES
lib
lib64
lib/${CMAKE_LIBRARY_ARCHITECTURE})
set(PAIMON_INCLUDE_PATH_SUFFIXES include)

if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG")
set(GLOG_LIB_SUFFIX "d")
else()
set(GLOG_LIB_SUFFIX "")
endif()

if(PAIMON_GLOG_USE_SHARED)
set(GLOG_LIB_NAMES)
if(CMAKE_IMPORT_LIBRARY_SUFFIX)
list(APPEND GLOG_LIB_NAMES
"${CMAKE_IMPORT_LIBRARY_PREFIX}glog${GLOG_LIB_SUFFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
endif()
list(APPEND GLOG_LIB_NAMES
"${CMAKE_SHARED_LIBRARY_PREFIX}glog${GLOG_LIB_SUFFIX}${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
set(GLOG_LIB_NAMES
"${CMAKE_STATIC_LIBRARY_PREFIX}glog${GLOG_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif()

if(glog_ROOT)
find_library(glog_LIB
NAMES ${GLOG_LIB_NAMES}
PATHS ${glog_ROOT}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES}
NO_DEFAULT_PATH)
find_path(glog_INCLUDE_DIR
NAMES glog/logging.h
PATHS ${glog_ROOT}
NO_DEFAULT_PATH
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
else()
find_library(glog_LIB NAMES ${GLOG_LIB_NAMES}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES})
find_path(glog_INCLUDE_DIR
NAMES glog/logging.h
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
endif()

find_package_handle_standard_args(glogAlt REQUIRED_VARS glog_LIB glog_INCLUDE_DIR)

if(glogAlt_FOUND)
if(NOT TARGET glog::glog)
if(PAIMON_GLOG_USE_SHARED)
set(glog_TARGET_TYPE SHARED)
else()
set(glog_TARGET_TYPE STATIC)
endif()
add_library(glog::glog ${glog_TARGET_TYPE} IMPORTED)
set_target_properties(glog::glog
PROPERTIES IMPORTED_LOCATION "${glog_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${glog_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT")
endif()
endif()
118 changes: 118 additions & 0 deletions cmake_modules/Findlz4Alt.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# 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.

if(lz4Alt_FOUND)
return()
endif()

set(find_package_args)
if(lz4Alt_FIND_VERSION)
list(APPEND find_package_args ${lz4Alt_FIND_VERSION})
endif()
if(lz4Alt_FIND_QUIETLY)
list(APPEND find_package_args QUIET)
endif()

# Try to find lz4 using standard find_package first
find_package(lz4 ${find_package_args})
if(lz4_FOUND)
set(lz4Alt_FOUND TRUE)
if(TARGET LZ4::lz4)
return()
elseif(TARGET lz4::lz4)
add_library(LZ4::lz4 ALIAS lz4::lz4)
return()
elseif(PAIMON_LZ4_USE_SHARED AND TARGET LZ4::lz4_shared)
add_library(LZ4::lz4 ALIAS LZ4::lz4_shared)
return()
elseif(TARGET LZ4::lz4_static)
add_library(LZ4::lz4 ALIAS LZ4::lz4_static)
return()
endif()
endif()

# Manual search
set(PAIMON_LIBRARY_PATH_SUFFIXES
lib
lib64
lib/${CMAKE_LIBRARY_ARCHITECTURE})
set(PAIMON_INCLUDE_PATH_SUFFIXES include)

if(MSVC_TOOLCHAIN AND NOT DEFINED LZ4_MSVC_LIB_PREFIX)
set(LZ4_MSVC_LIB_PREFIX "lib")
endif()
set(LZ4_LIB_NAME_BASE "${LZ4_MSVC_LIB_PREFIX}lz4")

if(PAIMON_LZ4_USE_SHARED)
set(LZ4_LIB_NAMES)
if(CMAKE_IMPORT_LIBRARY_SUFFIX)
list(APPEND LZ4_LIB_NAMES
"${CMAKE_IMPORT_LIBRARY_PREFIX}${LZ4_LIB_NAME_BASE}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
endif()
list(APPEND LZ4_LIB_NAMES
"${CMAKE_SHARED_LIBRARY_PREFIX}${LZ4_LIB_NAME_BASE}${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
if(MSVC AND NOT DEFINED LZ4_MSVC_STATIC_LIB_SUFFIX)
set(LZ4_MSVC_STATIC_LIB_SUFFIX "_static")
endif()
set(LZ4_STATIC_LIB_SUFFIX "${LZ4_MSVC_STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(LZ4_LIB_NAMES
"${CMAKE_STATIC_LIBRARY_PREFIX}${LZ4_LIB_NAME_BASE}${LZ4_STATIC_LIB_SUFFIX}")
endif()

if(lz4_ROOT)
find_library(LZ4_LIB
NAMES ${LZ4_LIB_NAMES}
PATHS ${lz4_ROOT}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES}
NO_DEFAULT_PATH)
find_path(LZ4_INCLUDE_DIR
NAMES lz4.h
PATHS ${lz4_ROOT}
NO_DEFAULT_PATH
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
else()
# Try pkg-config first
find_package(PkgConfig QUIET)
pkg_check_modules(LZ4_PC liblz4 QUIET)
if(LZ4_PC_FOUND)
set(LZ4_INCLUDE_DIR "${LZ4_PC_INCLUDEDIR}")
list(APPEND LZ4_PC_LIBRARY_DIRS "${LZ4_PC_LIBDIR}")
find_library(LZ4_LIB
NAMES ${LZ4_LIB_NAMES}
PATHS ${LZ4_PC_LIBRARY_DIRS}
NO_DEFAULT_PATH
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES})
else()
find_library(LZ4_LIB NAMES ${LZ4_LIB_NAMES}
PATH_SUFFIXES ${PAIMON_LIBRARY_PATH_SUFFIXES})
find_path(LZ4_INCLUDE_DIR
NAMES lz4.h
PATH_SUFFIXES ${PAIMON_INCLUDE_PATH_SUFFIXES})
endif()
endif()

find_package_handle_standard_args(lz4Alt REQUIRED_VARS LZ4_LIB LZ4_INCLUDE_DIR)

if(lz4Alt_FOUND)
if(NOT TARGET LZ4::lz4)
add_library(LZ4::lz4 UNKNOWN IMPORTED)
set_target_properties(LZ4::lz4
PROPERTIES IMPORTED_LOCATION "${LZ4_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${LZ4_INCLUDE_DIR}")
endif()
endif()
Loading
Loading