Skip to content

Commit

Permalink
Merge pull request #17329 from hrydgard/mac-sdl-upgrade
Browse files Browse the repository at this point in the history
Upgrade SDL for Mac to latest, prepare for notarization
  • Loading branch information
hrydgard committed Apr 25, 2023
2 parents 22314f8 + 6332e61 commit 3d8d7a3
Show file tree
Hide file tree
Showing 13 changed files with 244 additions and 57 deletions.
52 changes: 33 additions & 19 deletions CMakeLists.txt
Expand Up @@ -107,10 +107,6 @@ if(NOT IOS)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/sdl)
endif()

if(MACOSX AND NOT USE_SYSTEM_LIBSDL2)
set(SDL2_LIBRARY ${CMAKE_SOURCE_DIR}/SDL/macOS/SDL2.framework)
endif()

include(ccache)
include(GNUInstallDirs)

Expand Down Expand Up @@ -161,7 +157,7 @@ option(USE_ARMIPS "Build with armips support in API/debugger" ON)
option(USE_SYSTEM_SNAPPY "Dynamically link against system snappy" ${USE_SYSTEM_SNAPPY})
option(USE_SYSTEM_FFMPEG "Dynamically link against system FFMPEG" ${USE_SYSTEM_FFMPEG})
option(USE_SYSTEM_LIBZIP "Dynamically link against system libzip" ${USE_SYSTEM_LIBZIP})
option(USE_SYSTEM_LIBSDL2 "Dynamically link against system SDL2" ON)
option(USE_SYSTEM_LIBSDL2 "Dynamically link against system SDL2" ON) # Ignored on Mac
option(USE_SYSTEM_LIBPNG "Dynamically link against system libpng" ON)
option(USE_SYSTEM_ZSTD "Dynamically link against system zstd" ${USE_SYSTEM_ZSTD})
option(USE_SYSTEM_MINIUPNPC "Dynamically link against system miniUPnPc" ${USE_SYSTEM_MINIUPNPC})
Expand Down Expand Up @@ -241,9 +237,16 @@ if(USING_EGL)
set(OPENGL_LIBRARIES ${OPENGL_LIBRARIES} ${EGL_LIBRARIES})
endif()

if(NOT LIBRETRO AND NOT IOS)
if(NOT LIBRETRO AND NOT IOS AND NOT MACOSX)
find_package(SDL2)
endif()

if(MACOSX AND NOT IOS)
find_library(SDL2Fwk SDL2 REQUIRED PATHS SDL/macOS)
message(STATUS "found SDL2Fwk=${SDL2Fwk}")
add_definitions(-DHAVE_SYSCTLBYNAME)
endif()

include(FindThreads)

if(APPLE)
Expand Down Expand Up @@ -1252,8 +1255,13 @@ elseif(WIN32)
else()
link_directories(dx9sdk/Lib/x86)
endif()
elseif(TARGET SDL2::SDL2)
set(TargetBin PPSSPPSDL)
elseif(LIBRETRO)
else()
if(GOLD)
set(TargetBin PPSSPPGold)
else()
set(TargetBin PPSSPPSDL)
endif()
# Require SDL
add_definitions(-DSDL)
set(nativeExtra ${nativeExtra}
Expand All @@ -1267,7 +1275,6 @@ elseif(TARGET SDL2::SDL2)
SDL/SDLVulkanGraphicsContext.cpp
)
endif()
set(nativeExtraLibs ${nativeExtraLibs} SDL2::SDL2)
if(APPLE)
set(nativeExtra ${nativeExtra}
SDL/SDLMain.h
Expand All @@ -1290,11 +1297,12 @@ elseif(TARGET SDL2::SDL2)
set_source_files_properties(SDL/PPSSPPAboutViewController.m PROPERTIES COMPILE_FLAGS -fobjc-arc)
set_source_files_properties(Common/Battery/AppleBatteryClient.m PROPERTIES COMPILE_FLAGS -fobjc-arc)
set(nativeExtraLibs ${nativeExtraLibs} ${COCOA_LIBRARY} ${QUARTZ_CORE_LIBRARY} ${IOKIT_LIBRARY})
set(nativeExtraLibs ${nativeExtraLibs} ${SDL2Fwk})
elseif(USING_EGL)
set(nativeExtraLibs ${nativeExtraLibs} pthread)
set(nativeExtraLibs ${nativeExtraLibs} pthread SDL2::SDL2)
else()
set(nativeExtraLibs ${nativeExtraLibs} SDL2::SDL2)
endif()
elseif(NOT LIBRETRO)
message(FATAL_ERROR "Could not find SDL2. Failing.")
endif()

if(WIN32)
Expand Down Expand Up @@ -2546,11 +2554,11 @@ if(TargetBin)
file(INSTALL "${CMAKE_SOURCE_DIR}/ext/vulkan/iOS/Frameworks/libMoltenVK.dylib" DESTINATION "${CMAKE_BINARY_DIR}/PPSSPP.app/Frameworks/")
else()
add_executable(${TargetBin} MACOSX_BUNDLE ${ICON_PATH_ABS} ${NativeAssets} ${BigFontAssets} ${SHADER_FILES} ${THEME_FILE} ${DEBUGGER_FILES} ${FLASH0_FILES} ${LANG_FILES} ${NativeAppSource})
file(INSTALL "${CMAKE_SOURCE_DIR}/ext/vulkan/macOS/Frameworks/libMoltenVK.dylib" DESTINATION "${CMAKE_BINARY_DIR}/PPSSPPSDL.app/Contents/Frameworks/")
if(TARGET SDL2::SDL2 AND NOT USING_QT_UI)
add_custom_command(TARGET ${TargetBin} POST_BUILD COMMAND /bin/bash "${CMAKE_SOURCE_DIR}/SDL/macbundle.sh" "${CMAKE_BINARY_DIR}/PPSSPPSDL.app")
elseif(USING_QT_UI)
file(INSTALL "${CMAKE_SOURCE_DIR}/ext/vulkan/macOS/Frameworks/libMoltenVK.dylib" DESTINATION "${CMAKE_BINARY_DIR}/${TargetBin}.app/Contents/Frameworks/")
if(USING_QT_UI)
add_custom_command(TARGET ${TargetBin} POST_BUILD COMMAND /bin/bash "${CMAKE_SOURCE_DIR}/Qt/macbundle.sh" "${CMAKE_BINARY_DIR}/PPSSPPQt.app")
else()
add_custom_command(TARGET ${TargetBin} POST_BUILD COMMAND /bin/bash "${CMAKE_SOURCE_DIR}/SDL/macbundle.sh" "${CMAKE_BINARY_DIR}/${TargetBin}.app" "${TargetBin}")
endif()
endif()
elseif(WIN32)
Expand Down Expand Up @@ -2616,9 +2624,15 @@ if(IOS AND NOT LIBRETRO)
endif()

if(MACOSX)
set_target_properties(${TargetBin} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist"
)
if(GOLD)
set_target_properties(${TargetBin} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/InfoGold.plist"
)
else()
set_target_properties(${TargetBin} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macOS/Info.plist"
)
endif()
endif()

if(UNIX AND NOT ANDROID AND NOT APPLE)
Expand Down
8 changes: 7 additions & 1 deletion SDL/SDLGLGraphicsContext.h
@@ -1,5 +1,11 @@
#include "SDL_syswm.h"
#include "ppsspp_config.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#include "SDL2/SDL_syswm.h"
#else
#include "SDL.h"
#include "SDL_syswm.h"
#endif

#include "Common/GPU/OpenGL/GLRenderManager.h"
#include "Common/GPU/OpenGL/GLCommon.h"
Expand Down
6 changes: 4 additions & 2 deletions SDL/SDLJoystick.h
@@ -1,10 +1,12 @@
#pragma once
#ifdef _MSC_VER
#include "SDL/SDL.h"
#include "SDL/SDL_thread.h"
#else
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#else
#include "SDL.h"
#include "SDL_thread.h"
#endif
#endif
#include <map>

Expand Down
8 changes: 6 additions & 2 deletions SDL/SDLMain.cpp
Expand Up @@ -7,7 +7,13 @@
#include <pwd.h>

#include "ppsspp_config.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#include "SDL2/SDL_syswm.h"
#else
#include "SDL.h"
#include "SDL_syswm.h"
#endif
#include "SDL/SDLJoystick.h"
SDLJoystick *joystick = NULL;

Expand Down Expand Up @@ -35,8 +41,6 @@ SDLJoystick *joystick = NULL;
#include "Common/GPU/OpenGL/GLRenderManager.h"
#include "Common/Profiler/Profiler.h"

#include "SDL_syswm.h"

#if defined(VK_USE_PLATFORM_XLIB_KHR)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
Expand Down
5 changes: 5 additions & 0 deletions SDL/SDLMain.mm
Expand Up @@ -5,7 +5,12 @@
Feel free to customize this file to suit your needs
*/

#include "ppsspp_config.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#else
#include "SDL.h"
#endif
#include "SDLMain.h"
#include "Common/Profiler/Profiler.h"
#include <signal.h>
Expand Down
4 changes: 4 additions & 0 deletions SDL/SDLVulkanGraphicsContext.cpp
Expand Up @@ -10,7 +10,11 @@
#include "Common/Data/Text/Parsers.h"

#include "Core/System.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL_vulkan.h"
#else
#include "SDL_vulkan.h"
#endif
#include "SDLVulkanGraphicsContext.h"

#if defined(VK_USE_PLATFORM_METAL_EXT)
Expand Down
6 changes: 6 additions & 0 deletions SDL/SDLVulkanGraphicsContext.h
@@ -1,5 +1,11 @@
#include "ppsspp_config.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#include "SDL2/SDL_syswm.h"
#else
#include "SDL.h"
#include "SDL_syswm.h"
#endif

#include "Common/GraphicsContext.h"
#include "Common/GPU/Vulkan/VulkanContext.h"
Expand Down
2 changes: 1 addition & 1 deletion SDL/macOS
Submodule macOS updated 86 files
+ .DS_Store
+0 −1 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Resources
+0 −16 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/AUTHORS.txt
+0 −46 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/Info.plist
+0 −26 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/LICENSE-bsd.txt
+0 −674 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/LICENSE-gpl3.txt
+0 −9 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/LICENSE-orig.txt
+0 −13 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/Resources/LICENSE.txt
+0 −207 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/_CodeSignature/CodeResources
+ SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/A/hidapi
+0 −1 SDL2.framework/Versions/A/Frameworks/hidapi.framework/Versions/Current
+0 −1 SDL2.framework/Versions/A/Frameworks/hidapi.framework/hidapi
+48 −36 SDL2.framework/Versions/A/Headers/SDL.h
+16 −14 SDL2.framework/Versions/A/Headers/SDL_assert.h
+42 −6 SDL2.framework/Versions/A/Headers/SDL_atomic.h
+354 −39 SDL2.framework/Versions/A/Headers/SDL_audio.h
+5 −5 SDL2.framework/Versions/A/Headers/SDL_bits.h
+8 −10 SDL2.framework/Versions/A/Headers/SDL_blendmode.h
+60 −8 SDL2.framework/Versions/A/Headers/SDL_clipboard.h
+17 −11 SDL2.framework/Versions/A/Headers/SDL_config.h
+10 −9 SDL2.framework/Versions/A/Headers/SDL_config_macosx.h
+1 −1 SDL2.framework/Versions/A/Headers/SDL_copying.h
+79 −9 SDL2.framework/Versions/A/Headers/SDL_cpuinfo.h
+88 −56 SDL2.framework/Versions/A/Headers/SDL_endian.h
+14 −6 SDL2.framework/Versions/A/Headers/SDL_error.h
+89 −21 SDL2.framework/Versions/A/Headers/SDL_events.h
+10 −6 SDL2.framework/Versions/A/Headers/SDL_filesystem.h
+217 −13 SDL2.framework/Versions/A/Headers/SDL_gamecontroller.h
+7 −7 SDL2.framework/Versions/A/Headers/SDL_gesture.h
+100 −0 SDL2.framework/Versions/A/Headers/SDL_guid.h
+28 −7 SDL2.framework/Versions/A/Headers/SDL_haptic.h
+451 −0 SDL2.framework/Versions/A/Headers/SDL_hidapi.h
+781 −52 SDL2.framework/Versions/A/Headers/SDL_hints.h
+257 −12 SDL2.framework/Versions/A/Headers/SDL_joystick.h
+67 −8 SDL2.framework/Versions/A/Headers/SDL_keyboard.h
+13 −6 SDL2.framework/Versions/A/Headers/SDL_keycode.h
+11 −5 SDL2.framework/Versions/A/Headers/SDL_loadso.h
+7 −5 SDL2.framework/Versions/A/Headers/SDL_locale.h
+34 −6 SDL2.framework/Versions/A/Headers/SDL_log.h
+97 −8 SDL2.framework/Versions/A/Headers/SDL_main.h
+7 −5 SDL2.framework/Versions/A/Headers/SDL_messagebox.h
+14 −5 SDL2.framework/Versions/A/Headers/SDL_metal.h
+5 −5 SDL2.framework/Versions/A/Headers/SDL_misc.h
+40 −7 SDL2.framework/Versions/A/Headers/SDL_mouse.h
+41 −5 SDL2.framework/Versions/A/Headers/SDL_mutex.h
+1 −1 SDL2.framework/Versions/A/Headers/SDL_name.h
+4 −55 SDL2.framework/Versions/A/Headers/SDL_opengl.h
+2,260 −231 SDL2.framework/Versions/A/Headers/SDL_opengl_glext.h
+2 −2 SDL2.framework/Versions/A/Headers/SDL_opengles.h
+7 −7 SDL2.framework/Versions/A/Headers/SDL_opengles2.h
+374 −339 SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2.h
+3,479 −1,496 SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2ext.h
+6 −9 SDL2.framework/Versions/A/Headers/SDL_opengles2_gl2platform.h
+43 −14 SDL2.framework/Versions/A/Headers/SDL_opengles2_khrplatform.h
+36 −5 SDL2.framework/Versions/A/Headers/SDL_pixels.h
+37 −9 SDL2.framework/Versions/A/Headers/SDL_platform.h
+6 −4 SDL2.framework/Versions/A/Headers/SDL_power.h
+3 −3 SDL2.framework/Versions/A/Headers/SDL_quit.h
+167 −9 SDL2.framework/Versions/A/Headers/SDL_rect.h
+311 −17 SDL2.framework/Versions/A/Headers/SDL_render.h
+6 −1 SDL2.framework/Versions/A/Headers/SDL_revision.h
+455 −26 SDL2.framework/Versions/A/Headers/SDL_rwops.h
+48 −23 SDL2.framework/Versions/A/Headers/SDL_scancode.h
+59 −8 SDL2.framework/Versions/A/Headers/SDL_sensor.h
+16 −8 SDL2.framework/Versions/A/Headers/SDL_shape.h
+168 −32 SDL2.framework/Versions/A/Headers/SDL_stdinc.h
+128 −18 SDL2.framework/Versions/A/Headers/SDL_surface.h
+160 −12 SDL2.framework/Versions/A/Headers/SDL_system.h
+17 −9 SDL2.framework/Versions/A/Headers/SDL_syswm.h
+28 −18 SDL2.framework/Versions/A/Headers/SDL_thread.h
+58 −8 SDL2.framework/Versions/A/Headers/SDL_timer.h
+18 −6 SDL2.framework/Versions/A/Headers/SDL_touch.h
+2 −2 SDL2.framework/Versions/A/Headers/SDL_types.h
+43 −11 SDL2.framework/Versions/A/Headers/SDL_version.h
+276 −27 SDL2.framework/Versions/A/Headers/SDL_video.h
+10 −8 SDL2.framework/Versions/A/Headers/SDL_vulkan.h
+26 −5 SDL2.framework/Versions/A/Headers/begin_code.h
+1 −1 SDL2.framework/Versions/A/Headers/close_code.h
+48 −0 SDL2.framework/Versions/A/Resources/CMake/sdl2-config-version.cmake
+69 −0 SDL2.framework/Versions/A/Resources/CMake/sdl2-config.cmake
+10 −10 SDL2.framework/Versions/A/Resources/Info.plist
+1 −1 SDL2.framework/Versions/A/Resources/License.txt
+13 −1 SDL2.framework/Versions/A/Resources/ReadMe.txt
+ SDL2.framework/Versions/A/Resources/default.metallib
+ SDL2.framework/Versions/A/SDL2
+192 −149 SDL2.framework/Versions/A/_CodeSignature/CodeResources
63 changes: 34 additions & 29 deletions SDL/macbundle.sh
@@ -1,43 +1,46 @@
#!/bin/bash

echo "Hello"

PPSSPP="${1}"
PPSSPPSDL="${PPSSPP}/Contents/MacOS/PPSSPPSDL"
PPSSPP_SHORTNAME="${2}"
PPSSPPSDL="${PPSSPP}/Contents/MacOS/${PPSSPP_SHORTNAME}"

ls ${PPSSPPSDL}

if [ ! -f "${PPSSPPSDL}" ]; then
echo "No such file: ${PPSSPPSDL}!"
exit 0
fi

SDL=$(otool -L "${PPSSPPSDL}" | grep -v @executable_path | grep -Eo /.+libSDL.+dylib)
if [ "${SDL}" != "" ]; then
if [ ! -f "${SDL}" ]; then
echo "Cannot locate SDL: ${SDL}!"
exit 0
fi

echo "Installing SDL from ${SDL}..."

SDLNAME=$(basename "${SDL}")
mkdir -p "${PPSSPP}/Contents/Frameworks" || exit 0
cp -r "$SDL" "${PPSSPP}/Contents/Frameworks" || exit 0
install_name_tool -change "${SDL}" "@executable_path/../Frameworks/${SDLNAME}" "${PPSSPPSDL}" || exit 0
elif [ "$(otool -L "${PPSSPPSDL}" | grep @rpath/SDL)" != "" ]; then
cd "$(dirname "$0")"
RPATH="$(pwd)/macOS"
cd -
SDL="${RPATH}/SDL2.framework"
if [ ! -d "${SDL}" ]; then
echo "Cannot locate SDL.framework: ${SDL}!"
exit 0
fi

rm -rf "${PPSSPP}/Contents/Frameworks/SDL2.framework" || exit 0
mkdir -p "${PPSSPP}/Contents/Frameworks" || exit 0
cp -a "$SDL" "${PPSSPP}/Contents/Frameworks" || exit 0
install_name_tool -rpath "${RPATH}" "@executable_path/../Frameworks" "${PPSSPPSDL}" || echo "Already patched."
echo pwd=`pwd`
echo PPSSPP=$PPSSPP
echo PPSSPPSDL=$PPSSPPSDL

cd "$(dirname "$0")"
RPATH="$(pwd)/macOS"
cd -
echo RPATH=$RPATH
SDL="${RPATH}/SDL2.framework"
if [ ! -d "${SDL}" ]; then
echo "Cannot locate SDL.framework: ${SDL}!"
exit 0
fi

rm -rf "${PPSSPP}/Contents/Frameworks/SDL2.framework" || exit 0
mkdir -p "${PPSSPP}/Contents/Frameworks" || exit 0
cp -a "$SDL" "${PPSSPP}/Contents/Frameworks" || exit 0
echo install_name_tool -rpath "${RPATH}" "@executable_path/../Frameworks" "${PPSSPPSDL}" || echo "Already patched."
install_name_tool -rpath "${RPATH}" "@executable_path/../Frameworks" "${PPSSPPSDL}" || echo "Already patched."

echo "Done."

GIT_VERSION_LINE=$(grep "PPSSPP_GIT_VERSION = " "$(dirname "${0}")/../git-version.cpp")
# Hack, need to do something better here.
if [ -z "$GIT_VERSION_LINE" ]; then
GIT_VERSION_LINE=$(grep "PPSSPP_GIT_VERSION = " "$(dirname "${0}")/../build/git-version.cpp")
fi

echo "Setting version to '${GIT_VERSION_LINE}'..."
SHORT_VERSION_MATCH='.*"v([0-9\.]+(-[0-9]+)?).*";'
LONG_VERSION_MATCH='.*"v(.*)";'
Expand All @@ -50,4 +53,6 @@ else
fi

# AdHoc codesign is required for Apple Silicon.
codesign -fs - --deep "${PPSSPP}" || exit 1
echo "Signing..."
codesign -fs - --entitlements ../macOS/Entitlements.plist --timestamp "${PPSSPPSDL}" || echo "Failed signing"
codesign -fs - --entitlements ../macOS/Entitlements.plist --timestamp "${PPSSPP}" || echo "Failed signing"
8 changes: 7 additions & 1 deletion headless/SDLHeadlessHost.cpp
Expand Up @@ -18,7 +18,13 @@
#ifdef SDL

#include <cstdio>
#include <SDL.h>

#include "ppsspp_config.h"
#if PPSSPP_PLATFORM(MAC)
#include "SDL2/SDL.h"
#else
#include "SDL.h"
#endif

#include "headless/SDLHeadlessHost.h"
#include "Common/GPU/OpenGL/GLCommon.h"
Expand Down
2 changes: 1 addition & 1 deletion macOS/Info.plist
Expand Up @@ -54,7 +54,7 @@
</dict>
</array>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<string>Contents/MacOS/PPSSPPSDL</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
Expand Down

0 comments on commit 3d8d7a3

Please sign in to comment.