Skip to content

Commit 963b02b

Browse files
authored
Rework deserializing (#15)
1 parent 72d0c8a commit 963b02b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+2234
-699
lines changed

CMakeLists.txt

Lines changed: 70 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.28)
22

3-
project(sparrow-ipc CXX)
3+
project(sparrow-ipc LANGUAGES CXX)
44

55
set(CMAKE_CXX_STANDARD 20 CACHE STRING "C++ Standard")
66
set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "C++ Standard Required")
@@ -15,6 +15,9 @@ include(external_dependencies)
1515

1616
set(SPARROW_IPC_COMPILE_DEFINITIONS "" CACHE STRING "List of public compile definitions of the sparrow-ipc target")
1717

18+
set(SPARROW_IPC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
19+
set(SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
20+
1821
# Linter options
1922
# =============
2023
OPTION(ACTIVATE_LINTER "Create targets to run clang-format" OFF)
@@ -26,6 +29,38 @@ if(ACTIVATE_LINTER)
2629
include(clang-tidy)
2730
endif()
2831

32+
# Versionning
33+
# ===========
34+
file(STRINGS "${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/config/sparrow_ipc_version.hpp" sparrow_ipc_version_defines
35+
REGEX "constexpr int SPARROW_IPC_VERSION_(MAJOR|MINOR|PATCH)")
36+
37+
foreach(ver ${sparrow_ipc_version_defines})
38+
if(ver MATCHES "constexpr int SPARROW_VERSION_(MAJOR|MINOR|PATCH) = ([0-9]+);$")
39+
set(PROJECT_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "")
40+
endif()
41+
endforeach()
42+
43+
set(CMAKE_PROJECT_VERSION
44+
${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
45+
46+
message(STATUS "Building sparrow_ipc v${CMAKE_PROJECT_VERSION}")
47+
48+
# Binary version
49+
# See the following URL for explanations about the binary versionning
50+
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
51+
file(STRINGS "${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/config/sparrow_ipc_version.hpp" sparrow_ipc_version_defines
52+
REGEX "constexpr int SPARROW_IPC_BINARY_(CURRENT|REVISION|AGE)")
53+
54+
foreach(ver ${sparrow_ipc_version_defines})
55+
if(ver MATCHES "constexpr int SPARROW_IPC_BINARY_(CURRENT|REVISION|AGE) = ([0-9]+);$")
56+
set(SPARROW_IPC_BINARY_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "")
57+
endif()
58+
endforeach()
59+
60+
set(SPARROW_IPC_BINARY_VERSION
61+
${SPARROW_IPC_BINARY_CURRENT}.${SPARROW_IPC_BINARY_REVISION}.${SPARROW_IPC_BINARY_AGE})
62+
63+
message(STATUS "sparrow_ipc binary version: v${SPARROW_IPC_BINARY_VERSION}")
2964

3065
# Build options
3166
# =============
@@ -60,16 +95,33 @@ set(SPARROW_IPC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
6095
set(SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
6196

6297
set(SPARROW_IPC_HEADERS
63-
${SPARROW_IPC_INCLUDE_DIR}/config/config.hpp
64-
${SPARROW_IPC_INCLUDE_DIR}/serialize.hpp
65-
${SPARROW_IPC_INCLUDE_DIR}/serialize_primitive_array.hpp
66-
${SPARROW_IPC_INCLUDE_DIR}/serialize_null_array.hpp
67-
${SPARROW_IPC_INCLUDE_DIR}/utils.hpp
98+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/arrow_interface/arrow_array_schema_common_release.hpp
99+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/arrow_interface/arrow_array.hpp
100+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/arrow_interface/arrow_array/private_data.hpp
101+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/arrow_interface/arrow_schema.hpp
102+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/arrow_interface/arrow_schema/private_data.hpp
103+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/config/config.hpp
104+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/deserialize_variable_size_binary_array.hpp
105+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/deserialize_fixedsizebinary_array.hpp
106+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/deserialize_primitive_array.hpp
107+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/deserialize_utils.hpp
108+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/deserialize.hpp
109+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/encapsulated_message.hpp
110+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/magic_values.hpp
111+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/metadata.hpp
112+
${SPARROW_IPC_INCLUDE_DIR}/sparrow_ipc/utils.hpp
68113
)
69114

70115
set(SPARROW_IPC_SRC
71-
${SPARROW_IPC_SOURCE_DIR}/serialize.cpp
72-
${SPARROW_IPC_SOURCE_DIR}/serialize_null_array.cpp
116+
${SPARROW_IPC_SOURCE_DIR}/arrow_interface/arrow_array.cpp
117+
${SPARROW_IPC_SOURCE_DIR}/arrow_interface/arrow_array/private_data.cpp
118+
${SPARROW_IPC_SOURCE_DIR}/arrow_interface/arrow_schema.cpp
119+
${SPARROW_IPC_SOURCE_DIR}/arrow_interface/arrow_schema/private_data.cpp
120+
${SPARROW_IPC_SOURCE_DIR}/deserialize_fixedsizebinary_array.cpp
121+
${SPARROW_IPC_SOURCE_DIR}/deserialize_utils.cpp
122+
${SPARROW_IPC_SOURCE_DIR}/deserialize.cpp
123+
${SPARROW_IPC_SOURCE_DIR}/encapsulated_message.cpp
124+
${SPARROW_IPC_SOURCE_DIR}/metadata.cpp
73125
${SPARROW_IPC_SOURCE_DIR}/utils.cpp
74126
)
75127

@@ -126,11 +178,14 @@ add_custom_command(
126178

127179
add_custom_target(generate_flatbuffers_headers
128180
DEPENDS ${FLATBUFFERS_GENERATED_HEADERS}
181+
COMMENT "Ensuring FlatBuffers headers are generated"
129182
)
130183

131184
# Interface target for generated headers
132185
add_library(flatbuffers_interface INTERFACE)
133-
target_include_directories(flatbuffers_interface INTERFACE ${FLATBUFFERS_GENERATED_DIR})
186+
target_include_directories(flatbuffers_interface INTERFACE
187+
$<BUILD_INTERFACE:${FLATBUFFERS_GENERATED_DIR}>
188+
$<INSTALL_INTERFACE:include/flatbuffers_generated>)
134189
add_dependencies(flatbuffers_interface generate_flatbuffers_headers)
135190

136191
add_library(sparrow-ipc ${SPARROW_IPC_LIBRARY_TYPE} ${SPARROW_IPC_SRC} ${SPARROW_IPC_HEADERS})
@@ -150,19 +205,20 @@ else()
150205
target_compile_definitions(sparrow-ipc PRIVATE SPARROW_IPC_EXPORTS)
151206
endif()
152207

153-
target_include_directories(sparrow-ipc
208+
target_include_directories(sparrow-ipc
154209
PUBLIC
155-
${SPARROW_IPC_INCLUDE_DIR}
210+
$<BUILD_INTERFACE:${SPARROW_IPC_INCLUDE_DIR}>
211+
$<INSTALL_INTERFACE:include>
156212
PRIVATE
157-
${SPARROW_IPC_SOURCE_DIR} )
213+
$<BUILD_INTERFACE:${FLATBUFFERS_GENERATED_DIR}>)
158214

159215
target_link_libraries(sparrow-ipc
160216
PUBLIC
161217
sparrow::sparrow
162218
flatbuffers::flatbuffers
163-
PRIVATE
164-
flatbuffers_interface)
219+
)
165220

221+
# Ensure generated headers are available when building sparrow-ipc
166222
add_dependencies(sparrow-ipc generate_flatbuffers_headers)
167223

168224
# Tests

cmake/external_dependencies.cmake

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,24 @@ function(find_package_or_fetch)
4646
endfunction()
4747

4848
set(SPARROW_BUILD_SHARED ${SPARROW_IPC_BUILD_SHARED})
49+
if(${SPARROW_IPC_BUILD_TESTS})
50+
set(CREATE_JSON_READER_TARGET ON)
51+
endif()
4952
find_package_or_fetch(
5053
PACKAGE_NAME sparrow
5154
GIT_REPOSITORY https://github.com/man-group/sparrow.git
52-
TAG 1.1.0
55+
TAG 1.1.1
5356
)
57+
unset(CREATE_JSON_READER_TARGET)
5458

5559
if(NOT TARGET sparrow::sparrow)
5660
add_library(sparrow::sparrow ALIAS sparrow)
5761
endif()
62+
if(${SPARROW_IPC_BUILD_TESTS})
63+
if(NOT TARGET sparrow::json_reader)
64+
add_library(sparrow::json_reader ALIAS json_reader)
65+
endif()
66+
endif()
5867

5968
set(FLATBUFFERS_BUILD_TESTS OFF)
6069
set(FLATBUFFERS_BUILD_SHAREDLIB ${SPARROW_IPC_BUILD_SHARED})
@@ -76,4 +85,48 @@ if(SPARROW_IPC_BUILD_TESTS)
7685
GIT_REPOSITORY https://github.com/doctest/doctest.git
7786
TAG v2.4.12
7887
)
88+
89+
message(STATUS "📦 Fetching arrow-testing")
90+
cmake_policy(PUSH)
91+
cmake_policy(SET CMP0174 NEW) # Suppress warning about FetchContent_Declare GIT_REPOSITORY
92+
# Fetch arrow-testing data (no CMake build needed)
93+
FetchContent_Declare(
94+
arrow-testing
95+
GIT_REPOSITORY https://github.com/apache/arrow-testing.git
96+
GIT_SHALLOW TRUE
97+
# CONFIGURE_COMMAND ""
98+
# BUILD_COMMAND ""
99+
# INSTALL_COMMAND ""
100+
)
101+
FetchContent_MakeAvailable(arrow-testing)
102+
cmake_policy(POP)
103+
104+
# Create interface library for easy access to test data
105+
add_library(arrow-testing-data INTERFACE)
106+
message(STATUS "Arrow testing data directory: ${arrow-testing_SOURCE_DIR}")
107+
target_compile_definitions(arrow-testing-data INTERFACE
108+
ARROW_TESTING_DATA_DIR="${arrow-testing_SOURCE_DIR}"
109+
)
110+
message(STATUS "\t✅ Fetched arrow-testing")
111+
112+
# Iterate over all the files in the arrow-testing-data source directiory. When it's a gz, extract in place.
113+
file(GLOB_RECURSE arrow_testing_data_targz_files CONFIGURE_DEPENDS
114+
"${arrow-testing_SOURCE_DIR}/data/arrow-ipc-stream/integration/1.0.0-littleendian/*.json.gz"
115+
)
116+
foreach(file_path IN LISTS arrow_testing_data_targz_files)
117+
cmake_path(GET file_path PARENT_PATH parent_dir)
118+
cmake_path(GET file_path STEM filename)
119+
set(destination_file_path "${parent_dir}/${filename}.json")
120+
if(EXISTS "${destination_file_path}")
121+
message(VERBOSE "File already extracted: ${destination_file_path}")
122+
else()
123+
message(STATUS "Extracting ${file_path}")
124+
if(WIN32)
125+
execute_process(COMMAND powershell -Command "$i=\"${file_path}\"; $o=\"${destination_file_path}\"; [IO.Compression.GZipStream]::new([IO.File]::OpenRead($i),[IO.Compression.CompressionMode]::Decompress).CopyTo([IO.File]::Create($o))")
126+
else()
127+
execute_process(COMMAND gunzip -kf "${file_path}")
128+
endif()
129+
endif()
130+
endforeach()
131+
79132
endif()

cmake/sparrow-ipcConfig.cmake.in

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# sparrow-ipc cmake module
2+
# This module sets the following variables in your project::
3+
#
4+
# sparrow-ipc_FOUND - true if sparrow-ipc found on the system
5+
# sparrow-ipc_INCLUDE_DIRS - the directory containing sparrow-ipc headers
6+
# sparrow-ipc_LIBRARY - empty
7+
8+
@PACKAGE_INIT@
9+
10+
include(CMakeFindDependencyMacro)
11+
12+
if("@USE_DATE_POLYFILL@")
13+
find_dependency(date)
14+
endif()
15+
16+
if("@CREATE_JSON_READER_TARGET@")
17+
find_dependency(nlohmann_json)
18+
endif()
19+
20+
find_dependency(sparrow)
21+
find_dependency(FlatBuffers)
22+
23+
if(NOT TARGET sparrow-ipc::sparrow-ipc)
24+
include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
25+
get_target_property(@PROJECT_NAME@_INCLUDE_DIRS sparrow-ipc::sparrow-ipc INTERFACE_INCLUDE_DIRECTORIES)
26+
get_target_property(@PROJECT_NAME@_LIBRARY sparrow-ipc::sparrow-ipc LOCATION)
27+
endif()

environment-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ dependencies:
88
- cxx-compiler
99
# Libraries dependencies
1010
- flatbuffers
11-
- sparrow >=1.1.0
11+
- sparrow-devel >=1.1.2
1212
- doctest
1313
# Documentation dependencies
1414
- doxygen

include/serialize.hpp

Lines changed: 0 additions & 25 deletions
This file was deleted.

include/serialize_null_array.hpp

Lines changed: 0 additions & 11 deletions
This file was deleted.

include/serialize_primitive_array.hpp

Lines changed: 0 additions & 91 deletions
This file was deleted.

0 commit comments

Comments
 (0)