Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,16 @@ jobs:
g++-14
clang-18
ccache
libsdl2-dev
libsdl2-image-dev
libsdl2-mixer-dev
libglew-dev
zlib1g-dev
libpng-dev
libasound2-dev
libpulse-dev
libpipewire-0.3-dev
libwayland-dev
wayland-protocols
libxkbcommon-dev
libdecor-0-dev
- name: restore ccache
uses: actions/cache@v5
with:
Expand Down Expand Up @@ -198,15 +202,9 @@ jobs:
make
unzip
mingw-w64-x86_64-toolchain
mingw-w64-x86_64-SDL2
mingw-w64-x86_64-SDL2_image
mingw-w64-x86_64-SDL2_mixer
mingw-w64-x86_64-glew
mingw-w64-x86_64-smpeg2
mingw-w64-x86_64-libmodplug
mingw-w64-x86_64-zlib
mingw-w64-x86_64-libpng
mingw-w64-x86_64-readline
mingw-w64-x86_64-ccache
- name: restore ccache
uses: actions/cache@v5
Expand Down
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,9 @@
[submodule "libs/asio"]
path = libs/asio
url = https://github.com/chriskohlhoff/asio.git
[submodule "libs/sdl3"]
path = libs/sdl3
url = https://github.com/libsdl-org/SDL.git
[submodule "libs/sdl3_mixer"]
path = libs/sdl3_mixer
url = https://github.com/libsdl-org/SDL_mixer.git
133 changes: 21 additions & 112 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,20 @@ set(JSON_BuildTests OFF CACHE INTERNAL "")
set(JSON_Install OFF CACHE INTERNAL "")
add_subdirectory("libs/json")

set(SDL_STATIC ON CACHE BOOL "" FORCE)
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE)
set(SDL_OPENGLES OFF CACHE BOOL "" FORCE)
add_subdirectory("libs/sdl3")

set(SDL3MIXER_VENDORED ON CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
# SDL3_mixer's CMakeLists sets CMAKE_POSITION_INDEPENDENT_CODE ON in the cache
# via option(), which leaks into all targets. We don't need PIC for our static
# libraries or executables, so force it off after SDL3_mixer is configured.
add_subdirectory("libs/sdl3_mixer")
set(CMAKE_POSITION_INDEPENDENT_CODE OFF CACHE BOOL "" FORCE)

function(find_windows_dll var dll)
if(WIN32)
find_program(${var} ${dll})
Expand Down Expand Up @@ -100,17 +114,7 @@ if(MSVC)
set(GLEW_LIBRARIES "${CMAKE_SOURCE_DIR}/libs/_msvc/glew-2.1.0/lib/Release/x64/glew32.lib")
set(GLEW_INCLUDE_DIRS "libs/_msvc/glew-2.1.0/include")

set(SDL2_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2-2.0.7/lib/x64/SDL2.dll")
set(SDL2_LIBRARY "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2-2.0.7/lib/x64/SDL2.lib;${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2-2.0.7/lib/x64/SDL2main.lib")
set(SDL2_INCLUDE_DIR "libs/_msvc/SDL2-2.0.7/include")

set(SDL2_IMAGE_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2_image-2.0.2/lib/x64/SDL2_image.dll")
set(SDL2_IMAGE_LIBRARIES "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2_image-2.0.2/lib/x64/SDL2_image.lib")
set(SDL2_IMAGE_INCLUDE_DIRS "libs/_msvc/SDL2_image-2.0.2/include")

set(SDL2_MIXER_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2_mixer-2.0.2/lib/x64/SDL2_mixer.dll")
set(SDL2_MIXER_LIBRARIES "${CMAKE_SOURCE_DIR}/libs/_msvc/SDL2_mixer-2.0.2/lib/x64/SDL2_mixer.lib")
set(SDL2_MIXER_INCLUDE_DIRS "libs/_msvc/SDL2_mixer-2.0.2/include")
# SDL3 and SDL3_mixer built from submodules above

set(ZLIB_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/zlib-1.2.11/lib/zlib1.dll")
set(ZLIB_LIBRARIES "${CMAKE_SOURCE_DIR}/libs/_msvc/zlib-1.2.11/lib/zdll.lib")
Expand All @@ -120,15 +124,6 @@ if(MSVC)
set(PNG_LIBRARIES "${CMAKE_SOURCE_DIR}/libs/_msvc/lpng1634/lib/libpng16-16.lib")
set(PNG_INCLUDE_DIRS "libs/_msvc/lpng1634/include")

set(FLAC_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libFLAC-8.dll")
set(JPEG_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libjpeg-9.dll")
set(MPG_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libmpg123-0.dll")
set(OGG_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libogg-0.dll")
set(TIFF_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libtiff-5.dll")
set(LZMA_DLL "LZMA_DLL-NOTFOUND") # bundled libtiff doesn't depend on liblzma
set(VORBIS_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libvorbis-0.dll")
set(VORBISFILE_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libvorbisfile-3.dll")
set(WEBP_DLL "${CMAKE_SOURCE_DIR}/libs/_msvc/extras/libwebp-7.dll")
else()
if(EXISTS "${CMAKE_SOURCE_DIR}/libs/_protobuf-install/lib/libprotobuf.a")
set(Protobuf_LIBRARY "${CMAKE_SOURCE_DIR}/libs/_protobuf-install/lib/libprotobuf.a")
Expand All @@ -147,52 +142,13 @@ else()
find_package(GLEW REQUIRED)
find_windows_dll(GLEW_DLL "glew32.dll")

find_package(SDL2 REQUIRED)
find_windows_dll(SDL2_DLL "SDL2.dll")
find_package(SDL2_image REQUIRED)
find_windows_dll(SDL2_IMAGE_DLL "SDL2_image.dll")
find_package(SDL2_mixer REQUIRED)
find_windows_dll(SDL2_MIXER_DLL "SDL2_mixer.dll")
# SDL3 and SDL3_mixer built from submodules above

find_package(ZLIB REQUIRED)
find_windows_dll(ZLIB_DLL "zlib1.dll")
find_package(PNG REQUIRED)
find_windows_dll(PNG_DLL "libpng16-16.dll")

find_windows_dll(FLAC_DLL "libFLAC.dll")
find_windows_dll(JBIG_DLL "libjbig-0.dll")
find_windows_dll(LERC_DLL "libLerc.dll")
find_windows_dll(SHARPYUV_DLL "libsharpyuv-0.dll")
find_windows_dll(JPEG_DLL "libjpeg-8.dll")
find_windows_dll(MPG_DLL "libmpg123-0.dll")
find_windows_dll(OGG_DLL "libogg-0.dll")
find_windows_dll(TIFF_DLL "libtiff-6.dll")
find_windows_dll(LZMA_DLL "liblzma-5.dll")
find_windows_dll(VORBIS_DLL "libvorbis-0.dll")
find_windows_dll(VORBISFILE_DLL "libvorbisfile-3.dll")
find_windows_dll(WEBP_DLL "libwebp-7.dll")
find_windows_dll(ZSTD_DLL "libzstd.dll")
find_windows_dll(MODPLUG_DLL "libmodplug-1.dll")
find_windows_dll(OPUSFILE_DLL "libopusfile-0.dll")
find_windows_dll(OPUS_DLL "libopus-0.dll")
find_windows_dll(READLINE_DLL "libreadline8.dll")
find_windows_dll(SNDFILE_DLL "libsndfile-1.dll")
find_windows_dll(VORBISENC_DLL "libvorbisenc-2.dll")
find_windows_dll(TERMCAP_DLL "libtermcap-0.dll")
find_windows_dll(GLIB2_DLL "libglib-2.0-0.dll")
find_windows_dll(GMODULE2_DLL "libgmodule-2.0-0.dll")
find_windows_dll(STDC++_DLL "libstdc++-6.dll")
find_windows_dll(GCC_S_SEH_DLL "libgcc_s_seh-1.dll")
find_windows_dll(WINPTHREAD_DLL "libwinpthread-1.dll")
find_windows_dll(INTL_DLL "libintl-8.dll")
find_windows_dll(ICONV_DLL "libiconv-2.dll")
find_windows_dll(DEFLATE_DLL "libdeflate.dll")
find_windows_dll(JXL_DLL "libjxl.dll")
find_windows_dll(BROTLIENC_DLL "libbrotlienc.dll")
find_windows_dll(BROTLIDEC_DLL "libbrotlidec.dll")
find_windows_dll(BROTLICOMMON_DLL "libbrotlicommon.dll")
find_windows_dll(HWY_DLL "libhwy.dll")
find_windows_dll(LCMS2_DLL "liblcms2-2.dll")
endif()

set(Protobuf_USE_STATIC_LIBS ON)
Expand All @@ -207,8 +163,8 @@ file(GLOB IMGUI_SOURCE_FILES
)

set(IMGUI_IMPL_FILES
${PROJECT_SOURCE_DIR}/libs/imgui/examples/imgui_impl_sdl.cpp
${PROJECT_SOURCE_DIR}/libs/imgui/examples/imgui_impl_opengl3.cpp
${PROJECT_SOURCE_DIR}/libs/imgui/backends/imgui_impl_sdl3.cpp
${PROJECT_SOURCE_DIR}/libs/imgui/backends/imgui_impl_opengl3.cpp
)

set(SOURCE_FILES
Expand Down Expand Up @@ -489,8 +445,6 @@ set(SOURCE_FILES
src/rwe/sdl/SdlContextManager.cpp
src/rwe/sdl/SdlContextManager.h
src/rwe/sdl/SdlException.h
src/rwe/sdl/SdlImageContext.h
src/rwe/sdl/SdlImageException.h
src/rwe/sdl/SdlMixerContext.h
src/rwe/sdl/SdlMixerException.h
src/rwe/sim/Energy.cpp
Expand Down Expand Up @@ -662,60 +616,15 @@ else()
target_include_directories(librwe PUBLIC ${GLEW_INCLUDE_DIRS})
endif()

target_copy_file(librwe ${SDL2_DLL})
target_link_libraries(librwe ${SDL2_LIBRARY})
target_include_directories(librwe PUBLIC ${SDL2_INCLUDE_DIR})

target_copy_file(librwe ${SDL2_IMAGE_DLL})
target_link_libraries(librwe ${SDL2_IMAGE_LIBRARIES})
target_include_directories(librwe PUBLIC ${SDL2_IMAGE_INCLUDE_DIRS})

target_copy_file(librwe ${SDL2_MIXER_DLL})
target_link_libraries(librwe ${SDL2_MIXER_LIBRARIES})
target_include_directories(librwe PUBLIC ${SDL2_MIXER_INCLUDE_DIRS})
target_link_libraries(librwe SDL3::SDL3-static)
target_link_libraries(librwe SDL3_mixer::SDL3_mixer)

target_copy_file(librwe ${ZLIB_DLL})
target_link_libraries(librwe ${ZLIB_LIBRARIES})
target_include_directories(librwe PUBLIC ${ZLIB_INCLUDE_DIRS})

target_copy_file(librwe ${PNG_DLL})

target_copy_file(librwe ${FLAC_DLL})
target_copy_file(librwe ${JPEG_DLL})
target_copy_file(librwe ${MPG_DLL})
target_copy_file(librwe ${OGG_DLL})
target_copy_file(librwe ${TIFF_DLL})
if(WIN32 AND NOT MSVC)
target_copy_file(librwe ${LZMA_DLL}) # MSYS2 libtiff depends on liblzma
target_copy_file(librwe ${ZSTD_DLL}) # MSYS2 libtiff depends on zstd
target_copy_file(librwe ${DEFLATE_DLL}) # MSYS2 libtiff depends on deflate
target_copy_file(librwe ${JXL_DLL}) # MSYS2 SDL2_image depends on jxl
target_copy_file(librwe ${BROTLIENC_DLL})
target_copy_file(librwe ${BROTLIDEC_DLL})
target_copy_file(librwe ${BROTLICOMMON_DLL})
target_copy_file(librwe ${HWY_DLL})
target_copy_file(librwe ${LCMS2_DLL})
target_copy_file(librwe ${MODPLUG_DLL}) # MSYS2 SDL2_mixer depends on modplug
target_copy_file(librwe ${OPUSFILE_DLL}) # MSYS2 SDL2_mixer depends on opusfile
target_copy_file(librwe ${JBIG_DLL}) # MSYS2 SDL2_image depends on jbig
target_copy_file(librwe ${LERC_DLL}) # MSYS2 SDL2_image depends on Lerc
target_copy_file(librwe ${SHARPYUV_DLL}) # MSYS2 SDL2_image libwebp depends on sharpyuv
target_copy_file(librwe ${OPUS_DLL})
target_copy_file(librwe ${READLINE_DLL})
target_copy_file(librwe ${SNDFILE_DLL})
target_copy_file(librwe ${VORBISENC_DLL})
target_copy_file(librwe ${TERMCAP_DLL})
target_copy_file(librwe ${GLIB2_DLL})
target_copy_file(librwe ${GMODULE2_DLL})
target_copy_file(librwe ${STDC++_DLL})
target_copy_file(librwe ${GCC_S_SEH_DLL})
target_copy_file(librwe ${WINPTHREAD_DLL})
target_copy_file(librwe ${INTL_DLL})
target_copy_file(librwe ${ICONV_DLL})
endif()
target_copy_file(librwe ${VORBIS_DLL})
target_copy_file(librwe ${VORBISFILE_DLL})
target_copy_file(librwe ${WEBP_DLL})

if(TARGET protobuf::libprotobuf)
message(STATUS "Using protobuf::libprotobuf imported target")
Expand All @@ -738,7 +647,7 @@ target_include_directories(librwe PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) # for gene
target_link_libraries(librwe nlohmann_json::nlohmann_json)

target_include_directories(librwe PUBLIC ${PROJECT_SOURCE_DIR}/libs/imgui)
target_include_directories(librwe PUBLIC ${PROJECT_SOURCE_DIR}/libs/imgui/examples)
target_include_directories(librwe PUBLIC ${PROJECT_SOURCE_DIR}/libs/imgui/backends)

add_custom_command(TARGET librwe PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/shaders" "$<TARGET_FILE_DIR:librwe>/shaders")
Expand Down
20 changes: 16 additions & 4 deletions devbox.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,27 @@
"packages": [
"cmake",
"protobuf",
"SDL2",
"SDL2_image",
"SDL2_mixer",
"glew",
"libpng",
"zlib",
"pkg-config",
"git",
"libX11.dev"
"libX11.dev",
"libxext",
"libXi",
"libXfixes",
"libxrandr",
"libXScrnSaver",
"libXcursor",
"libXtst",
"libxcb",
"alsa-lib",
"pipewire",
"pulseaudio",
"wayland",
"wayland-protocols",
"libxkbcommon",
"libdecor"
],
"shell": {
"init_hook": [
Expand Down
Loading
Loading