Skip to content

Commit c766bd8

Browse files
committed
feat: add iceberg_data library alongside iceberg
1 parent 194db04 commit c766bd8

8 files changed

Lines changed: 88 additions & 30 deletions

File tree

example/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ project(example)
2222

2323
set(CMAKE_CXX_STANDARD 23)
2424

25-
find_package(iceberg CONFIG REQUIRED)
25+
find_package(iceberg CONFIG REQUIRED COMPONENTS bundle rest)
2626

2727
add_executable(demo_example demo_example.cc)
2828

src/iceberg/CMakeLists.txt

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,7 @@ set(ICEBERG_INCLUDES "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>"
2020
set(ICEBERG_SOURCES
2121
arrow_c_data_guard_internal.cc
2222
catalog/memory/in_memory_catalog.cc
23-
data/data_writer.cc
24-
data/delete_loader.cc
25-
data/equality_delete_writer.cc
26-
data/position_delete_writer.cc
27-
data/writer.cc
2823
delete_file_index.cc
29-
deletes/roaring_position_bitmap.cc
30-
deletes/position_delete_index.cc
3124
expression/aggregate.cc
3225
expression/binder.cc
3326
expression/evaluator.cc
@@ -66,9 +59,6 @@ set(ICEBERG_SOURCES
6659
partition_field.cc
6760
partition_spec.cc
6861
partition_summary.cc
69-
puffin/file_metadata.cc
70-
puffin/puffin_format.cc
71-
puffin/json_serde.cc
7262
row/arrow_array_wrapper.cc
7363
row/manifest_wrapper.cc
7464
row/partition_values.cc
@@ -134,24 +124,22 @@ list(APPEND
134124
ICEBERG_STATIC_BUILD_INTERFACE_LIBS
135125
nanoarrow::nanoarrow_static
136126
nlohmann_json::nlohmann_json
137-
roaring::roaring
138127
ZLIB::ZLIB)
139128
list(APPEND
140129
ICEBERG_SHARED_BUILD_INTERFACE_LIBS
141130
nanoarrow::nanoarrow_shared
142131
nlohmann_json::nlohmann_json
143-
roaring::roaring
144132
ZLIB::ZLIB)
145133
list(APPEND
146134
ICEBERG_STATIC_INSTALL_INTERFACE_LIBS
147135
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_static,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_static>,nanoarrow::nanoarrow_static,nanoarrow::nanoarrow_shared>>"
148136
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
149-
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
137+
)
150138
list(APPEND
151139
ICEBERG_SHARED_INSTALL_INTERFACE_LIBS
152140
"$<IF:$<BOOL:${NANOARROW_VENDORED}>,iceberg::nanoarrow_shared,$<IF:$<TARGET_EXISTS:nanoarrow::nanoarrow_shared>,nanoarrow::nanoarrow_shared,nanoarrow::nanoarrow_static>>"
153141
"$<IF:$<BOOL:${NLOHMANN_JSON_VENDORED}>,iceberg::nlohmann_json,$<IF:$<TARGET_EXISTS:nlohmann_json::nlohmann_json>,nlohmann_json::nlohmann_json,nlohmann_json::nlohmann_json>>"
154-
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
142+
)
155143

156144
add_iceberg_lib(iceberg
157145
SOURCES
@@ -169,6 +157,60 @@ add_iceberg_lib(iceberg
169157
OUTPUTS
170158
ICEBERG_LIBRARIES)
171159

160+
set(ICEBERG_DATA_SOURCES
161+
data/data_writer.cc
162+
data/delete_loader.cc
163+
data/equality_delete_writer.cc
164+
data/position_delete_writer.cc
165+
data/writer.cc
166+
deletes/position_delete_index.cc
167+
deletes/roaring_position_bitmap.cc
168+
puffin/file_metadata.cc
169+
puffin/json_serde.cc
170+
puffin/puffin_format.cc)
171+
172+
set(ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS)
173+
set(ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS)
174+
set(ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS)
175+
set(ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS)
176+
177+
list(APPEND ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS
178+
"$<IF:$<TARGET_EXISTS:iceberg_static>,iceberg_static,iceberg_shared>"
179+
roaring::roaring)
180+
list(APPEND ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS
181+
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>"
182+
roaring::roaring)
183+
list(APPEND
184+
ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS
185+
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_static>,iceberg::iceberg_static,iceberg::iceberg_shared>"
186+
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
187+
list(APPEND
188+
ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS
189+
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_shared>,iceberg::iceberg_shared,iceberg::iceberg_static>"
190+
"$<IF:$<BOOL:${CROARING_VENDORED}>,iceberg::roaring,roaring::roaring>")
191+
192+
add_iceberg_lib(iceberg_data
193+
SOURCES
194+
${ICEBERG_DATA_SOURCES}
195+
EXTRA_INCLUDES
196+
${ICEBERG_INCLUDES}
197+
SHARED_LINK_LIBS
198+
${ICEBERG_DATA_SHARED_BUILD_INTERFACE_LIBS}
199+
STATIC_LINK_LIBS
200+
${ICEBERG_DATA_STATIC_BUILD_INTERFACE_LIBS}
201+
STATIC_INSTALL_INTERFACE_LIBS
202+
${ICEBERG_DATA_STATIC_INSTALL_INTERFACE_LIBS}
203+
SHARED_INSTALL_INTERFACE_LIBS
204+
${ICEBERG_DATA_SHARED_INSTALL_INTERFACE_LIBS})
205+
206+
if(TARGET iceberg_data_shared)
207+
target_compile_definitions(iceberg_data_shared PRIVATE ICEBERG_EXPORTING)
208+
endif()
209+
210+
if(TARGET iceberg_data_static)
211+
target_compile_definitions(iceberg_data_static PRIVATE ICEBERG_STATIC)
212+
endif()
213+
172214
iceberg_install_all_headers(iceberg)
173215

174216
add_subdirectory(catalog)
@@ -210,29 +252,29 @@ if(ICEBERG_BUILD_BUNDLE)
210252

211253
list(APPEND
212254
ICEBERG_BUNDLE_STATIC_BUILD_INTERFACE_LIBS
213-
"$<IF:$<TARGET_EXISTS:iceberg_static>,iceberg_static,iceberg_shared>"
255+
"$<IF:$<TARGET_EXISTS:iceberg_data_static>,iceberg_data_static,iceberg_data_shared>"
214256
"$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>"
215257
"$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>"
216258
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>"
217259
)
218260
list(APPEND
219261
ICEBERG_BUNDLE_SHARED_BUILD_INTERFACE_LIBS
220-
"$<IF:$<TARGET_EXISTS:iceberg_shared>,iceberg_shared,iceberg_static>"
262+
"$<IF:$<TARGET_EXISTS:iceberg_data_shared>,iceberg_data_shared,iceberg_data_static>"
221263
"$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>"
222264
"$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>"
223265
"$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>"
224266
)
225267

226268
list(APPEND
227269
ICEBERG_BUNDLE_STATIC_INSTALL_INTERFACE_LIBS
228-
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_static>,iceberg::iceberg_static,iceberg::iceberg_shared>"
270+
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_data_static>,iceberg::iceberg_data_static,iceberg::iceberg_data_shared>"
229271
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_static>,Arrow::arrow_static,Arrow::arrow_shared>>"
230272
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_static>,Parquet::parquet_static,Parquet::parquet_shared>>"
231273
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_static>,avro-cpp::avrocpp_static,avro-cpp::avrocpp_shared>>"
232274
)
233275
list(APPEND
234276
ICEBERG_BUNDLE_SHARED_INSTALL_INTERFACE_LIBS
235-
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_shared>,iceberg::iceberg_shared,iceberg::iceberg_static>"
277+
"$<IF:$<TARGET_EXISTS:iceberg::iceberg_data_shared>,iceberg::iceberg_data_shared,iceberg::iceberg_data_static>"
236278
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::arrow_static,$<IF:$<TARGET_EXISTS:Arrow::arrow_shared>,Arrow::arrow_shared,Arrow::arrow_static>>"
237279
"$<IF:$<BOOL:${ARROW_VENDORED}>,iceberg::parquet_static,$<IF:$<TARGET_EXISTS:Parquet::parquet_shared>,Parquet::parquet_shared,Parquet::parquet_static>>"
238280
"$<IF:$<BOOL:${AVRO_VENDORED}>,iceberg::avrocpp_s,$<IF:$<TARGET_EXISTS:avro-cpp::avrocpp_shared>,avro-cpp::avrocpp_shared,avro-cpp::avrocpp_static>>"

src/iceberg/arrow_c_data_guard_internal.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222
#include <nanoarrow/nanoarrow.h>
2323

2424
#include "iceberg/arrow_c_data.h"
25+
#include "iceberg/iceberg_export.h"
2526

2627
namespace iceberg::internal {
2728

28-
class ArrowArrayGuard {
29+
class ICEBERG_EXPORT ArrowArrayGuard {
2930
public:
3031
explicit ArrowArrayGuard(ArrowArray* array) : array_(array) {}
3132
~ArrowArrayGuard();
@@ -34,7 +35,7 @@ class ArrowArrayGuard {
3435
ArrowArray* array_;
3536
};
3637

37-
class ArrowSchemaGuard {
38+
class ICEBERG_EXPORT ArrowSchemaGuard {
3839
public:
3940
explicit ArrowSchemaGuard(ArrowSchema* schema) : schema_(schema) {}
4041
~ArrowSchemaGuard();
@@ -43,7 +44,7 @@ class ArrowSchemaGuard {
4344
ArrowSchema* schema_;
4445
};
4546

46-
class ArrowArrayViewGuard {
47+
class ICEBERG_EXPORT ArrowArrayViewGuard {
4748
public:
4849
explicit ArrowArrayViewGuard(ArrowArrayView* view) : view_(view) {}
4950
~ArrowArrayViewGuard();
@@ -52,7 +53,7 @@ class ArrowArrayViewGuard {
5253
ArrowArrayView* view_;
5354
};
5455

55-
class ArrowArrayBufferGuard {
56+
class ICEBERG_EXPORT ArrowArrayBufferGuard {
5657
public:
5758
explicit ArrowArrayBufferGuard(ArrowBuffer* buffer) : buffer_(buffer) {}
5859
~ArrowArrayBufferGuard();

src/iceberg/file_writer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
namespace iceberg {
3838

39-
class WriterProperties : public ConfigBase<WriterProperties> {
39+
class ICEBERG_EXPORT WriterProperties : public ConfigBase<WriterProperties> {
4040
public:
4141
template <typename T>
4242
using Entry = const ConfigBase<WriterProperties>::Entry<T>;

src/iceberg/iceberg-config.cmake.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#
2525
# iceberg::iceberg_shared
2626
# iceberg::iceberg_static
27+
# iceberg::iceberg_data_shared
28+
# iceberg::iceberg_data_static
2729
# iceberg::iceberg_bundle_shared
2830
# iceberg::iceberg_bundle_static
2931
# iceberg::iceberg_rest_shared

src/iceberg/iceberg_export.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,16 @@
4646
# define ICEBERG_EXTERN_TEMPLATE_CLASS_EXPORT ICEBERG_TEMPLATE_EXPORT
4747
# endif
4848

49+
// For explicit template instantiation definitions.
50+
# define ICEBERG_TEMPLATE_INSTANTIATION_EXPORT ICEBERG_TEMPLATE_EXPORT
51+
4952
#else // Non-Windows
5053
# ifndef ICEBERG_EXPORT
5154
# define ICEBERG_EXPORT __attribute__((visibility("default")))
5255
# endif
5356

5457
# define ICEBERG_TEMPLATE_EXPORT
5558
# define ICEBERG_TEMPLATE_CLASS_EXPORT ICEBERG_EXPORT
56-
# define ICEBERG_EXTERN_TEMPLATE_CLASS_EXPORT ICEBERG_TEMPLATE_EXPORT
59+
# define ICEBERG_EXTERN_TEMPLATE_CLASS_EXPORT ICEBERG_TEMPLATE_CLASS_EXPORT
60+
# define ICEBERG_TEMPLATE_INSTANTIATION_EXPORT ICEBERG_TEMPLATE_CLASS_EXPORT
5761
#endif

src/iceberg/test/CMakeLists.txt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ set(ICEBERG_TEST_RESOURCES "${CMAKE_SOURCE_DIR}/src/iceberg/test/resources")
3131
configure_file("test_config.h.in" "test_config.h")
3232

3333
function(add_iceberg_test test_name)
34-
set(options USE_BUNDLE)
34+
set(options USE_BUNDLE USE_DATA)
3535
set(oneValueArgs)
3636
set(multiValueArgs SOURCES)
3737
cmake_parse_arguments(ARG
@@ -47,6 +47,10 @@ function(add_iceberg_test test_name)
4747

4848
if(ARG_USE_BUNDLE)
4949
target_link_libraries(${test_name} PRIVATE iceberg_bundle_static GTest::gmock_main)
50+
elseif(ARG_USE_DATA)
51+
target_link_libraries(${test_name}
52+
PRIVATE "$<IF:$<TARGET_EXISTS:iceberg_data_static>,iceberg_data_static,iceberg_data_shared>"
53+
GTest::gmock_main)
5054
else()
5155
target_link_libraries(${test_name} PRIVATE iceberg_static GTest::gmock_main)
5256
endif()
@@ -109,6 +113,7 @@ add_iceberg_test(json_serde_test
109113
schema_json_test.cc)
110114

111115
add_iceberg_test(util_test
116+
USE_DATA
112117
SOURCES
113118
bucket_util_test.cc
114119
config_test.cc
@@ -128,9 +133,13 @@ add_iceberg_test(util_test
128133
uuid_test.cc
129134
visit_type_test.cc)
130135

131-
add_iceberg_test(roaring_test SOURCES roaring_test.cc)
136+
add_iceberg_test(roaring_test USE_DATA SOURCES roaring_test.cc)
132137

133-
add_iceberg_test(puffin_test SOURCES puffin_format_test.cc puffin_json_test.cc)
138+
add_iceberg_test(puffin_test
139+
USE_DATA
140+
SOURCES
141+
puffin_format_test.cc
142+
puffin_json_test.cc)
134143

135144
if(ICEBERG_BUILD_BUNDLE)
136145
add_iceberg_test(avro_test

src/iceberg/util/struct_like_set.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ bool StructLikeSet<kValidate>::KeyEqual::operator()(
618618
return StructLikeEqualUnchecked(*lhs, rhs);
619619
}
620620

621-
template class ICEBERG_TEMPLATE_EXPORT StructLikeSet<true>;
622-
template class ICEBERG_TEMPLATE_EXPORT StructLikeSet<false>;
621+
template class ICEBERG_TEMPLATE_INSTANTIATION_EXPORT StructLikeSet<true>;
622+
template class ICEBERG_TEMPLATE_INSTANTIATION_EXPORT StructLikeSet<false>;
623623

624624
} // namespace iceberg

0 commit comments

Comments
 (0)