blob: 5af4fdae52bf6635bebd499287a10a64726cae7b [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(ICEBERG_INCLUDES "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>"
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>")
set(ICEBERG_SOURCES
arrow_c_data_guard_internal.cc
arrow_c_data_util.cc
arrow_row_builder.cc
catalog/catalog_util.cc
catalog/memory/in_memory_catalog.cc
catalog/session_catalog.cc
catalog/session_context.cc
data_table_scan.cc
delete_file_index.cc
deletes/dv_util.cc
deletes/dv_writer.cc
deletes/position_delete_index.cc
deletes/position_delete_range_consumer.cc
deletes/roaring_position_bitmap.cc
encryption/standard_key_metadata.cc
expression/aggregate.cc
expression/binder.cc
expression/evaluator.cc
expression/expression.cc
expression/expressions.cc
expression/inclusive_metrics_evaluator.cc
expression/json_serde.cc
expression/literal.cc
expression/manifest_evaluator.cc
expression/predicate.cc
expression/projections.cc
expression/residual_evaluator.cc
expression/rewrite_not.cc
expression/sanitize_expression.cc
expression/strict_metrics_evaluator.cc
expression/term.cc
file_io.cc
file_io_registry.cc
file_reader.cc
file_writer.cc
geospatial.cc
incremental_append_scan.cc
incremental_changelog_scan.cc
inspect/history_table.cc
inspect/metadata_table.cc
inspect/snapshots_table.cc
inheritable_metadata.cc
json_serde.cc
location_provider.cc
logging/cerr_logger.cc
logging/logger.cc
logging/loggers.cc
logging/spdlog_logger.cc
manifest/manifest_adapter.cc
manifest/manifest_entry.cc
manifest/manifest_filter_manager.cc
manifest/manifest_group.cc
manifest/manifest_list.cc
manifest/manifest_merge_manager.cc
manifest/manifest_reader.cc
manifest/manifest_util.cc
manifest/manifest_writer.cc
manifest/rolling_manifest_writer.cc
manifest/v1_metadata.cc
manifest/v2_metadata.cc
manifest/v3_metadata.cc
metadata_columns.cc
metrics_config.cc
metrics/commit_report.cc
metrics/counter.cc
metrics/json_serde.cc
metrics/metrics_context.cc
metrics/metrics_reporters.cc
metrics/scan_report.cc
metrics/timer.cc
name_mapping.cc
partition_field.cc
partition_spec.cc
partition_summary.cc
puffin/file_metadata.cc
puffin/json_serde.cc
puffin/puffin_format.cc
puffin/puffin_reader.cc
puffin/puffin_writer.cc
resolving_file_io.cc
row/arrow_array_wrapper.cc
row/manifest_wrapper.cc
row/partition_values.cc
row/struct_like.cc
schema.cc
schema_field.cc
schema_internal.cc
schema_util.cc
snapshot.cc
sort_field.cc
sort_order.cc
statistics_file.cc
table.cc
table_identifier.cc
table_metadata.cc
table_properties.cc
table_requirement.cc
table_requirements.cc
table_scan.cc
table_update.cc
transaction.cc
transform.cc
transform_function.cc
type.cc
update/cherry_pick_operation.cc
update/delete_files.cc
update/expire_snapshots.cc
update/fast_append.cc
update/merge_append.cc
update/replace_partitions.cc
update/merging_snapshot_update.cc
update/overwrite_files.cc
update/pending_update.cc
update/rewrite_files.cc
update/row_delta.cc
update/set_snapshot.cc
update/snapshot_manager.cc
update/snapshot_update.cc
update/update_location.cc
update/update_partition_spec.cc
update/update_partition_statistics.cc
update/update_properties.cc
update/update_schema.cc
update/update_snapshot_reference.cc
update/update_sort_order.cc
update/update_statistics.cc
util/base64.cc
util/bucket_util.cc
util/content_file_util.cc
util/conversions.cc
util/decimal.cc
util/gzip_internal.cc
util/location_util.cc
util/murmurhash3_internal.cc
util/property_util.cc
util/retry_util.cc
util/scheduled_executor.cc
util/snapshot_util.cc
util/string_util.cc
util/struct_like_set.cc
util/task_group.cc
util/temporal_util.cc
util/thread_util.cc
util/timepoint.cc
util/transform_util.cc
util/truncate_util.cc
util/type_util.cc
util/url_encoder.cc
util/uuid.cc)
set(ICEBERG_STATIC_BUILD_INTERFACE_LIBS)
set(ICEBERG_SHARED_BUILD_INTERFACE_LIBS)
set(ICEBERG_STATIC_INSTALL_INTERFACE_LIBS)
set(ICEBERG_SHARED_INSTALL_INTERFACE_LIBS)
list(APPEND
ICEBERG_STATIC_BUILD_INTERFACE_LIBS
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,nanoarrow::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_static>,nanoarrow::nanoarrow_static,nanoarrow::nanoarrow_shared>>"
nlohmann_json::nlohmann_json
utf8proc::utf8proc
ZLIB::ZLIB
roaring::roaring)
list(APPEND
ICEBERG_SHARED_BUILD_INTERFACE_LIBS
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,nanoarrow::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_shared>,nanoarrow::nanoarrow_shared,nanoarrow::nanoarrow_static>>"
nlohmann_json::nlohmann_json
utf8proc::utf8proc
ZLIB::ZLIB
roaring::roaring)
list(APPEND
ICEBERG_STATIC_INSTALL_INTERFACE_LIBS
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_static>,nanoarrow::nanoarrow_static,nanoarrow::nanoarrow_shared>>"
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
"$<IF:$<BOOL:${UTF8PROC_VENDORED}>,iceberg::utf8proc,utf8proc::utf8proc>"
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
list(APPEND
ICEBERG_SHARED_INSTALL_INTERFACE_LIBS
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_shared>,nanoarrow::nanoarrow_shared,nanoarrow::nanoarrow_static>>"
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
"$<IF:$<BOOL:${UTF8PROC_VENDORED}>,iceberg::utf8proc,utf8proc::utf8proc>"
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
if(ICEBERG_SPDLOG)
set(ICEBERG_HAS_SPDLOG ON)
list(APPEND ICEBERG_STATIC_BUILD_INTERFACE_LIBS spdlog::spdlog)
list(APPEND ICEBERG_SHARED_BUILD_INTERFACE_LIBS spdlog::spdlog)
list(APPEND ICEBERG_STATIC_INSTALL_INTERFACE_LIBS
"$<IF:$<BOOL:${SPDLOG_VENDORED}>,iceberg::spdlog,spdlog::spdlog>")
list(APPEND ICEBERG_SHARED_INSTALL_INTERFACE_LIBS
"$<IF:$<BOOL:${SPDLOG_VENDORED}>,iceberg::spdlog,spdlog::spdlog>")
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/logging/config.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/logging/config.h")
add_iceberg_lib(iceberg
SOURCES
${ICEBERG_SOURCES}
EXTRA_INCLUDES
${ICEBERG_INCLUDES}
SHARED_LINK_LIBS
${ICEBERG_SHARED_BUILD_INTERFACE_LIBS}
STATIC_LINK_LIBS
${ICEBERG_STATIC_BUILD_INTERFACE_LIBS}
STATIC_INSTALL_INTERFACE_LIBS
${ICEBERG_STATIC_INSTALL_INTERFACE_LIBS}
SHARED_INSTALL_INTERFACE_LIBS
${ICEBERG_SHARED_INSTALL_INTERFACE_LIBS}
OUTPUTS
ICEBERG_LIBRARIES)
# The logging macros in the installed public header log_macros.h use __VA_OPT__,
# which MSVC's traditional preprocessor rejects. Require the conforming
# preprocessor PUBLICly so downstream consumers that include log_macros.h get it
# on MSVC (and any library TU that includes it does too).
if(MSVC_TOOLCHAIN)
foreach(_iceberg_lib iceberg_shared iceberg_static)
if(TARGET ${_iceberg_lib})
target_compile_options(${_iceberg_lib} PUBLIC /Zc:preprocessor)
endif()
endforeach()
endif()
set(ICEBERG_DATA_SOURCES
data/data_writer.cc
data/delete_filter.cc
data/delete_loader.cc
data/equality_delete_writer.cc
data/file_scan_task_reader.cc
data/position_delete_writer.cc
data/writer.cc)
set(ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS)
set(ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS)
set(ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS)
set(ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS)
list(APPEND ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg_static>,iceberg_static,iceberg_shared>")
list(APPEND ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>")
list(APPEND
ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_static>,iceberg::iceberg_static,iceberg::iceberg_shared>"
)
list(APPEND
ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_shared>,iceberg::iceberg_shared,iceberg::iceberg_static>"
)
add_iceberg_lib(iceberg_data
SOURCES
${ICEBERG_DATA_SOURCES}
EXTRA_INCLUDES
${ICEBERG_INCLUDES}
SHARED_LINK_LIBS
${ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS}
STATIC_LINK_LIBS
${ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS}
STATIC_INSTALL_INTERFACE_LIBS
${ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS}
SHARED_INSTALL_INTERFACE_LIBS
${ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS})
iceberg_install_all_headers(iceberg)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/version.h"
DESTINATION "${ICEBERG_INSTALL_INCLUDEDIR}/iceberg")
add_subdirectory(catalog)
add_subdirectory(compat)
add_subdirectory(data)
add_subdirectory(deletes)
add_subdirectory(encryption)
add_subdirectory(expression)
add_subdirectory(manifest)
add_subdirectory(puffin)
add_subdirectory(row)
add_subdirectory(update)
add_subdirectory(util)
add_subdirectory(inspect)
add_subdirectory(metrics)
add_subdirectory(logging)
if(ICEBERG_BUILD_BUNDLE)
set(ICEBERG_BUNDLE_SOURCES
arrow/arrow_c_data_util.cc
arrow/arrow_io.cc
arrow/s3/arrow_s3_file_io.cc
arrow/arrow_register.cc
arrow/literal_util.cc
arrow/metadata_column_util.cc
avro/avro_data_util.cc
avro/avro_direct_decoder.cc
avro/avro_direct_encoder.cc
avro/avro_metrics.cc
avro/avro_reader.cc
avro/avro_writer.cc
avro/avro_register.cc
avro/avro_schema_util.cc
avro/avro_stream_internal.cc
parquet/parquet_data_util.cc
parquet/parquet_metrics.cc
parquet/parquet_reader.cc
parquet/parquet_register.cc
parquet/parquet_schema_util.cc
parquet/parquet_writer.cc
parquet/row_number_reader.cc)
if(ICEBERG_ENCRYPTION)
list(APPEND ICEBERG_BUNDLE_SOURCES encryption/aes_gcm.cc encryption/aes_gcm_stream.cc)
endif()
# Libraries to link with exported libiceberg_bundle.{so,a}.
set(ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS)
set(ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS)
set(ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS)
set(ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS)
list(APPEND
ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg_data_static>,iceberg_data_static,iceberg_data_shared>"
"$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>"
"$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>"
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>"
)
list(APPEND
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg_data_shared>,iceberg_data_shared,iceberg_data_static>"
"$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>"
"$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>"
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>"
)
list(APPEND
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_data_static>,iceberg::iceberg_data_static,iceberg::iceberg_data_shared>"
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>>"
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>>"
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>>"
)
list(APPEND
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_data_shared>,iceberg::iceberg_data_shared,iceberg::iceberg_data_static>"
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>>"
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>>"
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>>"
)
if(ICEBERG_ENCRYPTION)
foreach(libs
ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS)
list(APPEND ${libs} OpenSSL::Crypto)
endforeach()
endif()
# The S3 FileIO signs with its own AWS credentials provider.
if(ICEBERG_S3)
list(APPEND ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS aws-cpp-sdk-core)
list(APPEND ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS aws-cpp-sdk-core)
if(NOT ICEBERG_AWSSDK_BUNDLED)
list(APPEND ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS aws-cpp-sdk-core)
list(APPEND ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS aws-cpp-sdk-core)
endif()
endif()
add_iceberg_lib(iceberg_bundle
SOURCES
${ICEBERG_BUNDLE_SOURCES}
SHARED_LINK_LIBS
${ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS}
STATIC_LINK_LIBS
${ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS}
STATIC_INSTALL_INTERFACE_LIBS
${ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS}
SHARED_INSTALL_INTERFACE_LIBS
${ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS}
OUTPUTS
ICEBERG_BUNDLE_LIBRARIES)
foreach(target iceberg_bundle_static iceberg_bundle_shared)
if(TARGET ${target})
if(ICEBERG_S3)
target_compile_definitions(${target}
PUBLIC "$<BUILD_INTERFACE:ICEBERG_S3_ENABLED=1>")
else()
target_compile_definitions(${target}
PUBLIC "$<BUILD_INTERFACE:ICEBERG_S3_ENABLED=0>")
endif()
endif()
endforeach()
add_subdirectory(arrow)
add_subdirectory(avro)
add_subdirectory(parquet)
endif()
iceberg_install_cmake_package(iceberg iceberg_targets)
# When linking a system Thrift, downstream find_package(Iceberg) calls
# find_dependency(ThriftAlt); ship FindThriftAlt.cmake next to the package config
# (the dir iceberg-config.cmake adds to CMAKE_MODULE_PATH) so that lookup resolves.
if(ICEBERG_BUILD_HIVE AND NOT ICEBERG_THRIFT_BUNDLED)
install(FILES "${PROJECT_SOURCE_DIR}/cmake_modules/FindThriftAlt.cmake"
DESTINATION "${ICEBERG_INSTALL_CMAKEDIR}/iceberg")
endif()
if(ICEBERG_BUILD_TESTS)
add_subdirectory(test)
endif()
if(ICEBERG_BUILD_BENCHMARKS)
add_subdirectory(benchmark)
endif()