From 7b07d014002efd4adf6d40d4745330f79e59e25e Mon Sep 17 00:00:00 2001 From: Colin Sames Date: Fri, 3 Apr 2026 17:27:10 +0200 Subject: [PATCH] all variants (windows/linux)(static/dynamic) now work --- CMakeLists.txt | 7 ++++ cmake/SDLSetup.cmake | 13 ++++++- .../SDL3-dynamic/include/SDL3/SDL_revision.h | 4 +-- prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0 | 2 +- .../linux/SDL3-dynamic/lib/libSDL3.so.0.5 | 1 + .../linux/SDL3-dynamic/lib/libSDL3.so.0.5.0 | Bin 4191808 -> 4191808 bytes .../SDL3-static/include/SDL3/SDL_revision.h | 4 +-- prebuilt/linux/SDL3-static/lib/libSDL3.a | Bin 6871554 -> 6871554 bytes scripts/build_sdl_linux.sh | 33 +++++++++++++++++- 9 files changed, 57 insertions(+), 7 deletions(-) create mode 120000 prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5 diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d2781d..07c8c01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,13 @@ message(STATUS "Build config: PLATFORM=${PLATFORM}, SDL_LINK_TYPE=${SDL_LINK_TYP # --- Resolve SDL --- include(cmake/SDLSetup.cmake) +# --- Apply Linux dynamic RPATH globally so all targets can find libSDL3.so.0 +# at runtime. SDL_LINUX_RPATH is set by SDLSetup.cmake only on Linux + dynamic. +if(DEFINED SDL_LINUX_RPATH) + message(STATUS "Setting CMAKE_BUILD_RPATH to: ${SDL_LINUX_RPATH}") + set(CMAKE_BUILD_RPATH "${SDL_LINUX_RPATH}") +endif() + # --- Subdirectories --- add_subdirectory(engine) add_subdirectory(game) \ No newline at end of file diff --git a/cmake/SDLSetup.cmake b/cmake/SDLSetup.cmake index 69cb0b5..3f151fe 100644 --- a/cmake/SDLSetup.cmake +++ b/cmake/SDLSetup.cmake @@ -30,7 +30,18 @@ if(SDL_LINK_TYPE STREQUAL "dynamic" AND WIN32) add_custom_target(copy_sdl_dll ALL COMMAND ${CMAKE_COMMAND} -E copy_if_different $ - "${CMAKE_BINARY_DIR}/game" + "${CMAKE_BINARY_DIR}/game/$" COMMENT "Copying SDL3.dll to output directory" ) +endif() + +# On Linux with dynamic linking, embed the absolute path to the prebuilt lib +# directory in the binary's RPATH. The prebuilt/linux directory is built +# in-place on Linux by build_sdl_linux.sh and is never synced from Windows, +# so the path is always valid on the remote machine. +if(SDL_LINK_TYPE STREQUAL "dynamic" AND UNIX AND NOT APPLE) + get_target_property(SDL3_SO_LOCATION SDL3::SDL3 LOCATION) + get_filename_component(SDL3_LIB_DIR "${SDL3_SO_LOCATION}" DIRECTORY) + message(STATUS "SDL3 runtime library directory: ${SDL3_LIB_DIR}") + set(SDL_LINUX_RPATH "${SDL3_LIB_DIR}" CACHE INTERNAL "") endif() \ No newline at end of file diff --git a/prebuilt/linux/SDL3-dynamic/include/SDL3/SDL_revision.h b/prebuilt/linux/SDL3-dynamic/include/SDL3/SDL_revision.h index f98b314..26bb5bc 100644 --- a/prebuilt/linux/SDL3-dynamic/include/SDL3/SDL_revision.h +++ b/prebuilt/linux/SDL3-dynamic/include/SDL3/SDL_revision.h @@ -31,9 +31,9 @@ /* #undef SDL_VENDOR_INFO */ #ifdef SDL_VENDOR_INFO -#define SDL_REVISION "SDL-3.5.0-release-3.4.0-501-gf3a3b4b95 (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "SDL-3.5.0-release-3.4.0-502-gf4255e15b (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "SDL-3.5.0-release-3.4.0-501-gf3a3b4b95" +#define SDL_REVISION "SDL-3.5.0-release-3.4.0-502-gf4255e15b" #endif #endif /* SDL_revision_h_ */ diff --git a/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0 b/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0 index 7233be7..60b77e6 120000 --- a/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0 +++ b/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0 @@ -1 +1 @@ -libSDL3.so.0.5.0 \ No newline at end of file +libSDL3.so.0.5 \ No newline at end of file diff --git a/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5 b/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5 new file mode 120000 index 0000000..7233be7 --- /dev/null +++ b/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5 @@ -0,0 +1 @@ +libSDL3.so.0.5.0 \ No newline at end of file diff --git a/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5.0 b/prebuilt/linux/SDL3-dynamic/lib/libSDL3.so.0.5.0 index cc18ae6c1f4477e734728dc9544fa8fa851bcb3f..0751e0e406970216ae34e09357caabc8435f5e2e 100644 GIT binary patch delta 304 zcmWl~xpDz<0Knn-Z`LhtBI35LIAS+8afMc8^tLi1hAz*bFr)D*s@={gjb~AswDL>w z&3C%q#R-S86q(5tb^2qiW9R*^`;s`W_Cnbh($7!t;70&K zgb+pqQN-|sIG&Nf3zA47jSRBLA&&wS6j4GM6;v%ldY#<8T4VX$)^vTL>hrBBYN(@u eCf?A33JvdQL&pa`(LonI^fAB}hL$NtyW1b0`dsz^ delta 304 zcmWm4Ia0y^06@`6AhHOu1w;`D`@V+7ph8QPnj*stDc~R}U>Gi-4OgIomeNab0x9jo zr+D+5f4&G(0wIK?)*8wLaJirAvJn-TXKKSv3 z0D=f1j0j{z5yLa$c)=?Ycta8?q@f^#EON-BfFepLqjECDs&4x_jnz_JsAkX9`s<@m iLmdq?(Lx&?bfKb$`#Zo8@6a&92R`wI@#!c`w*NN=0$p$b diff --git a/prebuilt/linux/SDL3-static/include/SDL3/SDL_revision.h b/prebuilt/linux/SDL3-static/include/SDL3/SDL_revision.h index f98b314..26bb5bc 100644 --- a/prebuilt/linux/SDL3-static/include/SDL3/SDL_revision.h +++ b/prebuilt/linux/SDL3-static/include/SDL3/SDL_revision.h @@ -31,9 +31,9 @@ /* #undef SDL_VENDOR_INFO */ #ifdef SDL_VENDOR_INFO -#define SDL_REVISION "SDL-3.5.0-release-3.4.0-501-gf3a3b4b95 (" SDL_VENDOR_INFO ")" +#define SDL_REVISION "SDL-3.5.0-release-3.4.0-502-gf4255e15b (" SDL_VENDOR_INFO ")" #else -#define SDL_REVISION "SDL-3.5.0-release-3.4.0-501-gf3a3b4b95" +#define SDL_REVISION "SDL-3.5.0-release-3.4.0-502-gf4255e15b" #endif #endif /* SDL_revision_h_ */ diff --git a/prebuilt/linux/SDL3-static/lib/libSDL3.a b/prebuilt/linux/SDL3-static/lib/libSDL3.a index 298fd754db4cf3d9e59e023c7b4c2eb6827c0381..e0269d1f7aabce30b47edbc653bfe527b1c50c15 100644 GIT binary patch delta 442 zcmWmB)lEYI006+?*5dB&TKaHzr??e|mN7^}!XP9}(1axzisR!ZxK#QpE5-XqMmjSV z4n>BNiD)DUUdMu`&v-bKEV9WVmpt+*ppYU$gej(kQpzZ&f=a5WriNPTsHcHOnrNnl zR@!K%gHF2WriWho=x2aIh8SjqQO1ZcPLzNNCYfTI8D^Pdo&^?JVwn|IS!10IHrZmE w9d_Acp92nwal|nvoN~rF7hH11H8;e$<&JwEc;x@!nHOG3ko<{<-@bqU0PXvLivR!s delta 442 zcmWm9RZao`007Y01$K8gDuUhJid|T!;4vI?^B``XfXz#ID4!qi056^S%1QJ7k(J4g z1q0zwDj9i-B%+C#iO+a2n;de5^4sHKj28fc`6W?E>a zjdnWdq>FBP=%tT-1{h?BVM2^B${1nBi4f)gGszUw%rMIw^DMB)63eWx${Oozu*nwN w?6Auo`y6n{5iyQA;gmDZx!{s3uDRisICtFhz#~s2c;&2 + exit 1 + fi + + local REAL_NAME + REAL_NAME="$(basename "$REAL_FILE")" + local SONAME="${REAL_NAME%.*}" + + echo "" + echo "=== Creating SDL3 symlinks in $LIB_DIR ===" + echo " $SONAME -> $REAL_NAME" + echo " libSDL3.so -> $SONAME" + + ln -sf "$REAL_NAME" "$LIB_DIR/$SONAME" + ln -sf "$SONAME" "$LIB_DIR/libSDL3.so" + + echo "=== Done ===" +} + # Install build dependencies if needed (Debian 12 bookworm) echo "Checking build dependencies..." sudo apt-get update -qq @@ -50,4 +76,9 @@ sudo apt-get install -y --no-install-recommends \ libgl1-mesa-dev build_sdl "dynamic" -build_sdl "static" \ No newline at end of file +build_sdl "static" + +# Always recreate symlinks regardless of whether the build was a no-op. +# cmake --install does not preserve symlinks and Ninja may skip the build +# entirely if sources are unchanged, leaving the lib directory without them. +create_dynamic_symlinks \ No newline at end of file