@@ -193,10 +193,11 @@ endif
193193FULL_RUSTFLAGS := --cfg scylla_unstable --cfg cpp_integration_testing
194194
195195CURRENT_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST ) ) ) )
196- BUILD_DIR := "${ CURRENT_DIR} build"
196+ BUILD_DIR := $( CURRENT_DIR ) build
197197INTEGRATION_TEST_BIN := ${BUILD_DIR}/cassandra-integration-tests
198198CMAKE_FLAGS ?=
199199CMAKE_BUILD_TYPE ?= Release
200+ OPENSSL_WIN_VERSION ?= 1.1.1u
200201
201202ifeq ($(OS_TYPE ) ,macos)
202203 CMAKE_INSTALL_PREFIX ?= /usr/local
213214endif
214215
215216clean :
216- rm -rf " ${BUILD_DIR} "
217+ rm -rf " ${BUILD_DIR} " " ${STATIC_BUILD_DIR} "
217218
218219update-apt-cache-if-needed :
219220 @# It searches for a file that is at most one day old.
@@ -274,6 +275,55 @@ build-integration-test-bin-if-missing:
274275 @cd " ${BUILD_DIR} "
275276 cmake -DCASS_BUILD_INTEGRATION_TESTS=ON -DCMAKE_BUILD_TYPE=Release .. && (make -j 4 || make)
276277
278+ STATIC_BUILD_DIR := $(CURRENT_DIR ) build_static
279+
280+ build-static-integration-test-bin :
281+ ifeq ($(OS_TYPE ) ,windows)
282+ $(MAKE) .package-build-prepare-windows
283+ cmake -S . -B build_static -G "Visual Studio 17 2022" -A x64 -DCASS_BUILD_INTEGRATION_TESTS=ON -DCASS_USE_STATIC_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DOPENSSL_VERSION=$(OPENSSL_WIN_VERSION)
284+ @pwsh -NoProfile -Command "\
285+ $$useExternalOpenSSL = ((Select-String -Path 'build_static\\CMakeCache.txt' -Pattern '^SCYLLA_OPENSSL_EXTERNAL_PROJECT:BOOL=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
286+ $$externalOpenSSLTarget = ((Select-String -Path 'build_static\\CMakeCache.txt' -Pattern '^SCYLLA_OPENSSL_EXTERNAL_TARGET:STRING=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
287+ if ($$useExternalOpenSSL -eq 'ON' -and $$externalOpenSSLTarget) { \
288+ cmake --build build_static --config Release --target $$externalOpenSSLTarget; \
289+ if ($$LASTEXITCODE -ne 0) { exit $$LASTEXITCODE } \
290+ }; \
291+ $$opensslIncDir = ((Select-String -Path 'build_static\\CMakeCache.txt' -Pattern '^OPENSSL_INCLUDE_DIR:PATH=' | Select-Object -First 1).Line -split '=', 2)[1]; \
292+ $$opensslSslLibPath = ((Select-String -Path 'build_static\\CMakeCache.txt' -Pattern '^OPENSSL_SSL_LIBRARY(_RELEASE)?:FILEPATH=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
293+ $$opensslCryptoLibPath = ((Select-String -Path 'build_static\\CMakeCache.txt' -Pattern '^OPENSSL_CRYPTO_LIBRARY(_RELEASE)?:FILEPATH=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
294+ if ($$opensslIncDir) { \
295+ $$env:OPENSSL_DIR = (Split-Path $$opensslIncDir -Parent); \
296+ $$env:OPENSSL_INCLUDE_DIR = $$opensslIncDir; \
297+ if (-not $$opensslSslLibPath) { \
298+ $$opensslSslLibPath = (Get-ChildItem -Path $$env:OPENSSL_DIR -Recurse -Include 'libssl*.lib','ssleay32*.lib' -File -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; \
299+ } \
300+ if (-not $$opensslCryptoLibPath) { \
301+ $$opensslCryptoLibPath = (Get-ChildItem -Path $$env:OPENSSL_DIR -Recurse -Include 'libcrypto*.lib','libeay32*.lib' -File -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; \
302+ } \
303+ $$opensslLibPath = if ($$opensslSslLibPath) { $$opensslSslLibPath } elseif ($$opensslCryptoLibPath) { $$opensslCryptoLibPath } else { '' }; \
304+ if ($$opensslLibPath) { \
305+ $$env:OPENSSL_LIB_DIR = Split-Path $$opensslLibPath -Parent; \
306+ } else { \
307+ $$env:OPENSSL_LIB_DIR = Join-Path $$env:OPENSSL_DIR 'lib'; \
308+ } \
309+ if ($$opensslSslLibPath -and $$opensslCryptoLibPath) { \
310+ $$opensslSslLibName = [System.IO.Path]::GetFileNameWithoutExtension($$opensslSslLibPath); \
311+ $$opensslCryptoLibName = [System.IO.Path]::GetFileNameWithoutExtension($$opensslCryptoLibPath); \
312+ $$env:OPENSSL_LIBS = \"$$opensslSslLibName`:`$$opensslCryptoLibName\"; \
313+ } \
314+ }; \
315+ cmake --build build_static --config Release; \
316+ if ($$LASTEXITCODE -ne 0) { exit $$LASTEXITCODE } \
317+ "
318+ build_static\Release\cassandra-integration-tests.exe --gtest_list_tests > NUL
319+ else
320+ @echo "Building integration test binary with STATIC linking to ${STATIC_BUILD_DIR}"
321+ @mkdir "${STATIC_BUILD_DIR}" >/dev/null 2>&1 || true
322+ @cd "${STATIC_BUILD_DIR}"
323+ cmake -DCASS_BUILD_INTEGRATION_TESTS=ON -DCASS_USE_STATIC_LIBS=ON -DCMAKE_BUILD_TYPE=Release .. && (make -j 4 || make)
324+ "${STATIC_BUILD_DIR}/cassandra-integration-tests" --gtest_list_tests > /dev/null
325+ endif
326+
277327build-examples :
278328 @echo " Building examples to ${EXAMPLES_DIR} "
279329 @mkdir " ${BUILD_DIR} " > /dev/null 2>&1 || true
@@ -345,14 +395,47 @@ endif
345395
346396.package-configure : .package-build-prepare
347397ifeq ($(OS_TYPE ) ,windows)
348- cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DOPENSSL_VERSION=1.1.1u $(CMAKE_FLAGS)
398+ cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DOPENSSL_VERSION=$(OPENSSL_WIN_VERSION) $(CMAKE_FLAGS)
349399else
350400 cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DCMAKE_INSTALL_PREFIX=$(CMAKE_INSTALL_PREFIX) $(CMAKE_FLAGS)
351401endif
352402
353403build-driver : .package-configure
354404ifeq ($(OS_TYPE ) ,windows)
355- @pwsh -NoProfile -Command "$$opensslVersion = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^OPENSSL_VERSION:STRING=' | Select-Object -First 1).Line -split '=', 2)[1]; $$opensslTarget = \"openssl-$${opensslVersion}-library\"; cmake --build build --config $(CMAKE_BUILD_TYPE) --target $$opensslTarget; $$env:OPENSSL_DIR = (Resolve-Path 'build\\libs\\openssl').Path; $$env:OPENSSL_INCLUDE_DIR = \"$$env:OPENSSL_DIR\\include\"; $$env:OPENSSL_LIB_DIR = \"$$env:OPENSSL_DIR\\lib\"; cmake --build build --config $(CMAKE_BUILD_TYPE)"
405+ @pwsh -NoProfile -Command "\
406+ $$useExternalOpenSSL = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^SCYLLA_OPENSSL_EXTERNAL_PROJECT:BOOL=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
407+ $$externalOpenSSLTarget = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^SCYLLA_OPENSSL_EXTERNAL_TARGET:STRING=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
408+ if ($$useExternalOpenSSL -eq 'ON' -and $$externalOpenSSLTarget) { \
409+ cmake --build build --config $(CMAKE_BUILD_TYPE) --target $$externalOpenSSLTarget; \
410+ if ($$LASTEXITCODE -ne 0) { exit $$LASTEXITCODE } \
411+ }; \
412+ $$opensslIncDir = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^OPENSSL_INCLUDE_DIR:PATH=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
413+ $$opensslSslLibPath = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^OPENSSL_SSL_LIBRARY(_RELEASE)?:FILEPATH=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
414+ $$opensslCryptoLibPath = ((Select-String -Path 'build\\CMakeCache.txt' -Pattern '^OPENSSL_CRYPTO_LIBRARY(_RELEASE)?:FILEPATH=' -ErrorAction SilentlyContinue | Select-Object -First 1).Line -split '=', 2)[1]; \
415+ if ($$opensslIncDir) { \
416+ $$env:OPENSSL_DIR = (Split-Path $$opensslIncDir -Parent); \
417+ $$env:OPENSSL_INCLUDE_DIR = $$opensslIncDir; \
418+ if (-not $$opensslSslLibPath) { \
419+ $$opensslSslLibPath = (Get-ChildItem -Path $$env:OPENSSL_DIR -Recurse -Include 'libssl*.lib','ssleay32*.lib' -File -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; \
420+ } \
421+ if (-not $$opensslCryptoLibPath) { \
422+ $$opensslCryptoLibPath = (Get-ChildItem -Path $$env:OPENSSL_DIR -Recurse -Include 'libcrypto*.lib','libeay32*.lib' -File -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; \
423+ } \
424+ $$opensslLibPath = if ($$opensslSslLibPath) { $$opensslSslLibPath } elseif ($$opensslCryptoLibPath) { $$opensslCryptoLibPath } else { '' }; \
425+ if ($$opensslLibPath) { \
426+ $$env:OPENSSL_LIB_DIR = Split-Path $$opensslLibPath -Parent; \
427+ } else { \
428+ $$env:OPENSSL_LIB_DIR = Join-Path $$env:OPENSSL_DIR 'lib'; \
429+ } \
430+ if ($$opensslSslLibPath -and $$opensslCryptoLibPath) { \
431+ $$opensslSslLibName = [System.IO.Path]::GetFileNameWithoutExtension($$opensslSslLibPath); \
432+ $$opensslCryptoLibName = [System.IO.Path]::GetFileNameWithoutExtension($$opensslCryptoLibPath); \
433+ $$env:OPENSSL_LIBS = \"$$opensslSslLibName`:`$$opensslCryptoLibName\"; \
434+ } \
435+ }; \
436+ cmake --build build --config $(CMAKE_BUILD_TYPE); \
437+ if ($$LASTEXITCODE -ne 0) { exit $$LASTEXITCODE } \
438+ "
356439else
357440 cmake --build build --config $(CMAKE_BUILD_TYPE)
358441endif
@@ -524,15 +607,20 @@ endif
524607# =============================================================================
525608
526609SMOKE_TEST_DIR := packaging/smoke-test-app
610+ SCYLLA_SMOKE_BUILD_STATIC ?= OFF
611+ SMOKE_TEST_CMAKE_FLAGS :=
612+ ifeq ($(SCYLLA_SMOKE_BUILD_STATIC ) ,ON)
613+ SMOKE_TEST_CMAKE_FLAGS += -DSCYLLA_SMOKE_BUILD_STATIC=ON
614+ endif
527615
528616# DEB package testing (Ubuntu/Debian)
529617test-package-deb : build-package
530618 @echo " === Testing DEB packages ==="
531619 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev-deb
532620 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-deb
533- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=DEB
534- $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-deb
535- $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package
621+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=DEB SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) "
622+ $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-deb SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
623+ $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
536624 @echo " === DEB package test completed successfully ==="
537625 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-app-deb || true
538626 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-driver-deb || true
@@ -549,7 +637,7 @@ test-package-rpm: build-package
549637 fedora:latest \
550638 bash -c ' \
551639 set -euo pipefail; \
552- dnf -y install make cmake gcc-c++ findutils rpm-build; \
640+ dnf -y install make cmake gcc-c++ findutils rpm-build zlib-devel ; \
553641 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev-rpm; \
554642 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-rpm; \
555643 pc_file=$$(find /usr -name "scylla-cpp-driver.pc" 2>/dev/null | head -1 ) ; \
@@ -561,14 +649,22 @@ test-package-rpm: build-package
561649 if [ -n " $$ lib_dir" ]; then \
562650 export LD_LIBRARY_PATH=" $$ {lib_dir}:$$ {LD_LIBRARY_PATH:-}" ; \
563651 fi ; \
564- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=RPM; \
652+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=RPM SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) " ; \
565653 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-rpm; \
566654 smoke_bin=$$(find /usr -name "scylla-cpp-driver-smoke-test" -type f 2>/dev/null | head -1 ) ; \
567655 if [ -z " $$ smoke_bin" ]; then \
568656 echo " ERROR: smoke-test binary not found" ; \
569657 exit 1; \
570658 fi ; \
571- " $$ smoke_bin" 127.0.0.1 \
659+ " $$ smoke_bin" 127.0.0.1; \
660+ if [ " $( SCYLLA_SMOKE_BUILD_STATIC) " = " ON" ]; then \
661+ smoke_static_bin=$$(find /usr -name "scylla-cpp-driver-smoke-test-static" -type f 2>/dev/null | head -1 ) ; \
662+ if [ -z " $$ smoke_static_bin" ]; then \
663+ echo " ERROR: static smoke-test binary not found" ; \
664+ exit 1; \
665+ fi ; \
666+ " $$ smoke_static_bin" 127.0.0.1; \
667+ fi \
572668 '
573669 @echo " === RPM package test completed successfully ==="
574670 docker compose -f $(SMOKE_TEST_DIR ) /docker-compose.yml down --remove-orphans || true
@@ -582,9 +678,9 @@ test-package-rpm-native: build-package
582678 @echo " === Testing RPM packages (native) ==="
583679 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev-rpm
584680 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-rpm
585- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=RPM
681+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=RPM SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) "
586682 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-rpm
587- $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_HOST=$(SCYLLA_HOST ) SKIP_DOCKER_COMPOSE=$(SKIP_DOCKER_COMPOSE )
683+ $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_HOST=$(SCYLLA_HOST ) SKIP_DOCKER_COMPOSE=$(SKIP_DOCKER_COMPOSE ) SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
588684 @echo " === RPM package test completed successfully ==="
589685 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-app-rpm || true
590686 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-driver-rpm || true
@@ -595,9 +691,9 @@ test-package-pkg: build-package
595691 @echo " === Testing PKG packages ==="
596692 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev-pkg
597693 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-pkg
598- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=productbuild
694+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=productbuild SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) "
599695 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-pkg
600- $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package
696+ $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
601697 @echo " === PKG package test completed successfully ==="
602698 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-app-pkg || true
603699 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-driver-pkg || true
@@ -608,9 +704,9 @@ test-package-dmg: build-package
608704 @echo " === Testing DMG packages ==="
609705 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev-dmg
610706 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dmg
611- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=DragNDrop
707+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package CPACK_GENERATORS=DragNDrop SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) "
612708 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app-dmg
613- $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package
709+ $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
614710 @echo " === DMG package test completed successfully ==="
615711 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-app-dmg || true
616712 $(MAKE ) -C $(SMOKE_TEST_DIR ) remove-driver-dmg || true
@@ -621,9 +717,9 @@ test-package-msi: .windows-setup-wix build-package
621717 @echo " === Testing MSI packages ==="
622718 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver-dev
623719 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-driver
624- $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package
720+ $(MAKE ) -C $(SMOKE_TEST_DIR ) build-package SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC ) CMAKE_FLAGS= " $( SMOKE_TEST_CMAKE_FLAGS ) "
625721 $(MAKE ) -C $(SMOKE_TEST_DIR ) install-app
626- $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package
722+ $(MAKE ) -C $(SMOKE_TEST_DIR ) test-app-package SCYLLA_SMOKE_BUILD_STATIC= $( SCYLLA_SMOKE_BUILD_STATIC )
627723 @echo " === MSI package test completed successfully ==="
628724
629725# Combined Linux package testing (DEB + RPM)
0 commit comments