@@ -42,6 +42,11 @@ docker cp $id:$lib_dir/build/ssl/libssl.a $OUTPUT_DIR
4242docker cp $id:$lib_dir/build/crypto/libcrypto.a $OUTPUT_DIR
4343docker cp $id:$lib_dir/include $OUTPUT_DIR
4444
45+ # Extract pre-built test harness libraries (symbol-localized, with libstdc++ baked in)
46+ docker cp $id:/harness-output/libawslc_shim.a $OUTPUT_DIR
47+ docker cp $id:/harness-output/libawslc_handshaker.a $OUTPUT_DIR
48+ docker cp $id:/harness-output/libawslc_acvp_server.a $OUTPUT_DIR
49+
4550docker rm $id"
4651)
4752
@@ -70,7 +75,12 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${AWSLC_BINARIES_DIR
7075
7176add_custom_target (build -awslc
7277 COMMENT "Build AWS-LC in FIPS mode with docker"
73- DEPENDS ${AWSLC_BINARIES_DIR} /libssl.a ${AWSLC_BINARIES_DIR} /libcrypto.a
78+ DEPENDS
79+ ${AWSLC_BINARIES_DIR} /libssl.a
80+ ${AWSLC_BINARIES_DIR} /libcrypto.a
81+ ${AWSLC_BINARIES_DIR} /libawslc_shim.a
82+ ${AWSLC_BINARIES_DIR} /libawslc_handshaker.a
83+ ${AWSLC_BINARIES_DIR} /libawslc_acvp_server.a
7484)
7585
7686if (ARCH_AARCH64)
@@ -83,7 +93,20 @@ add_custom_command(
8393 OUTPUT
8494 "${AWSLC_BUILD_DIR} /output/libssl.a"
8595 "${AWSLC_BUILD_DIR} /output/libcrypto.a"
96+ "${AWSLC_BUILD_DIR} /output/libawslc_shim.a"
97+ "${AWSLC_BUILD_DIR} /output/libawslc_handshaker.a"
98+ "${AWSLC_BUILD_DIR} /output/libawslc_acvp_server.a"
8699 COMMENT "Building AWS-LC in FIPS mode using docker"
100+ # Copy test harness build inputs into the Docker context directory
101+ COMMAND ${CMAKE_COMMAND} -E copy
102+ ${ClickHouse_SOURCE_DIR} /programs/ssl-common/posix_spawn_2.c
103+ ${AWSLC_BUILD_DIR} /posix_spawn_2.c
104+ COMMAND ${CMAKE_COMMAND} -E copy
105+ ${ClickHouse_SOURCE_DIR} /programs/ssl-common/glibc_compat.c
106+ ${AWSLC_BUILD_DIR} /glibc_compat.c
107+ COMMAND ${CMAKE_COMMAND} -E copy
108+ ${CMAKE_CURRENT_SOURCE_DIR} /build_test_harness.sh
109+ ${AWSLC_BUILD_DIR} /build_test_harness.sh
87110 COMMAND bash -c "chmod +x ${AWSLC_BUILD_DIR} /build_awclc_fips.sh"
88111 COMMAND bash -c "${AWSLC_BUILD_DIR} /build_awclc_fips.sh ${AWSLC_BINARIES_DIR} ${DOCKERFILE_PATH} "
89112 WORKING_DIRECTORY ${AWSLC_BUILD_DIR}
@@ -92,6 +115,9 @@ add_custom_command(
92115 ${AWSLC_BUILD_DIR} /build_awclc_fips.sh
93116 ${AWSLC_BUILD_DIR} /check_version.c
94117 ${DOCKERFILE_PATH}
118+ ${ClickHouse_SOURCE_DIR} /programs/ssl-common/posix_spawn_2.c
119+ ${ClickHouse_SOURCE_DIR} /programs/ssl-common/glibc_compat.c
120+ ${CMAKE_CURRENT_SOURCE_DIR} /build_test_harness.sh
95121)
96122
97123add_library (crypto UNKNOWN IMPORTED GLOBAL )
@@ -130,6 +156,45 @@ target_compile_options(ssl INTERFACE
130156target_compile_options (global -group INTERFACE "-Wno-deprecated-declarations" )
131157target_compile_options (global -group INTERFACE "-Wno-poison-system-directories" )
132158
159+ # ── Test harness IMPORTED libraries ──────────────────────────────────────────
160+ # These archives are built inside Docker (build_test_harness.sh), partially
161+ # linked with libstdc++ via `ld -r`, and symbol-localized so only the entry
162+ # point is globally visible. No --allow-multiple-definition needed.
163+
164+ add_library (awslc_shim STATIC IMPORTED GLOBAL )
165+ add_dependencies (awslc_shim build -awslc )
166+ set_target_properties (awslc_shim PROPERTIES
167+ IMPORTED_LOCATION "${AWSLC_BINARIES_DIR} /libawslc_shim.a" )
168+
169+ add_library (awslc_handshaker STATIC IMPORTED GLOBAL )
170+ add_dependencies (awslc_handshaker build -awslc )
171+ set_target_properties (awslc_handshaker PROPERTIES
172+ IMPORTED_LOCATION "${AWSLC_BINARIES_DIR} /libawslc_handshaker.a" )
173+
174+ add_library (awslc_acvp_server STATIC IMPORTED GLOBAL )
175+ add_dependencies (awslc_acvp_server build -awslc )
176+ set_target_properties (awslc_acvp_server PROPERTIES
177+ IMPORTED_LOCATION "${AWSLC_BINARIES_DIR} /libawslc_acvp_server.a" )
178+
179+ # ── Test harness program libraries ───────────────────────────────────────────
180+ # Linked into the main clickhouse binary via clickhouse_program_install()
181+ # in programs/CMakeLists.txt. The entry-point .cpp files stay in programs/.
182+
183+ add_library (clickhouse-ssl-shim-lib
184+ ${ClickHouse_SOURCE_DIR} /programs/ssl-shim/SslShim.cpp )
185+ target_link_libraries (clickhouse-ssl-shim-lib PRIVATE awslc_shim ssl crypto )
186+ add_dependencies (clickhouse-ssl-shim-lib build -awslc )
187+
188+ add_library (clickhouse-ssl-handshaker-lib
189+ ${ClickHouse_SOURCE_DIR} /programs/ssl-handshaker/SslHandshaker.cpp )
190+ target_link_libraries (clickhouse-ssl-handshaker-lib PRIVATE awslc_handshaker ssl crypto )
191+ add_dependencies (clickhouse-ssl-handshaker-lib build -awslc )
192+
193+ add_library (clickhouse-acvp-server-lib
194+ ${ClickHouse_SOURCE_DIR} /programs/acvp-server/AcvpServer.cpp )
195+ target_link_libraries (clickhouse-acvp-server-lib PRIVATE awslc_acvp_server crypto )
196+ add_dependencies (clickhouse-acvp-server-lib build -awslc )
197+
133198else () # FIPS_CLICKHOUSE
134199
135200
0 commit comments