From 408d8b065f004c28d27bac173de52fd8ebdb58f1 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 19 Jul 2026 02:56:49 +0200
Subject: [PATCH] cmake: support vendored fluidsynth
---
.gitmodules | 4 ++++
CMakeLists.txt | 35 +++++++++++++++++++++++++++------
cmake/SDL3_mixerConfig.cmake.in | 2 +-
external/fluidsynth | 1 +
4 files changed, 35 insertions(+), 7 deletions(-)
create mode 160000 external/fluidsynth
diff --git a/.gitmodules b/.gitmodules
index c33e17cf..ffa99603 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -38,3 +38,7 @@
path = external/libgme
url = https://github.com/libsdl-org/game-music-emu.git
branch = v0.6.4-SDL
+[submodule "external/fluidsynth"]
+ path = external/fluidsynth
+ url = https://github.com/libsdl-org/fluidsynth.git
+ branch = v2.5.7-SDL
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3a7b8b5a..1f1b7d57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -151,7 +151,7 @@ cmake_dependent_option(SDLMIXER_MP3_MPG123_SHARED "Dynamically load mpg123" "${S
option(SDLMIXER_MIDI "Enable MIDI audio" ON)
-cmake_dependent_option(SDLMIXER_MIDI_FLUIDSYNTH "Support FluidSynth MIDI output" ON "SDLMIXER_MIDI;NOT SDLMIXER_VENDORED" OFF)
+cmake_dependent_option(SDLMIXER_MIDI_FLUIDSYNTH "Support FluidSynth MIDI output" ON SDLMIXER_MIDI OFF)
cmake_dependent_option(SDLMIXER_MIDI_FLUIDSYNTH_SHARED "Dynamically load libfluidsynth" "${SDLMIXER_DEPS_SHARED}" SDLMIXER_MIDI_FLUIDSYNTH OFF)
cmake_dependent_option(SDLMIXER_MIDI_TIMIDITY "Support timidity MIDI output" ON SDLMIXER_MIDI OFF)
@@ -913,9 +913,31 @@ list(APPEND SDLMIXER_BACKENDS MIDI_FLUIDSYNTH)
set(SDLMIXER_MIDI_FLUIDSYNTH_ENABLED FALSE)
if(SDLMIXER_MIDI_FLUIDSYNTH)
if(SDLMIXER_VENDORED)
- message(STATUS "Using vendored FluidSynth")
- message(${fatal_error} "FluidSynth is not vendored.")
- set(SDLMIXER_MIDI_FLUIDSYNTH_ENABLED FALSE)
+ set(SDLMIXER_MIDI_FLUIDSYNTH_ENABLED TRUE)
+ message(STATUS "Using vendored fluidsynth")
+ sdl_check_project_in_subfolder(external/fluidsynth fluidsynth SDLMIXER_VENDORED)
+ set(disabled_opts enable-alsa enable-aufile enable-dbus enable-ipv6 enable-jack enable-ladspa
+ enable-libinstpatch enable-libsndfile enable-midishare enable-opensles enable-oboe enable-network
+ enable-oss enable-dsound enable-wasapi enable-waveout enable-winmidi enable-sdl3 enable-pulseaudio
+ enable-pipewire enable-readline enable-threads enable-openmp enable-unicode enable-native enable-signalsmith
+ enable-framework enable-systemd enable-coreaudio enable-coremidi enable-dart enable-kai)
+ foreach(opt ${disabled_opts})
+ set(${opt} FALSE CACHE BOOL "FluidSynth ${opt} option")
+ endforeach()
+ enable_language(CXX)
+ set(osal "cpp11" CACHE STRING "FluidSynth OS Abstraction layer")
+ set(BUILD_SHARED_LIBS "${SDLMIXER_MIDI_FLUIDSYNTH_SHARED}")
+ add_subdirectory(external/fluidsynth external/fluidsynth-build EXCLUDE_FROM_ALL)
+ register_license(fluidsynth external/fluidsynth/LICENSE)
+ if(NOT TARGET FluidSynth::libfluidsynth)
+ add_library(FluidSynth::libfluidsynth ALIAS libfluidsynth)
+ endif()
+ if(SDLMIXER_MIDI_FLUIDSYNTH_SHARED OR NOT SDLMIXER_BUILD_SHARED_LIBS)
+ list(APPEND INSTALL_EXTRA_TARGETS libfluidsynth)
+ endif()
+ if(NOT SDLMIXER_MIDI_FLUIDSYNTH_SHARED)
+ list(APPEND PC_LIBS -l$<TARGET_FILE_BASE_NAME:FluidSynth::libfluidsynth>)
+ endif()
elseif(SDLMIXER_MIDI_FLUIDSYNTH_SHARED AND DEFINED SDLMIXER_DYNAMIC_MIDI_FLUIDSYNTH AND EXISTS "${SDLMIXER_DYNAMIC_MIDI_FLUIDSYNTH}")
message(STATUS "${PROJECT_NAME}: Using FluidSynth from CMake variable")
set(SDLMIXER_MIDI_FLUIDSYNTH_ENABLED TRUE)
@@ -1173,10 +1195,11 @@ if(SDLMIXER_INSTALL)
string(JOIN " " PC_REQUIRES ${PC_REQUIRES})
string(JOIN " " PC_LIBS ${PC_LIBS})
- configure_file(cmake/sdl3-mixer.pc.in sdl3-mixer.pc @ONLY)
+ configure_file(cmake/sdl3-mixer.pc.in sdl3-mixer.pc.pre-config @ONLY)
+ file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/sdl3-mixer-$<CONFIG>.pc" INPUT "${CMAKE_CURRENT_BINARY_DIR}/sdl3-mixer.pc.pre-config")
# Always install sdl3-mixer.pc file: libraries might be different between config modes
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-mixer.pc"
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-mixer-$<CONFIG>.pc" RENAME "sdl3-mixer.pc"
DESTINATION "${SDLMIXER_PKGCONFIG_INSTALLDIR}" COMPONENT devel)
install(FILES "LICENSE.txt"
diff --git a/cmake/SDL3_mixerConfig.cmake.in b/cmake/SDL3_mixerConfig.cmake.in
index 815faa42..eab8250f 100644
--- a/cmake/SDL3_mixerConfig.cmake.in
+++ b/cmake/SDL3_mixerConfig.cmake.in
@@ -53,7 +53,7 @@ set(SDL3_mixer_SDL3_mixer-static FALSE)
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_mixer-static-targets.cmake")
if(SDLMIXER_VENDORED)
- if(SDLMIXER_GME)
+ if(SDLMIXER_MIDI_FLUIDSYNTH OR SDLMIXER_GME)
include(CheckLanguage)
check_language(CXX)
if(NOT CMAKE_CXX_COMPILER)
diff --git a/external/fluidsynth b/external/fluidsynth
new file mode 160000
index 00000000..b53de280
--- /dev/null
+++ b/external/fluidsynth
@@ -0,0 +1 @@
+Subproject commit b53de2809bc5e4bffdaec59f447f81ba55ce4fe1