Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add SDL3 support #3339

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
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
107 changes: 67 additions & 40 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16...3.28 FATAL_ERROR)
cmake_minimum_required(VERSION 3.16...3.31 FATAL_ERROR)

project(EasyRPG_Player VERSION 0.8
DESCRIPTION "Interpreter for RPG Maker 2000/2003 games"
Expand Down Expand Up @@ -556,16 +556,14 @@ elseif(VITA)
set(PLAYER_TARGET_PLATFORM "psvita" CACHE STRING "Platform to compile for.")
elseif(NINTENDO_WII)
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1")
set(PLAYER_AUDIO_BACKEND "AESND" CACHE STRING "Audio system to use. Options: SDL2 SDL1 AESND OFF")
set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1)
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 SDL1 AESND)
elseif(NINTENDO_WIIU)
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for.")
elseif(AMIGA)
set(PLAYER_TARGET_PLATFORM "SDL1" CACHE STRING "Platform to compile for.")
else()
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1 libretro")
set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1 libretro)
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL3 SDL2 SDL1 libretro")
set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL3 SDL2 SDL1 libretro)
endif()
set(PLAYER_BUILD_EXECUTABLE ON)
set(PLAYER_TEST_LIBRARIES ${PROJECT_NAME})
Expand All @@ -579,7 +577,20 @@ if(ANDROID AND PLAYER_GRADLE_BUILD)
endforeach(f)
endif()

if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
if(PLAYER_TARGET_PLATFORM STREQUAL "SDL3")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/sdl/sdl3_ui.cpp
src/platform/sdl/sdl3_ui.h)
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=3)

player_find_package(NAME SDL3
TARGET SDL3::SDL3
REQUIRED)

if(ANDROID)
set(PLAYER_BUILD_EXECUTABLE OFF)
endif()
elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL2")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/sdl/sdl2_ui.cpp
src/platform/sdl/sdl2_ui.h)
Expand Down Expand Up @@ -613,7 +624,7 @@ if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
if(WIN32)
target_link_libraries(${PROJECT_NAME} "Dwmapi")
endif()
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL1")
if(NINTENDO_WII)
find_package(SDL REQUIRED)
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO)
Expand All @@ -633,12 +644,12 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
USE_SDL=1
EASYRPG_CONFIG_NAME="config_sdl1.ini"
)
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro")
elseif(PLAYER_TARGET_PLATFORM STREQUAL "libretro")
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=LibretroUi USE_LIBRETRO=1)
set(PLAYER_BUILD_EXECUTABLE OFF)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/builds/libretro)
target_link_libraries(${PROJECT_NAME} retro_common)
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "3ds")
elseif(PLAYER_TARGET_PLATFORM STREQUAL "3ds")
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=CtrUi PLAYER_NINTENDO)
target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after devkitarm ships newer gcc
# generate gfx assets
Expand Down Expand Up @@ -667,7 +678,7 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "3ds")
src/platform/3ds/ui.cpp
src/platform/3ds/ui.h)
target_link_libraries(${PROJECT_NAME} 3ds-assets)
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "psvita")
elseif(PLAYER_TARGET_PLATFORM STREQUAL "psvita")
include("$ENV{VITASDK}/share/vita.cmake" REQUIRED)
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=Psp2Ui)
target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after vitasdk ships newer gcc
Expand All @@ -678,7 +689,7 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "psvita")
src/platform/psvita/input_buttons.cpp
src/platform/psvita/ui.cpp
src/platform/psvita/ui.h)
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "switch")
elseif(PLAYER_TARGET_PLATFORM STREQUAL "switch")
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=NxUi PLAYER_NINTENDO)
find_package(OpenGL CONFIG REQUIRED)
find_library(GLAD glad REQUIRED)
Expand All @@ -701,44 +712,60 @@ else()
endif()

# Sound system to use
if(PLAYER_AUDIO_BACKEND)
# already set earlier in the platform config
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
set(PLAYER_AUDIO_BACKEND "SDL2" CACHE STRING "Audio system to use. Options: SDL2 OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 OFF)

if(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL2_mixer")
message(FATAL_ERROR "SDL2_mixer is not supported anymore. Use SDL2 instead.")
if(PLAYER_TARGET_PLATFORM STREQUAL "SDL3")
set(PLAYER_AUDIO_BACKEND "SDL3" CACHE STRING "Audio system to use. Options: SDL3 OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL3 OFF)
elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL2")
if(NINTENDO_WII)
set(PLAYER_AUDIO_BACKEND "SDL2" CACHE STRING "Audio system to use. Options: SDL2 AESND OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 AESND)
else()
set(PLAYER_AUDIO_BACKEND "SDL2" CACHE STRING "Audio system to use. Options: SDL2 OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 OFF)
endif()
elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL1")
if(NINTENDO_WII)
set(PLAYER_AUDIO_BACKEND "AESND" CACHE STRING "Audio system to use. Options: SDL1 AESND OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 AESND)
else()
set(PLAYER_AUDIO_BACKEND "SDL1" CACHE STRING "Audio system to use. Options: SDL1 OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 OFF)
endif()
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
set(PLAYER_AUDIO_BACKEND "SDL1" CACHE STRING "Audio system to use. Options: SDL1 OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 OFF)
else()
# Assuming that all platforms not targeting SDL have only one audio backend
set(PLAYER_AUDIO_BACKEND ${PLAYER_TARGET_PLATFORM} CACHE STRING "Audio system to use. Options: ${PLAYER_TARGET_PLATFORM} OFF")
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS ${PLAYER_TARGET_PLATFORM} OFF)
endif()

set(PLAYER_HAS_AUDIO ON)
if(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL1")
if(PLAYER_AUDIO_BACKEND STREQUAL "SDL3")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/sdl/sdl_audio.cpp
src/platform/sdl/sdl_audio.h)
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL2")
src/platform/sdl/sdl3_audio.cpp
src/platform/sdl/sdl3_audio.h)
elseif(PLAYER_AUDIO_BACKEND STREQUAL "SDL2")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/sdl/sdl2_audio.cpp
src/platform/sdl/sdl2_audio.h)
elseif(PLAYER_AUDIO_BACKEND STREQUAL "SDL1")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/sdl/sdl_audio.cpp
src/platform/sdl/sdl_audio.h)
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL "AESND")
elseif(PLAYER_AUDIO_BACKEND STREQUAL "AESND")
target_sources(${PROJECT_NAME} PRIVATE
src/platform/wii/audio.cpp
src/platform/wii/audio.h)
target_compile_definitions(${PROJECT_NAME} PUBLIC AUDIO_AESND=1)
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL ${PLAYER_TARGET_PLATFORM})
elseif(PLAYER_AUDIO_BACKEND STREQUAL ${PLAYER_TARGET_PLATFORM})

elseif(${PLAYER_AUDIO_BACKED} STREQUAL "OFF")
elseif(PLAYER_AUDIO_BACKEND STREQUAL "OFF")
Ghabry marked this conversation as resolved.
Show resolved Hide resolved
set(PLAYER_HAS_AUDIO OFF)
else()
message(FATAL_ERROR "Invalid Audio Backend ${PLAYER_AUDIO_BACKEND}")
message(FATAL_ERROR "Invalid Audio Backend ${PLAYER_AUDIO_BACKEND}\nOptions: ${AUDIO_PROP}")
endif()

get_property(AUDIO_PROP CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS)
if(NOT PLAYER_AUDIO_BACKEND IN_LIST AUDIO_PROP)
message(FATAL_ERROR "Incompatible audio backend configuration ${PLAYER_AUDIO_BACKEND}.\nPlease clear the CMake cache.\nOptions: ${AUDIO_PROP}")
endif()

# Shared by homebrew platforms
Expand Down Expand Up @@ -834,7 +861,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
endif()

# Endianess check
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.20)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20)
if (CMAKE_CXX_BYTE_ORDER STREQUAL "BIG_ENDIAN")
target_compile_definitions(${PROJECT_NAME} PRIVATE WORDS_BIGENDIAN=1)
endif()
Expand Down Expand Up @@ -897,7 +924,7 @@ target_link_libraries(${PROJECT_NAME} PIXMAN::PIXMAN)

# Always enable Wine registry support on non-Windows, but not for console ports
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows"
AND NOT PLAYER_CONSOLE)
AND NOT PLAYER_CONSOLE_PORT)
target_compile_definitions(${PROJECT_NAME} PUBLIC HAVE_WINE=1)
endif()

Expand Down Expand Up @@ -952,7 +979,7 @@ endif()
if(PLAYER_HAS_AUDIO)
target_compile_definitions(${PROJECT_NAME} PUBLIC SUPPORT_AUDIO=1)

if(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro")
if(PLAYER_TARGET_PLATFORM STREQUAL "libretro")
if (WIN32 OR UNIX OR APPLE)
set(SUPPORT_NATIVE_MIDI ON)
endif()
Expand Down Expand Up @@ -1007,7 +1034,7 @@ if(PLAYER_HAS_AUDIO)
set(PLAYER_AUDIO_RESAMPLER "Auto" CACHE STRING "Audio resampler to use. Options: Auto speexdsp samplerate OFF")
set_property(CACHE PLAYER_AUDIO_RESAMPLER PROPERTY STRINGS Auto speexdsp samplerate OFF)

if(${PLAYER_AUDIO_RESAMPLER} STREQUAL "Auto")
if(PLAYER_AUDIO_RESAMPLER STREQUAL "Auto")
set(PLAYER_AUDIO_RESAMPLER_IS_AUTO ON)
endif()

Expand All @@ -1026,12 +1053,12 @@ if(PLAYER_HAS_AUDIO)
DEFINITION HAVE_LIBSAMPLERATE
TARGET Samplerate::Samplerate)
endif()
elseif(${PLAYER_AUDIO_RESAMPLER} STREQUAL "speexdsp")
elseif(PLAYER_AUDIO_RESAMPLER STREQUAL "speexdsp")
player_find_package(NAME speexdsp
DEFINITION HAVE_LIBSPEEXDSP
TARGET speexdsp::speexdsp
REQUIRED)
elseif(${PLAYER_AUDIO_RESAMPLER} STREQUAL "samplerate")
elseif(PLAYER_AUDIO_RESAMPLER STREQUAL "samplerate")
player_find_package(NAME Samplerate
DEFINITION HAVE_LIBSAMPLERATE
TARGET Samplerate::Samplerate
Expand Down Expand Up @@ -1119,7 +1146,7 @@ if(PLAYER_HAS_AUDIO)
endif()

# Executable
if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$" AND NOT PLAYER_CONSOLE_PORT)
if(PLAYER_BUILD_EXECUTABLE AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$" AND NOT PLAYER_CONSOLE_PORT)
if(APPLE)
set(EXE_NAME "EasyRPG-Player.app")
set_source_files_properties(${${PROJECT_NAME}_BUNDLE_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
Expand Down Expand Up @@ -1344,7 +1371,7 @@ elseif(PLAYER_CONSOLE_PORT)
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF) # we do this manually
include(CPack)
else() # library
if(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro")
if(PLAYER_TARGET_PLATFORM STREQUAL "libretro")
add_library(easyrpg_libretro
src/platform/libretro/audio.cpp
src/platform/libretro/audio.h
Expand All @@ -1366,7 +1393,7 @@ else() # library
if(WIN32)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT easyrpg_libretro)
endif()
elseif(ANDROID AND ${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
elseif(ANDROID AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$")
add_library(easyrpg_android
src/platform/android/android.cpp
src/platform/android/android.h
Expand Down Expand Up @@ -1640,5 +1667,5 @@ message(STATUS "")

if (${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
message(WARNING "SDL1 is deprecated!")
message(WARNING "Please migrate to SDL2!")
message(WARNING "Please migrate to SDL2 or SDL3!")
endif()
Loading
Loading