Fix up CI builds to build with SDL3

Adds a new CMake option to build with a vendored copy of the latest version of SDL3, which gets downloaded during configuration.
This commit is contained in:
ROllerozxa 2026-06-18 00:04:03 +02:00
commit 73f0dd1195
11 changed files with 107 additions and 30 deletions

View file

@ -30,10 +30,10 @@ jobs:
- name: Install deps
run: |
apt-get update
apt-get install -y clang-16 libgtk-3-dev libgl-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libfreetype6-dev cmake ninja-build desktop-file-utils ca-certificates wget file --no-install-recommends
wget https://github.com/principia-game/linux-deps/releases/download/latest/deps.tar.gz -O linux-deps.tar.gz
tar -xaf linux-deps.tar.gz -C /
apt-get install -y \
clang-16 libgtk-3-dev libgl-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libfreetype6-dev cmake ninja-build desktop-file-utils ca-certificates wget file \
libasound2-dev libpulse-dev libjack-dev libsndio-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libpipewire-0.3-dev libwayland-dev libdecor-0 liburing-dev \
--no-install-recommends
- name: Build
run: |

View file

@ -18,14 +18,14 @@ on:
jobs:
linux_ss:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Install deps
run: |
sudo apt-get update
sudo apt-get install -y g++ libgl-dev libpng-dev libjpeg-dev libfreetype6-dev libsdl2-dev cmake ninja-build --no-install-recommends
sudo apt-get install -y g++ libgl-dev libpng-dev libjpeg-dev libfreetype6-dev libsdl3-dev cmake ninja-build --no-install-recommends
- name: Build
run: |

View file

@ -29,7 +29,7 @@ jobs:
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
brew update --auto-update
brew install cmake ninja libpng libjpeg-turbo freetype sdl2 gtk+3
brew install cmake ninja libpng libjpeg-turbo freetype sdl3 gtk+3
- name: Compile
run: |

View file

@ -35,7 +35,7 @@ jobs:
- name: Build
run: |
mkdir build; cd build
emcmake cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX=
emcmake cmake .. -G Ninja -DCMAKE_INSTALL_PREFIX= -DUSE_VENDORED_SDL3=ON
ninja
DESTDIR=../web ninja install

View file

@ -41,7 +41,7 @@ jobs:
gtk3:p
libpng:p
libjpeg-turbo:p
SDL2:p
SDL3:p
nsis:p
7zip:p

View file

@ -15,6 +15,8 @@ endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(DownloadLib)
add_custom_target(GenerateGitVersion
COMMAND ${CMAKE_COMMAND}
-D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
@ -25,18 +27,21 @@ add_custom_target(GenerateGitVersion
option(UNITY_BUILD "Experimental unity build" FALSE)
mark_as_advanced(UNITY_BUILD)
option(USE_VENDORED_SDL3 "Build with vendored SDL3 library" FALSE)
# Find core dependencies
# ----------------------
if(USE_VENDORED_SDL3)
include(cmake/SDL.cmake)
else()
find_package(SDL3 REQUIRED)
endif()
if(ANDROID)
cmake_minimum_required(VERSION 3.20)
include(PrincipiaAndroidLibs)
else()
if(NOT EMSCRIPTEN)
find_package(SDL3 REQUIRED)
endif()
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
endif()
@ -230,8 +235,6 @@ if(NOT EMSCRIPTEN)
PNG::PNG
ZLIB::ZLIB)
list(APPEND LIBS SDL3::SDL3)
if(NOT SCREENSHOT_BUILD AND NOT EMSCRIPTEN)
list(APPEND LIBS ${CURL_LIBRARIES})
@ -241,6 +244,8 @@ if(NOT EMSCRIPTEN)
endif()
endif()
list(APPEND LIBS SDL3::SDL3)
if(SHOULD_USE_GLES)
list(APPEND LIBS GLESv2)
else()
@ -289,7 +294,7 @@ set(COMMON_FLAGS "-fno-math-errno -fno-trapping-math -fno-signed-zeros")
if(EMSCRIPTEN)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "--preload-file ../data/")
set(LIBRARY_FLAGS "-sUSE_FREETYPE=1 -sUSE_LIBJPEG=1 -sUSE_LIBPNG=1 -sUSE_ZLIB=1 -sUSE_SDL=2 -pthread")
set(LIBRARY_FLAGS "-sUSE_FREETYPE=1 -sUSE_LIBJPEG=1 -sUSE_LIBPNG=1 -sUSE_ZLIB=1 -pthread")
string(APPEND COMMON_FLAGS " ${LIBRARY_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS " ${LIBRARY_FLAGS} -pthread -sPTHREAD_POOL_SIZE=20 -sINITIAL_MEMORY=2013265920 -sALLOW_MEMORY_GROWTH=1 -sTOTAL_STACK=16Mb -sFETCH=1")
endif()

View file

@ -16,9 +16,7 @@ android {
versionName "2026.06.06"
externalNativeBuild {
ndkBuild {
arguments '-j' + Runtime.getRuntime().availableProcessors()
}
cmake.arguments "-DUSE_VENDORED_SDL3=1"
}
ndk {

View file

@ -0,0 +1,51 @@
function(download_dep_tarball depname version url sha256)
set(lib_path "${CMAKE_SOURCE_DIR}/lib")
get_filename_component(filename "${url}" NAME)
set(download_path "${lib_path}/${depname}-${filename}")
set(dep_path "${lib_path}/${depname}")
set(ver_file "${dep_path}/.download_version")
if(EXISTS "${ver_file}")
file(READ "${ver_file}" current_version)
if("${current_version}" STREQUAL "${version}")
# up to date
return()
endif()
# outdated, redownload
file(REMOVE_RECURSE "${dep_path}")
endif()
file(MAKE_DIRECTORY "${dep_path}")
message(STATUS "Downloading ${depname} ${version}")
file(DOWNLOAD "${url}" "${download_path}" STATUS status)
list(GET status 0 status_code)
if(NOT status_code EQUAL 0)
message(FATAL_ERROR "Failed to download ${depname}, status: ${status}")
endif()
# Verify SHA256 checksum if provided
if(NOT sha256 STREQUAL "SKIP")
file(SHA256 "${download_path}" downloaded_sha256)
if(NOT "${downloaded_sha256}" STREQUAL "${sha256}")
message(FATAL_ERROR "SHA256 checksum mismatch for ${depname}!\n Expected: ${sha256}\n Got: ${downloaded_sha256}")
endif()
endif()
message(STATUS "Extracting...")
execute_process(
COMMAND tar -xzf "${download_path}" --strip-components=1
WORKING_DIRECTORY "${dep_path}"
RESULT_VARIABLE extract_result)
if(NOT extract_result EQUAL 0)
message(FATAL_ERROR "Failed to extract ${depname}")
endif()
file(WRITE "${ver_file}" "${version}")
endfunction()

View file

@ -9,9 +9,3 @@ set(JPEG_INCLUDE_DIR ${DEPS}/libjpeg/include)
set(JPEG_LIBRARY ${DEPS}/libjpeg/libjpeg.a)
set(PNG_PNG_INCLUDE_DIR ${DEPS}/libpng/include) #what
set(PNG_LIBRARY ${DEPS}/libpng/libpng.a)
add_library(SDL2::SDL2 STATIC IMPORTED)
set_target_properties(SDL2::SDL2 PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${DEPS}/SDL2/include/SDL2
IMPORTED_LOCATION ${DEPS}/SDL2/libSDL2.a)

32
cmake/SDL.cmake Normal file
View file

@ -0,0 +1,32 @@
set(DEP_SDL_VER "3.4.10")
download_dep_tarball(
"SDL"
"${DEP_SDL_VER}"
"https://github.com/libsdl-org/SDL/releases/download/release-${DEP_SDL_VER}/SDL3-${DEP_SDL_VER}.tar.gz"
"12b34280415ec8418c864408b93d008a20a6530687ee613d60bfbd20411f2785"
)
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
set(SDL_STATIC ON CACHE BOOL "" FORCE)
set(DISABLED_FEATURES CAMERA GPU HAPTIC POWER RENDER SENSOR TESTS VULKAN)
foreach(feature ${DISABLED_FEATURES})
set(SDL_${feature} OFF CACHE BOOL "" FORCE)
endforeach()
if(ANDROID OR HAIKU)
enable_language(CXX)
endif()
if(HAIKU)
add_definitions(-fPIC)
endif()
if(EMSCRIPTEN)
set(SDL_PTHREADS ON CACHE BOOL "" FORCE)
endif()
add_definitions(-DSDL_LEAN_AND_MEAN=1)
add_subdirectory(lib/SDL EXCLUDE_FROM_ALL)

View file

@ -16,7 +16,7 @@ fi
rm -rf AppDir
# Compile
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=AppDir/usr/
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=AppDir/usr/ -DUSE_VENDORED_SDL3=ON
ninja
# Strip binary and create debug symbol file
@ -79,9 +79,6 @@ for i in "${INCLUDE_LIBS[@]}"; do
cp /usr/lib/x86_64-linux-gnu/$i usr/lib/
done
# Copy our own built SDL2
cp /usr/lib/libSDL2-2.0.so.0 usr/lib/
# Actually build the appimage
cd ..
ARCH=x86_64 ./appimagetool --appimage-extract-and-run AppDir/