11cmake_minimum_required (VERSION  3.28)
22
3- project (sparrow-ipc CXX)
3+ project (sparrow-ipc LANGUAGES  CXX)
44
55set (CMAKE_CXX_STANDARD 20 CACHE  STRING  "C++ Standard" )
66set (CMAKE_CXX_STANDARD_REQUIRED ON  CACHE  BOOL  "C++ Standard Required" )
@@ -15,6 +15,9 @@ include(external_dependencies)
1515
1616set (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# ============= 
2023OPTION (ACTIVATE_LINTER "Create targets to run clang-format"  OFF )
@@ -26,6 +29,38 @@ if(ACTIVATE_LINTER)
2629    include (clang-tidy)
2730endif ()
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)
6095set (SPARROW_IPC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /src)
6196
6297set (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
70115set (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
127179add_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 
132185add_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>)
134189add_dependencies (flatbuffers_interface generate_flatbuffers_headers)
135190
136191add_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)
151206endif ()
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
159215target_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 
166222add_dependencies (sparrow-ipc generate_flatbuffers_headers)
167223
168224# Tests 
0 commit comments