From 4202aa781dfe2a51248d748c4d9d072248bd2f03 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 5 Jun 2023 03:21:38 +0200
Subject: [PATCH] cmake: version symbols using version script
---
Android.mk | 1 +
CMakeLists.txt | 2 +
SDL_mixer.sym | 96 +++++++++++++++++++++++++++++++++
cmake/PrivateSdlFunctions.cmake | 11 ++++
4 files changed, 110 insertions(+)
create mode 100644 SDL_mixer.sym
diff --git a/Android.mk b/Android.mk
index 023da93f..133a5481 100644
--- a/Android.mk
+++ b/Android.mk
@@ -83,6 +83,7 @@ LOCAL_SRC_FILES := \
LOCAL_CFLAGS :=
LOCAL_LDLIBS :=
+LOCAL_LDFLAGS := -Wl,--no-undefined -Wl,--version-script=$(LOCAL_PATH)/SDL_mixer.sym
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := SDL3
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7e329e8b..c1b0533b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -323,6 +323,8 @@ if(SDL3MIXER_BUILD_SHARED_LIBS)
sdl_target_link_options_no_undefined(${sdl3_mixer_target_name})
endif()
+sdl_target_link_option_version_file(${sdl3_mixer_target_name} "${CMAKE_CURRENT_SOURCE_DIR}/SDL_mixer.sym")
+
if(SDL3MIXER_BUILD_SHARED_LIBS)
# Make sure static library dependencies are built with -fPIC when building a shared SDL3_mixer
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
diff --git a/SDL_mixer.sym b/SDL_mixer.sym
new file mode 100644
index 00000000..b009cdc5
--- /dev/null
+++ b/SDL_mixer.sym
@@ -0,0 +1,96 @@
+SDL3_mixer_0.0.0 {
+ global:
+ Mix_AllocateChannels;
+ Mix_CloseAudio;
+ Mix_ExpireChannel;
+ Mix_FadeInChannel;
+ Mix_FadeInChannelTimed;
+ Mix_FadeInMusic;
+ Mix_FadeInMusicPos;
+ Mix_FadeOutChannel;
+ Mix_FadeOutGroup;
+ Mix_FadeOutMusic;
+ Mix_FadingChannel;
+ Mix_FadingMusic;
+ Mix_FreeChunk;
+ Mix_FreeMusic;
+ Mix_GetChunk;
+ Mix_GetChunkDecoder;
+ Mix_GetMusicAlbumTag;
+ Mix_GetMusicArtistTag;
+ Mix_GetMusicCopyrightTag;
+ Mix_GetMusicDecoder;
+ Mix_GetMusicHookData;
+ Mix_GetMusicLoopEndTime;
+ Mix_GetMusicLoopLengthTime;
+ Mix_GetMusicLoopStartTime;
+ Mix_GetMusicPosition;
+ Mix_GetMusicTitle;
+ Mix_GetMusicTitleTag;
+ Mix_GetMusicType;
+ Mix_GetMusicVolume;
+ Mix_GetNumChunkDecoders;
+ Mix_GetNumMusicDecoders;
+ Mix_GetNumTracks;
+ Mix_GetSoundFonts;
+ Mix_GetSynchroValue;
+ Mix_GetTimidityCfg;
+ Mix_GroupAvailable;
+ Mix_GroupChannel;
+ Mix_GroupChannels;
+ Mix_GroupCount;
+ Mix_GroupNewer;
+ Mix_GroupOldest;
+ Mix_HaltChannel;
+ Mix_HaltGroup;
+ Mix_HaltMusic;
+ Mix_HasChunkDecoder;
+ Mix_HasMusicDecoder;
+ Mix_Init;
+ Mix_Linked_Version;
+ Mix_LoadMUS;
+ Mix_LoadMUSType_RW;
+ Mix_LoadMUS_RW;
+ Mix_LoadWAV;
+ Mix_LoadWAV_RW;
+ Mix_MasterVolume;
+ Mix_ModMusicJumpToOrder;
+ Mix_MusicDuration;
+ Mix_OpenAudio;
+ Mix_OpenAudioDevice;
+ Mix_Pause;
+ Mix_PauseAudio;
+ Mix_PauseMusic;
+ Mix_Paused;
+ Mix_PausedMusic;
+ Mix_PlayChannel;
+ Mix_PlayChannelTimed;
+ Mix_PlayMusic;
+ Mix_Playing;
+ Mix_PlayingMusic;
+ Mix_QuerySpec;
+ Mix_QuickLoad_RAW;
+ Mix_QuickLoad_WAV;
+ Mix_Quit;
+ Mix_RegisterEffect;
+ Mix_ReserveChannels;
+ Mix_Resume;
+ Mix_ResumeMusic;
+ Mix_RewindMusic;
+ Mix_SetDistance;
+ Mix_SetMusicCMD;
+ Mix_SetMusicPosition;
+ Mix_SetPanning;
+ Mix_SetPosition;
+ Mix_SetReverseStereo;
+ Mix_SetSoundFonts;
+ Mix_SetSynchroValue;
+ Mix_SetTimidityCfg;
+ Mix_StartTrack;
+ Mix_UnregisterAllEffects;
+ Mix_UnregisterEffect;
+ Mix_Volume;
+ Mix_VolumeChunk;
+ Mix_VolumeMusic;
+ local: *;
+};
diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake
index 0f11b245..034f2cef 100644
--- a/cmake/PrivateSdlFunctions.cmake
+++ b/cmake/PrivateSdlFunctions.cmake
@@ -226,3 +226,14 @@ function(sdl_target_link_options_no_undefined TARGET)
endif()
endif()
endfunction()
+
+function(sdl_target_link_option_version_file TARGET VERSION_SCRIPT)
+ sdl_check_linker_flag("-Wl,--version-script=${VERSION_SCRIPT}" HAVE_WL_VERSION_SCRIPT)
+ if(HAVE_WL_VERSION_SCRIPT)
+ target_link_options(${TARGET} PRIVATE "-Wl,--version-script=${VERSION_SCRIPT}")
+ else()
+ if(LINUX OR ANDROID)
+ message(FATAL_ERROR "Linker does not support '-Wl,--version-script=xxx.sym'. This is required on the current host platform.")
+ endif()
+ endif()
+endfunction()