Browse Source

CMake: Add SDL3_mixer

Requires a not-yet-released SDL 3.4.0.

I tried implementing audio with plain SDL and it's too complicated.
pull/8228/head
Gleb Mazovetskiy 5 months ago
parent
commit
db9404dcf6
  1. 4
      3rdParty/SDL3/CMakeLists.txt
  2. 33
      3rdParty/SDL3_mixer/CMakeLists.txt
  3. 44
      CMake/Dependencies.cmake
  4. 6
      Source/CMakeLists.txt
  5. 1
      Source/diablo.cpp
  6. 1
      Source/engine/dx.cpp
  7. 4
      Source/gamemenu.cpp

4
3rdParty/SDL3/CMakeLists.txt vendored

@ -16,7 +16,7 @@ include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
FetchContent_Declare(SDL3
URL https://github.com/libsdl-org/SDL/releases/download/release-3.2.24/SDL3-3.2.24.tar.gz
URL_HASH SHA256=81cc0fc17e5bf2c1754eeca9af9c47a76789ac5efdd165b3b91cbbe4b90bfb76
URL https://github.com/libsdl-org/SDL/archive/02c4478f9364ac9ba8c0b157c01e47c2f059552c.tar.gz
URL_HASH SHA256=1c8e9369ef6c67b6ca4102cc957846966815de56924b24a8a28feeac344a506a
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL3)

33
3rdParty/SDL3_mixer/CMakeLists.txt vendored

@ -0,0 +1,33 @@
include(functions/dependency_options)
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
if(DEVILUTIONX_STATIC_SDL_MIXER)
set(BUILD_SHARED_LIBS OFF)
else()
set(BUILD_SHARED_LIBS ON)
endif()
set(SDLMIXER_AIFF OFF)
set(SDLMIXER_WAVE ON)
set(SDLMIXER_VOC OFF)
set(SDLMIXER_AU OFF)
set(SDLMIXER_FLAC_LIBFLAC OFF)
set(SDLMIXER_FLAC_DRFLAC OFF)
set(SDLMIXER_GME OFF)
set(SDLMIXER_MOD_XMP OFF)
set(SDLMIXER_MP3_DRMP3 ON)
set(SDLMIXER_MP3_MPG123 OFF)
set(SDLMIXER_MIDI_FLUIDSYNTH OFF)
set(SDLMIXER_MIDI_TIMIDITY OFF)
set(SDLMIXER_OPUS OFF)
set(SDLMIXER_VORBIS_STB OFF)
set(SDLMIXER_VORBIS_VORBISFILE OFF)
set(SDLMIXER_VORBIS_TREMOR OFF)
set(SDLMIXER_WAVPACK OFF)
FetchContent_Declare_ExcludeFromAll(SDL_mixer
URL https://github.com/libsdl-org/SDL_mixer/archive/4b4b05949208ad0a49832ed34f59beeae6d6c2da.tar.gz
URL_HASH SHA256=744bbe25e127121a87b070f9211794b38e71db7e6ea497757bf45ac85525a905
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_mixer)

44
CMake/Dependencies.cmake

@ -66,7 +66,7 @@ elseif(USE_SDL1)
elseif(USE_SDL3)
dependency_options("SDL3" DEVILUTIONX_SYSTEM_SDL3 ON DEVILUTIONX_STATIC_SDL3)
if(DEVILUTIONX_SYSTEM_SDL3)
find_package(SDL3 3.2.0 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
find_package(SDL3 3.4.0 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
else()
add_subdirectory(3rdParty/SDL3)
endif()
@ -195,21 +195,39 @@ else()
add_subdirectory(3rdParty/libfmt)
endif()
if(NOT NOSOUND AND NOT USE_SDL3)
if(NOT DEFINED DEVILUTIONX_SYSTEM_SDL_AUDIOLIB)
find_package(SDL_audiolib QUIET)
if(SDL_audiolib_FOUND)
message("-- Found SDL_audiolib")
if(NOT NOSOUND)
if(USE_SDL3)
if(NOT DEFINED DEVILUTIONX_SYSTEM_SDL_MIXER)
find_package(SDL3_mixer QUIET CONFIG)
if(SDL3_mixer_FOUND)
message("-- Found SDL3_mixer")
else()
message("-- Suitable system SDL3_mixer package not found, will use SDL3_mixer from source")
set(DEVILUTIONX_SYSTEM_SDL_MIXER OFF)
endif()
endif()
dependency_options("SDL3_mixer" DEVILUTIONX_SYSTEM_SDL_MIXER ON DEVILUTIONX_STATIC_SDL_MIXER)
if(DEVILUTIONX_SYSTEM_SDL_MIXER)
find_package(SDL3_mixer REQUIRED CONFIG)
else()
message("-- Suitable system SDL_audiolib package not found, will use SDL_audiolib from source")
set(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB OFF)
add_subdirectory(3rdParty/SDL3_mixer)
endif()
endif()
dependency_options("SDL_audiolib" DEVILUTIONX_SYSTEM_SDL_AUDIOLIB ON DEVILUTIONX_STATIC_SDL_AUDIOLIB)
if(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB)
find_package(SDL_audiolib REQUIRED)
else()
add_subdirectory(3rdParty/SDL_audiolib)
if(NOT DEFINED DEVILUTIONX_SYSTEM_SDL_AUDIOLIB)
find_package(SDL_audiolib QUIET)
if(SDL_audiolib_FOUND)
message("-- Found SDL_audiolib")
else()
message("-- Suitable system SDL_audiolib package not found, will use SDL_audiolib from source")
set(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB OFF)
endif()
endif()
dependency_options("SDL_audiolib" DEVILUTIONX_SYSTEM_SDL_AUDIOLIB ON DEVILUTIONX_STATIC_SDL_AUDIOLIB)
if(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB)
find_package(SDL_audiolib REQUIRED)
else()
add_subdirectory(3rdParty/SDL_audiolib)
endif()
endif()
endif()

6
Source/CMakeLists.txt

@ -747,7 +747,11 @@ else()
engine/sound.cpp
utils/soundsample.cpp
)
if(NOT USE_SDL3)
if(USE_SDL3)
target_link_dependencies(libdevilutionx_sound PUBLIC
SDL3_mixer::SDL3_mixer
)
else()
target_sources(libdevilutionx_sound PRIVATE
utils/push_aulib_decoder.cpp)
target_link_dependencies(libdevilutionx_sound PUBLIC

1
Source/diablo.cpp

@ -9,6 +9,7 @@
#ifdef USE_SDL3
#include <SDL3/SDL_events.h>
#include <SDL3/SDL_init.h>
#include <SDL3/SDL_keycode.h>
#else
#include <SDL.h>

1
Source/engine/dx.cpp

@ -11,6 +11,7 @@
#include <SDL3/SDL_rect.h>
#include <SDL3/SDL_render.h>
#include <SDL3/SDL_surface.h>
#include <SDL3/SDL_timer.h>
#include <SDL3/SDL_video.h>
#else
#include <SDL.h>

4
Source/gamemenu.cpp

@ -5,6 +5,10 @@
*/
#include "gamemenu.h"
#ifdef USE_SDL3
#include <SDL3/SDL_timer.h>
#endif
#include "cursor.h"
#include "diablo_msg.hpp"
#include "engine/backbuffer_state.hpp"

Loading…
Cancel
Save