Skip to content

Commit 52b9e2e

Browse files
committed
static
1 parent 383be92 commit 52b9e2e

File tree

5 files changed

+311
-69
lines changed

5 files changed

+311
-69
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: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,11 +279,49 @@ endif()
279279
set(CPACK_MONOLITHIC_INSTALL ON)
280280
set(CPACK_VERBATIM_VARIABLES ON)
281281

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

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

321+
# Ensure CPack emits one artifact per component instead of merging them into a
322+
# single bundle.
323+
set(CPACK_COMPONENTS_GROUPING IGNORE)
324+
287325
include(CPackComponent)
288326

289327
# Runtime component: shared libraries only
@@ -303,24 +341,31 @@ if(WIN32)
303341
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ScyllaDB\\Scylla CPP Driver")
304342
# Stable GUID keeps WiX upgrades working between versions
305343
set(CPACK_WIX_UPGRADE_GUID "3E09F4F4-1C4A-4B8B-973D-0CBA64D5E78F")
344+
set(CPACK_PACKAGE_FILE_NAME
345+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_WIN_ARCH}")
306346
elseif(APPLE)
307347
configure_file(
308348
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
309349
"${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt"
310350
COPYONLY)
311351
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
312352
set(CPACK_GENERATOR "productbuild;DragNDrop")
353+
set(CPACK_DMG_COMPONENT_INSTALL ON)
313354
set(CPACK_PACKAGE_FILE_NAME
314-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-macos")
355+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_macos")
315356
set(CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rs-driver")
316357
set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "")
317358
set(CPACK_PRODUCTBUILD_COMPONENT_INSTALL ON)
318359

319360
else()
320361
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
321362
set(CPACK_GENERATOR "DEB;RPM")
322-
set(CPACK_PACKAGE_FILE_NAME
323-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
363+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_DEB_ARCH}")
364+
365+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_FILE_NAME
366+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
367+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_FILE_NAME
368+
"${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
324369

325370
# DEB package configuration
326371
set(CPACK_DEB_COMPONENT_INSTALL ON)
@@ -345,6 +390,10 @@ else()
345390
set(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL})
346391
set(CPACK_RPM_PACKAGE_RELEASE 1)
347392
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
393+
set(CPACK_RPM_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_RPM_ARCH}")
394+
395+
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_FILE_NAME
396+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
348397

349398
# RPM runtime package
350399
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
@@ -354,6 +403,8 @@ else()
354403
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-devel")
355404
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_GROUP "Development/Libraries")
356405
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_REQUIRES "${_CPACK_PACKAGE_NAME} = ${PROJECT_VERSION_STRING}-${CPACK_RPM_PACKAGE_RELEASE}")
406+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_FILE_NAME
407+
"${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
357408
endif()
358409

359410
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)