Make the QUIC native test build put libmsquic.so.2 where the loader needs it
The README's Linux test build has never worked: both the bridge and the test executable carry INSTALL_RPATH "$ORIGIN" and expect libmsquic.so.2 beside them, but only scripts/build-quic-native.sh's packaged output directory ever got that copy. A test build produced a binary that died at once with "cannot open shared object file". Fix it where the knowledge already lives instead of adding a README workaround: CMake already receives MSQUIC_LIB_DIR, so the test target now copies libmsquic.so.2 beside itself in a POST_BUILD step. While verifying the README's own worked example end to end, found a second, independent break in the same docker block: MSQUIC_INCLUDE_DIR and MSQUIC_LIB_DIR were passed as paths relative to the repository root, but CMake resolves a relative cache-variable path against the CMakeLists.txt that consumes it, not the invocation directory, so the compile failed on a missing msquic.h before it ever reached the loader. Made both paths absolute with $(pwd) and documented why. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
1bf581d68b
commit
5533c34783
2 changed files with 22 additions and 3 deletions
|
|
@ -90,5 +90,15 @@ if(CULTMESH_QUIC_BUILD_TESTS)
|
|||
set_target_properties(cultmesh_quic_native_tests PROPERTIES
|
||||
BUILD_WITH_INSTALL_RPATH TRUE
|
||||
INSTALL_RPATH "$ORIGIN")
|
||||
# Both binaries carry INSTALL_RPATH "$ORIGIN" and expect libmsquic.so.2
|
||||
# beside them at load time. build-quic-native.sh's packaged output gets
|
||||
# that copy from its own recipe; a test build has no packaging step, so
|
||||
# the runner would otherwise die at once with "cannot open shared object
|
||||
# file". CMake already knows where MSQUIC_LIB_DIR is, so it places the
|
||||
# file itself instead of leaving the reader to run an extra cp by hand.
|
||||
add_custom_command(TARGET cultmesh_quic_native_tests POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${MSQUIC_LIB_DIR}/libmsquic.so.2"
|
||||
"$<TARGET_FILE_DIR:cultmesh_quic_native_tests>/libmsquic.so.2")
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -114,8 +114,8 @@ and a container that cannot ask for that cannot run them:
|
|||
scripts/build-quic-native.sh
|
||||
cmake -S native/GameCult.Mesh.Quic.Native -B artifacts/quic-native-tests/linux-x64 -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release -DCULTMESH_QUIC_BUILD_TESTS=ON -DCULTMESH_QUIC_DEBUG_ASSERTS=ON \
|
||||
-DMSQUIC_INCLUDE_DIR=artifacts/dependencies/msquic-linux-2.5.9/include \
|
||||
-DMSQUIC_LIB_DIR=artifacts/dependencies/msquic-linux-2.5.9/package/usr/lib/x86_64-linux-gnu
|
||||
-DMSQUIC_INCLUDE_DIR=\$(pwd)/artifacts/dependencies/msquic-linux-2.5.9/include \
|
||||
-DMSQUIC_LIB_DIR=\$(pwd)/artifacts/dependencies/msquic-linux-2.5.9/package/usr/lib/x86_64-linux-gnu
|
||||
cmake --build artifacts/quic-native-tests/linux-x64
|
||||
for scenario in closerace holdclose holdtimeout polltimeout pollbusy pollhammer zerotimeout payloadfit latecall waitseam; do
|
||||
setarch -R artifacts/quic-native-tests/linux-x64/bin/cultmesh_quic_native_tests \"\${scenario}\" || exit 1
|
||||
|
|
@ -123,7 +123,16 @@ and a container that cannot ask for that cannot run them:
|
|||
"
|
||||
|
||||
Both lines are run from the repository root, and the mount is that root wherever
|
||||
it is: `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. `CULTMESH_QUIC_BUILD_TESTS`
|
||||
it is: `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. `MSQUIC_INCLUDE_DIR`
|
||||
and `MSQUIC_LIB_DIR` need `$(pwd)` too, even though the `cmake` invocation
|
||||
itself already runs from `/src`: CMake resolves a relative path passed as a
|
||||
cache variable against the CMakeLists.txt that consumes it
|
||||
(`native/GameCult.Mesh.Quic.Native`), not against the directory `cmake` was
|
||||
invoked from, so a bare `artifacts/...` here looks for the dependency one level
|
||||
too deep and fails the compile before it reaches the loader. The test target's
|
||||
own build now copies `libmsquic.so.2` from `MSQUIC_LIB_DIR` beside the built
|
||||
binaries, so nothing else here needs the packaged output directory `scripts/build-quic-native.sh`
|
||||
produces. `CULTMESH_QUIC_BUILD_TESTS`
|
||||
is off in the shipped configuration (see the CMakeLists.txt option comment); it
|
||||
turns on the scenario runner `tests/cultmesh_quic_native_tests.cpp` compiles into,
|
||||
and `CULTMESH_QUIC_DEBUG_ASSERTS` turns on both the bridge's internal invariant
|
||||
|
|
|
|||
Loading…
Reference in a new issue