From d33ddcb9d658f8c4d29477c54701c2b6155eb12b Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 5 Jun 2023 01:44:14 +0200
Subject: [PATCH] cmake: version symbols using version script
---
Android.mk | 1 +
CMakeLists.txt | 2 ++
SDL_image.sym | 63 +++++++++++++++++++++++++++++++++
cmake/PrivateSdlFunctions.cmake | 11 ++++++
4 files changed, 77 insertions(+)
create mode 100644 SDL_image.sym
diff --git a/Android.mk b/Android.mk
index d93d282b..6b2c8ace 100644
--- a/Android.mk
+++ b/Android.mk
@@ -98,6 +98,7 @@ LOCAL_CFLAGS := -DLOAD_BMP -DLOAD_GIF -DLOAD_LBM -DLOAD_PCX -DLOAD_PNM \
-DLOAD_SVG -DLOAD_TGA -DLOAD_XCF -DLOAD_XPM -DLOAD_XV \
-DLOAD_QOI
LOCAL_LDLIBS :=
+LOCAL_LDFLAGS := -Wl,--no-undefined -Wl,--version-script=$(LOCAL_PATH)/SDL_image.sym
LOCAL_STATIC_LIBRARIES :=
LOCAL_SHARED_LIBRARIES := SDL3
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c0000ea0..8eb723e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -250,6 +250,8 @@ set_target_properties(SDL3_image PROPERTIES
C_VISIBILITY_PRESET "hidden"
)
+sdl_target_link_option_version_file(SDL3_image "${CMAKE_CURRENT_SOURCE_DIR}/SDL_image.sym")
+
if(NOT ANDROID)
if(APPLE)
# the SOVERSION property corresponds to the compatibility version and VERSION corresponds to the current version
diff --git a/SDL_image.sym b/SDL_image.sym
new file mode 100644
index 00000000..67746df8
--- /dev/null
+++ b/SDL_image.sym
@@ -0,0 +1,63 @@
+SDL3_image_0.0.0 {
+ global:
+ IMG_FreeAnimation;
+ IMG_Init;
+ IMG_Linked_Version;
+ IMG_Load;
+ IMG_LoadAVIF_RW;
+ IMG_LoadAnimation;
+ IMG_LoadAnimationTyped_RW;
+ IMG_LoadAnimation_RW;
+ IMG_LoadBMP_RW;
+ IMG_LoadCUR_RW;
+ IMG_LoadGIFAnimation_RW;
+ IMG_LoadGIF_RW;
+ IMG_LoadICO_RW;
+ IMG_LoadJPG_RW;
+ IMG_LoadJXL_RW;
+ IMG_LoadLBM_RW;
+ IMG_LoadPCX_RW;
+ IMG_LoadPNG_RW;
+ IMG_LoadPNM_RW;
+ IMG_LoadQOI_RW;
+ IMG_LoadSVG_RW;
+ IMG_LoadSizedSVG_RW;
+ IMG_LoadTGA_RW;
+ IMG_LoadTIF_RW;
+ IMG_LoadTexture;
+ IMG_LoadTextureTyped_RW;
+ IMG_LoadTexture_RW;
+ IMG_LoadTyped_RW;
+ IMG_LoadWEBPAnimation_RW;
+ IMG_LoadWEBP_RW;
+ IMG_LoadXCF_RW;
+ IMG_LoadXPM_RW;
+ IMG_LoadXV_RW;
+ IMG_Load_RW;
+ IMG_Quit;
+ IMG_ReadXPMFromArray;
+ IMG_ReadXPMFromArrayToRGB888;
+ IMG_SaveJPG;
+ IMG_SaveJPG_RW;
+ IMG_SavePNG;
+ IMG_SavePNG_RW;
+ IMG_isAVIF;
+ IMG_isBMP;
+ IMG_isCUR;
+ IMG_isGIF;
+ IMG_isICO;
+ IMG_isJPG;
+ IMG_isJXL;
+ IMG_isLBM;
+ IMG_isPCX;
+ IMG_isPNG;
+ IMG_isPNM;
+ IMG_isQOI;
+ IMG_isSVG;
+ IMG_isTIF;
+ IMG_isWEBP;
+ IMG_isXCF;
+ IMG_isXPM;
+ IMG_isXV;
+ 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()