Skip to content

Commit 41e9e71

Browse files
authored
feat: Meson build system for nanoarrow-ipc extension (#483)
1 parent e92c364 commit 41e9e71

16 files changed

+220
-14
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ __pycache__
3131
# meson subprojects - wrap files need to be kept to let meson download
3232
# dependencies as needed, but dependencies themselves should not be versioned
3333
subprojects/*
34+
!subprojects/packagefiles
3435
!subprojects/*.wrap
3536

3637
compile_commands.json

ci/scripts/build-with-meson.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ function main() {
6868
show_header "Run test suite"
6969
meson configure -Dtests=true -Db_coverage=true
7070
meson compile
71-
meson test --wrap valgrind
71+
meson test --wrap='valgrind --track-origins=yes --leak-check=full' --print-errorlogs
7272

7373
show_header "Run benchmarks"
7474
meson configure -Dbenchmarks=true
7575
meson compile
76-
meson test --benchmark
76+
meson test --benchmark --print-errorlogs
7777

7878
show_header "Generate coverage reports"
7979
ninja coverage

dev/release/rat_exclude_files.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,3 @@ dist/flatcc.c
1515
src/nanoarrow/nanoarrow_ipc_flatcc_generated.h
1616
thirdparty/*
1717
python/src/nanoarrow/dlpack_abi.h
18-
subprojects/google-benchmark.wrap
19-
subprojects/gtest.wrap
20-
subprojects/nlohmann_json.wrap

meson.build

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,14 @@ subdir('src/nanoarrow')
3434
if get_option('benchmarks')
3535
subdir('dev/benchmarks')
3636
endif
37+
38+
39+
if get_option('apps')
40+
if get_option('ipc')
41+
executable(
42+
'dump_stream',
43+
'src/apps/dump_stream.c',
44+
dependencies: [nanoarrow_dep, nanoarrow_ipc_dep]
45+
)
46+
endif
47+
endif

meson.options

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
option('tests', type: 'boolean', description: 'Build tests', value: false)
1919
option('benchmarks', type: 'boolean', description: 'Build benchmarks', value: false)
20+
option('apps', type: 'boolean', description: 'Build utility applications', value: false)
21+
option('ipc', type: 'boolean', description: 'Build IPC libraries', value: false)
2022
option('integration_tests', type: 'boolean',
2123
description: 'Build cross-implementation Arrow integration tests',
2224
value: false)

src/apps/dump_stream.c

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

2424
void dump_schema_to_stdout(struct ArrowSchema* schema, int level, char* buf,
2525
int buf_size) {
26-
int n_chars = ArrowSchemaToString(schema, buf, buf_size, 0);
26+
ArrowSchemaToString(schema, buf, buf_size, 0);
2727

2828
for (int i = 0; i < level; i++) {
2929
fprintf(stdout, " ");

src/nanoarrow/meson.build

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ incdir = include_directories('..')
6464
nanoarrow_dep = declare_dependency(include_directories: [curdir, incdir],
6565
link_with: nanoarrow_lib)
6666

67+
if get_option('ipc')
68+
cmake = import('cmake')
69+
cmake_opts = cmake.subproject_options()
70+
cmake_opts.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': true})
71+
flatcc_subproj = cmake.subproject('flatcc', options: cmake_opts)
72+
flatcc_dep = flatcc_subproj.dependency('flatccrt')
73+
74+
nanoarrow_ipc_lib = build_target(
75+
'nanoarrow_ipc',
76+
'nanoarrow_ipc_decoder.c',
77+
'nanoarrow_ipc_reader.c',
78+
dependencies: [nanoarrow_dep, flatcc_dep],
79+
install: true,
80+
target_type: libtype,
81+
)
82+
nanoarrow_ipc_dep = declare_dependency(include_directories: [incdir],
83+
link_with: nanoarrow_ipc_lib,
84+
dependencies: [nanoarrow_dep, flatcc_dep])
85+
endif
86+
6787
if get_option('tests') or get_option('integration_tests')
6888
nlohmann_json_dep = dependency('nlohmann_json')
6989

@@ -147,4 +167,36 @@ if get_option('tests')
147167
include_directories: incdir)
148168
test('c_data_integration test', c_data_integration_test)
149169

170+
if get_option('ipc')
171+
zlib_dep = dependency('zlib')
172+
ipc_test_files = {
173+
'nanoarrow-ipc-decoder': {
174+
'deps': [nanoarrow_ipc_dep, arrow_dep, gtest_dep],
175+
},
176+
'nanoarrow-ipc-reader': {
177+
'deps': [nanoarrow_ipc_dep, arrow_dep, gtest_dep],
178+
},
179+
'nanoarrow-ipc-files': {
180+
'deps': [
181+
nanoarrow_ipc_dep,
182+
zlib_dep,
183+
arrow_dep,
184+
gtest_dep,
185+
nlohmann_json_dep
186+
],
187+
},
188+
'nanoarrow-ipc-hpp': {
189+
'deps': [nanoarrow_ipc_dep, gtest_dep],
190+
},
191+
}
192+
193+
foreach name, config : ipc_test_files
194+
exc = executable(
195+
name + '-test',
196+
name.replace('-', '_') + '_test.cc',
197+
dependencies: config['deps']
198+
)
199+
test(name, exc)
200+
endforeach
201+
endif
150202
endif

src/nanoarrow/nanoarrow.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,8 +864,8 @@ class ViewArrayStream {
864864
};
865865

866866
internal::InputRange<Next> range_;
867-
ArrowError* error_;
868867
ArrowErrorCode* code_;
868+
ArrowError* error_;
869869
ArrowError internal_error_ = {};
870870
ArrowErrorCode internal_code_;
871871
bool code_was_accessed_ = false;

src/nanoarrow/nanoarrow_ipc_decoder_test.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ struct ArrowIpcDecoderPrivate {
5454
static enum ArrowIpcEndianness ArrowIpcSystemEndianness(void) {
5555
uint32_t check = 1;
5656
char first_byte;
57-
enum ArrowIpcEndianness system_endianness;
5857
memcpy(&first_byte, &check, sizeof(char));
5958
if (first_byte) {
6059
return NANOARROW_IPC_ENDIANNESS_LITTLE;
@@ -501,8 +500,6 @@ TEST(NanoarrowIpcTest, NanoarrowIpcDecodeSimpleRecordBatchFromShared) {
501500
data.size_bytes = sizeof(kSimpleRecordBatch);
502501

503502
ArrowIpcDecoderInit(&decoder);
504-
auto decoder_private =
505-
reinterpret_cast<struct ArrowIpcDecoderPrivate*>(decoder.private_data);
506503

507504
ASSERT_EQ(ArrowIpcDecoderSetSchema(&decoder, &schema, nullptr), NANOARROW_OK);
508505
EXPECT_EQ(ArrowIpcDecoderDecodeHeader(&decoder, data, &error), NANOARROW_OK);
@@ -602,8 +599,10 @@ TEST(NanoarrowIpcTest, NanoarrowIpcSharedBufferThreadSafeDecode) {
602599
std::thread threads[10];
603600
for (int i = 0; i < 10; i++) {
604601
threads[i] = std::thread([&arrays, i, &one_two_three_le] {
605-
memcmp(arrays[i].children[0]->buffers[1], one_two_three_le,
606-
sizeof(one_two_three_le));
602+
auto result = memcmp(arrays[i].children[0]->buffers[1], one_two_three_le,
603+
sizeof(one_two_three_le));
604+
// discard result to silence -Wunused-value
605+
NANOARROW_UNUSED(result);
607606
ArrowArrayRelease(arrays + i);
608607
});
609608
}
@@ -791,7 +790,7 @@ TEST_P(ArrowTypeIdParameterizedTestFixture, NanoarrowIpcDecodeSwapEndian) {
791790
// Make a data buffer long enough for 10 Decimal256s with a pattern
792791
// where an endian swap isn't silently the same value (e.g., 0s)
793792
uint8_t data_buffer[32 * 10];
794-
for (int64_t i = 0; i < sizeof(data_buffer); i++) {
793+
for (size_t i = 0; i < sizeof(data_buffer); i++) {
795794
data_buffer[i] = i % 256;
796795
}
797796

src/nanoarrow/nanoarrow_testing_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ TEST(NanoarrowTestingTest, NanoarrowTestingTestFieldMetadata) {
470470
NANOARROW_RETURN_NOT_OK(ArrowSchemaSetMetadata(schema, "\0\0\0\0"));
471471
return NANOARROW_OK;
472472
},
473-
[](ArrowArray* array) { return NANOARROW_OK; }, &WriteFieldJSON,
473+
[](ArrowArray*) { return NANOARROW_OK; }, &WriteFieldJSON,
474474
R"({"name": null, "nullable": true, "type": {"name": "null"}, "children": []})",
475475
[](TestingJSONWriter& writer) { writer.set_include_metadata(false); });
476476
}

0 commit comments

Comments
 (0)