Skip to content

Commit 8123ef7

Browse files
committed
static
1 parent 383be92 commit 8123ef7

File tree

5 files changed

+318
-74
lines changed

5 files changed

+318
-74
lines changed

.github/workflows/build-cpack-packages.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,23 @@ jobs:
8181
steps:
8282
- uses: actions/checkout@v4
8383

84+
- name: Install GNU make
85+
run: brew install make
86+
8487
- name: Build packages
85-
run: make build-package
88+
run: gmake build-package
8689

8790
- name: Install driver dev package
88-
run: make -C packaging/smoke-test-app install-driver-dev
91+
run: gmake -C packaging/smoke-test-app install-driver-dev
8992

9093
- name: Build smoke-test application package
91-
run: make -C packaging/smoke-test-app build-package
94+
run: gmake -C packaging/smoke-test-app build-package
9295

9396
- name: Install smoke-test application package
94-
run: make -C packaging/smoke-test-app install-app
97+
run: gmake -C packaging/smoke-test-app install-app
9598

9699
- name: Test smoke-test application
97-
run: make -C packaging/smoke-test-app test-app-package
100+
run: gmake -C packaging/smoke-test-app test-app-package
98101

99102
- name: Collect artifacts
100103
run: |

CMakeLists.txt

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ set(SCYLLA_DRIVER_COMPONENT_ARGS COMPONENT ${SCYLLA_DRIVER_COMPONENT_NAME})
6060
# These must be set before add_subdirectory() calls so install commands can use them
6161
set(SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}")
6262
set(SCYLLA_DRIVER_DEV_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}-dev")
63+
string(TOUPPER "${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}" SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER)
64+
string(TOUPPER "${SCYLLA_DRIVER_DEV_COMPONENT_NAME}" SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER)
6365

6466
if(CASS_BUILD_SHARED)
6567
set(BUILD_SHARED_LIBS ON)
@@ -279,11 +281,49 @@ endif()
279281
set(CPACK_MONOLITHIC_INSTALL ON)
280282
set(CPACK_VERBATIM_VARIABLES ON)
281283

284+
# Normalize package output names so generated artifacts share a consistent
285+
# `scylla_cpp_driver_<version>_<platform>.{deb,rpm,pkg,msi}` pattern.
282286
set(CPACK_MONOLITHIC_INSTALL OFF)
283287

288+
set(SCYLLA_DRIVER_ARTIFACT_BASE_NAME ${SCYLLA_DRIVER_COMPONENT_NAME})
289+
set(_scylla_driver_system_processor "${CMAKE_SYSTEM_PROCESSOR}")
290+
291+
set(SCYLLA_DRIVER_DEB_ARCH "${_scylla_driver_system_processor}")
292+
set(SCYLLA_DRIVER_RPM_ARCH "${_scylla_driver_system_processor}")
293+
set(SCYLLA_DRIVER_WIN_ARCH "${_scylla_driver_system_processor}")
294+
295+
if(_scylla_driver_system_processor MATCHES "^(x86_64|AMD64)$")
296+
set(SCYLLA_DRIVER_DEB_ARCH "amd64")
297+
set(SCYLLA_DRIVER_RPM_ARCH "x86_64")
298+
set(SCYLLA_DRIVER_WIN_ARCH "x64")
299+
elseif(_scylla_driver_system_processor MATCHES "^(aarch64|ARM64)$")
300+
set(SCYLLA_DRIVER_DEB_ARCH "arm64")
301+
set(SCYLLA_DRIVER_RPM_ARCH "aarch64")
302+
set(SCYLLA_DRIVER_WIN_ARCH "arm64")
303+
endif()
304+
305+
# Fall back to raw processor strings when no mapping exists.
306+
if(NOT SCYLLA_DRIVER_DEB_ARCH)
307+
set(SCYLLA_DRIVER_DEB_ARCH "${_scylla_driver_system_processor}")
308+
endif()
309+
if(NOT SCYLLA_DRIVER_RPM_ARCH)
310+
set(SCYLLA_DRIVER_RPM_ARCH "${_scylla_driver_system_processor}")
311+
endif()
312+
if(NOT SCYLLA_DRIVER_WIN_ARCH)
313+
set(SCYLLA_DRIVER_WIN_ARCH "${_scylla_driver_system_processor}")
314+
endif()
315+
316+
# Provide a default artifact name that individual generators can refine.
317+
set(CPACK_PACKAGE_FILE_NAME
318+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}")
319+
284320
# Set the list of components for CPack
285321
set(CPACK_COMPONENTS_ALL ${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME} ${SCYLLA_DRIVER_DEV_COMPONENT_NAME})
286322

323+
# Ensure CPack emits one artifact per component instead of merging them into a
324+
# single bundle.
325+
set(CPACK_COMPONENTS_GROUPING IGNORE)
326+
287327
include(CPackComponent)
288328

289329
# Runtime component: shared libraries only
@@ -303,24 +343,31 @@ if(WIN32)
303343
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ScyllaDB\\Scylla CPP Driver")
304344
# Stable GUID keeps WiX upgrades working between versions
305345
set(CPACK_WIX_UPGRADE_GUID "3E09F4F4-1C4A-4B8B-973D-0CBA64D5E78F")
346+
set(CPACK_PACKAGE_FILE_NAME
347+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_WIN_ARCH}")
306348
elseif(APPLE)
307349
configure_file(
308350
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
309351
"${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt"
310352
COPYONLY)
311353
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
312354
set(CPACK_GENERATOR "productbuild;DragNDrop")
355+
set(CPACK_DMG_COMPONENT_INSTALL ON)
313356
set(CPACK_PACKAGE_FILE_NAME
314-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-macos")
357+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_macos")
315358
set(CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rs-driver")
316359
set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "")
317360
set(CPACK_PRODUCTBUILD_COMPONENT_INSTALL ON)
318361

319362
else()
320363
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
321364
set(CPACK_GENERATOR "DEB;RPM")
322-
set(CPACK_PACKAGE_FILE_NAME
323-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
365+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_DEB_ARCH}")
366+
367+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_FILE_NAME
368+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
369+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_FILE_NAME
370+
"${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
324371

325372
# DEB package configuration
326373
set(CPACK_DEB_COMPONENT_INSTALL ON)
@@ -331,20 +378,24 @@ else()
331378
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
332379

333380
# DEB runtime package
334-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
335-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_SECTION "libs")
381+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
382+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_PACKAGE_SECTION "libs")
336383

337384
# DEB dev package
338-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-dev")
339-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_SECTION "libdevel")
340-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_DEPENDS "${_CPACK_PACKAGE_NAME} (= \${CPACK_DEBIAN_PACKAGE_VERSION})")
385+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-dev")
386+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_PACKAGE_SECTION "libdevel")
387+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_PACKAGE_DEPENDS "${_CPACK_PACKAGE_NAME} (= \${CPACK_DEBIAN_PACKAGE_VERSION})")
341388

342389
# RPM package configuration
343390
set(CPACK_RPM_COMPONENT_INSTALL ON)
344391
set(CPACK_RPM_PACKAGE_LICENSE "Apache-2.0")
345392
set(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL})
346393
set(CPACK_RPM_PACKAGE_RELEASE 1)
347394
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
395+
set(CPACK_RPM_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_RPM_ARCH}")
396+
397+
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_FILE_NAME
398+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
348399

349400
# RPM runtime package
350401
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
@@ -354,6 +405,8 @@ else()
354405
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-devel")
355406
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_GROUP "Development/Libraries")
356407
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_REQUIRES "${_CPACK_PACKAGE_NAME} = ${PROJECT_VERSION_STRING}-${CPACK_RPM_PACKAGE_RELEASE}")
408+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_FILE_NAME
409+
"${SCYLLA_DRIVER_COMPONENT_NAME}-devel_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
357410
endif()
358411

359412
include(CPack)

packaging/smoke-test-app/CMakeLists.txt

Lines changed: 102 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@ get_filename_component(CPP_DRIVER_ROOT "${CPP_DRIVER_ROOT}/.." ABSOLUTE)
1111
find_package(PkgConfig REQUIRED)
1212
pkg_check_modules(SCYLLA_CPP_DRIVER REQUIRED IMPORTED_TARGET scylla-cpp-driver)
1313

14+
option(SCYLLA_SMOKE_BUILD_STATIC
15+
"Build statically linked smoke test executable" OFF)
16+
1417
set(_pkg_config_use_static_libs_saved OFF)
1518
if(DEFINED PKG_CONFIG_USE_STATIC_LIBS)
1619
set(_pkg_config_use_static_libs_saved "${PKG_CONFIG_USE_STATIC_LIBS}")
1720
endif()
1821
set(PKG_CONFIG_USE_STATIC_LIBS ON)
19-
pkg_check_modules(SCYLLA_CPP_DRIVER_STATIC REQUIRED IMPORTED_TARGET scylla-cpp-driver_static)
22+
pkg_check_modules(SCYLLA_CPP_DRIVER_STATIC IMPORTED_TARGET scylla-cpp-driver_static)
2023
if(_pkg_config_use_static_libs_saved)
2124
set(PKG_CONFIG_USE_STATIC_LIBS "${_pkg_config_use_static_libs_saved}")
2225
else()
@@ -122,33 +125,94 @@ endif()
122125

123126
add_executable(scylla-cpp-driver-smoke-test
124127
src/smoke_test.c)
125-
target_link_libraries(scylla-cpp-driver-smoke-test PRIVATE
126-
PkgConfig::SCYLLA_CPP_DRIVER)
127128

128-
add_executable(scylla-cpp-driver-smoke-test-static
129-
src/smoke_test.c)
130-
set_target_properties(scylla-cpp-driver-smoke-test-static PROPERTIES
131-
OUTPUT_NAME "scylla-cpp-driver-smoke-test-static")
132-
if(NOT PKG_CONFIG_EXECUTABLE)
133-
message(FATAL_ERROR "pkg-config executable not available for static linkage")
129+
set(_smoke_link_target "PkgConfig::SCYLLA_CPP_DRIVER")
130+
set(_smoke_use_static TRUE)
131+
set(_smoke_extra_link_libraries "")
132+
if(WIN32)
133+
set(_smoke_use_static FALSE)
134+
else()
135+
if(APPLE)
136+
set(_smoke_shared_patterns ".dylib" ".dylib.*")
137+
else()
138+
set(_smoke_shared_patterns ".so" ".so.*")
139+
endif()
140+
foreach(_smoke_dir IN LISTS SCYLLA_CPP_DRIVER_LIBRARY_DIRS)
141+
foreach(_smoke_lib IN LISTS SCYLLA_CPP_DRIVER_LIBRARIES)
142+
foreach(_smoke_pattern IN LISTS _smoke_shared_patterns)
143+
file(GLOB _smoke_shared_candidates
144+
"${_smoke_dir}/lib${_smoke_lib}${_smoke_pattern}")
145+
if(_smoke_shared_candidates)
146+
set(_smoke_use_static FALSE)
147+
break()
148+
endif()
149+
endforeach()
150+
if(NOT _smoke_use_static)
151+
break()
152+
endif()
153+
endforeach()
154+
if(NOT _smoke_use_static)
155+
break()
156+
endif()
157+
endforeach()
134158
endif()
135-
execute_process(
136-
COMMAND ${PKG_CONFIG_EXECUTABLE} --libs --static scylla-cpp-driver_static
137-
OUTPUT_VARIABLE _smoke_static_libs_output
138-
RESULT_VARIABLE _smoke_static_libs_result
139-
OUTPUT_STRIP_TRAILING_WHITESPACE)
140-
if(NOT _smoke_static_libs_result EQUAL 0 OR _smoke_static_libs_output STREQUAL "")
141-
message(FATAL_ERROR
142-
"Unable to resolve static link flags from scylla-cpp-driver_static pkg-config metadata")
159+
if(_smoke_use_static)
160+
if(SCYLLA_CPP_DRIVER_STATIC_FOUND AND TARGET PkgConfig::SCYLLA_CPP_DRIVER_STATIC)
161+
message(STATUS
162+
"scylla-cpp-driver shared library not found; linking smoke test statically")
163+
set(_smoke_link_target "PkgConfig::SCYLLA_CPP_DRIVER_STATIC")
164+
if(NOT WIN32)
165+
list(APPEND _smoke_extra_link_libraries m)
166+
endif()
167+
else()
168+
message(FATAL_ERROR
169+
"scylla-cpp-driver shared library not found and static package metadata unavailable; cannot link smoke test")
170+
endif()
143171
endif()
144-
separate_arguments(_smoke_static_link_libraries UNIX_COMMAND "${_smoke_static_libs_output}")
145-
if(NOT WIN32)
146-
list(APPEND _smoke_static_link_libraries m)
172+
unset(_smoke_dir)
173+
unset(_smoke_lib)
174+
unset(_smoke_pattern)
175+
unset(_smoke_shared_candidates)
176+
unset(_smoke_shared_patterns)
177+
unset(_smoke_use_static)
178+
179+
target_link_libraries(scylla-cpp-driver-smoke-test PRIVATE
180+
${_smoke_link_target}
181+
${_smoke_extra_link_libraries})
182+
unset(_smoke_extra_link_libraries)
183+
unset(_smoke_link_target)
184+
185+
if(SCYLLA_SMOKE_BUILD_STATIC)
186+
if(NOT SCYLLA_CPP_DRIVER_STATIC_FOUND)
187+
message(FATAL_ERROR
188+
"Static scylla-cpp-driver pkg-config metadata required to build static smoke test")
189+
endif()
190+
191+
add_executable(scylla-cpp-driver-smoke-test-static
192+
src/smoke_test.c)
193+
set_target_properties(scylla-cpp-driver-smoke-test-static PROPERTIES
194+
OUTPUT_NAME "scylla-cpp-driver-smoke-test-static")
195+
if(NOT PKG_CONFIG_EXECUTABLE)
196+
message(FATAL_ERROR "pkg-config executable not available for static linkage")
197+
endif()
198+
execute_process(
199+
COMMAND ${PKG_CONFIG_EXECUTABLE} --libs --static scylla-cpp-driver_static
200+
OUTPUT_VARIABLE _smoke_static_libs_output
201+
RESULT_VARIABLE _smoke_static_libs_result
202+
OUTPUT_STRIP_TRAILING_WHITESPACE)
203+
if(NOT _smoke_static_libs_result EQUAL 0 OR _smoke_static_libs_output STREQUAL "")
204+
message(FATAL_ERROR
205+
"Unable to resolve static link flags from scylla-cpp-driver_static pkg-config metadata")
206+
endif()
207+
separate_arguments(_smoke_static_link_libraries UNIX_COMMAND "${_smoke_static_libs_output}")
208+
if(NOT WIN32)
209+
list(APPEND _smoke_static_link_libraries m)
210+
endif()
211+
target_link_libraries(scylla-cpp-driver-smoke-test-static PRIVATE
212+
${_smoke_static_link_libraries})
213+
unset(_smoke_static_libs_output)
214+
unset(_smoke_static_link_libraries)
147215
endif()
148-
target_link_libraries(scylla-cpp-driver-smoke-test-static PRIVATE
149-
${_smoke_static_link_libraries})
150-
unset(_smoke_static_libs_output)
151-
unset(_smoke_static_link_libraries)
152216

153217
set(SMOKE_APP_COMPONENT_NAME "")
154218
set(SMOKE_APP_COMPONENT_ARGS "")
@@ -157,17 +221,25 @@ if(APPLE)
157221
set(SMOKE_APP_COMPONENT_ARGS COMPONENT ${SMOKE_APP_COMPONENT_NAME})
158222
endif()
159223

224+
set(_smoke_install_targets scylla-cpp-driver-smoke-test)
225+
if(TARGET scylla-cpp-driver-smoke-test-static)
226+
list(APPEND _smoke_install_targets scylla-cpp-driver-smoke-test-static)
227+
endif()
228+
160229
install(TARGETS
161-
scylla-cpp-driver-smoke-test
162-
scylla-cpp-driver-smoke-test-static
230+
${_smoke_install_targets}
163231
DESTINATION bin
164232
${SMOKE_APP_COMPONENT_ARGS})
233+
unset(_smoke_install_targets)
165234

166235
#------------------------
167236
# Packaging (CPack)
168237
#------------------------
169238

170-
set(CPACK_PACKAGE_NAME "scylla-cpp-driver-smoke-app")
239+
if(NOT DEFINED CPACK_PACKAGE_NAME)
240+
set(CPACK_PACKAGE_NAME "scylla-cpp-driver-smoke-app")
241+
endif()
242+
set(_SMOKE_APP_PACKAGE_BASENAME "${CPACK_PACKAGE_NAME}")
171243
set(CPACK_PACKAGE_VENDOR "ScyllaDB")
172244
set(CPACK_PACKAGE_CONTACT "ScyllaDB <info@scylladb.com>")
173245
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
@@ -192,7 +264,7 @@ elseif(APPLE)
192264
COPYONLY)
193265
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
194266
set(CPACK_PACKAGE_FILE_NAME
195-
"scylla-cpp-driver-smoke-app-${PROJECT_VERSION_STRING}-macos")
267+
"${_SMOKE_APP_PACKAGE_BASENAME}-${PROJECT_VERSION_STRING}-macos")
196268
set(CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rs-driver.smoke-app")
197269
set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "")
198270
if(SMOKE_APP_COMPONENT_NAME)
@@ -209,7 +281,7 @@ else()
209281
set(CPACK_GENERATOR "DEB;RPM")
210282
set(CPACK_RESOURCE_FILE_LICENSE "${CPP_DRIVER_ROOT}/LICENSE")
211283
set(CPACK_PACKAGE_FILE_NAME
212-
"scylla-cpp-driver-smoke-app-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
284+
"${_SMOKE_APP_PACKAGE_BASENAME}-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
213285
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
214286
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ScyllaDB")
215287
set(CPACK_DEBIAN_PACKAGE_SECTION "database")
@@ -222,3 +294,4 @@ else()
222294
endif()
223295

224296
include(CPack)
297+
unset(_SMOKE_APP_PACKAGE_BASENAME)

0 commit comments

Comments
 (0)