From 71a9981430447cc76dc7d7555d3db677b4e0bdf4 Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Tue, 9 May 2023 20:08:25 -0700 Subject: [PATCH] externals: Link SDL2 statically. (#6461) --- CMakeModules/CopyCitraSDLDeps.cmake | 5 ---- externals/libusb/CMakeLists.txt | 29 +++++++------------- externals/libusb/config.h.in | 21 ++++++++------- externals/libusb/libusb | 2 +- externals/sdl2/CMakeLists.txt | 33 +++-------------------- externals/sdl2/SDL | 2 +- src/citra/CMakeLists.txt | 10 +++---- src/citra_qt/CMakeLists.txt | 2 -- src/input_common/gcadapter/gc_adapter.cpp | 8 +++++- src/input_common/sdl/sdl_impl.cpp | 24 +++++++++++++++++ 10 files changed, 61 insertions(+), 75 deletions(-) delete mode 100644 CMakeModules/CopyCitraSDLDeps.cmake diff --git a/CMakeModules/CopyCitraSDLDeps.cmake b/CMakeModules/CopyCitraSDLDeps.cmake deleted file mode 100644 index 4f9e4aeb9..000000000 --- a/CMakeModules/CopyCitraSDLDeps.cmake +++ /dev/null @@ -1,5 +0,0 @@ -function(copy_citra_SDL_deps target_dir) - include(WindowsCopyFiles) - set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$/") - windows_copy_files(${target_dir} ${SDL2_DLL_DIR} ${DLL_DEST} SDL2.dll) -endfunction(copy_citra_SDL_deps) diff --git a/externals/libusb/CMakeLists.txt b/externals/libusb/CMakeLists.txt index 0d8323744..2718f4604 100644 --- a/externals/libusb/CMakeLists.txt +++ b/externals/libusb/CMakeLists.txt @@ -4,7 +4,6 @@ if(MSVC) endif() add_library(usb STATIC EXCLUDE_FROM_ALL - libusb/libusb/core.c libusb/libusb/core.c libusb/libusb/descriptor.c libusb/libusb/hotplug.c @@ -42,10 +41,9 @@ endif() if(WIN32 OR CYGWIN) target_sources(usb PRIVATE - libusb/libusb/os/threads_windows.c libusb/libusb/os/windows_winusb.c libusb/libusb/os/windows_usbdk.c - libusb/libusb/os/windows_nt_common.c + libusb/libusb/os/windows_common.c ) set(OS_WINDOWS TRUE) elseif(APPLE) @@ -54,10 +52,12 @@ elseif(APPLE) ) find_library(COREFOUNDATION_LIBRARY CoreFoundation) find_library(IOKIT_LIBRARY IOKit) + find_library(SECURITY_LIBRARY Security) find_library(OBJC_LIBRARY objc) target_link_libraries(usb PRIVATE ${COREFOUNDATION_LIBRARY} ${IOKIT_LIBRARY} + ${SECURITY_LIBRARY} ${OBJC_LIBRARY} ) set(OS_DARWIN TRUE) @@ -102,7 +102,7 @@ endif() if(UNIX) target_sources(usb PRIVATE - libusb/libusb/os/poll_posix.c + libusb/libusb/os/events_posix.c libusb/libusb/os/threads_posix.c ) find_package(Threads REQUIRED) @@ -112,12 +112,13 @@ if(UNIX) if(CMAKE_THREAD_LIBS_INIT) target_link_libraries(usb PRIVATE "${CMAKE_THREAD_LIBS_INIT}") endif() - set(THREADS_POSIX TRUE) + set(PLATFORM_POSIX TRUE) elseif(WIN32) target_sources(usb PRIVATE - libusb/libusb/os/poll_windows.c + libusb/libusb/os/events_windows.c libusb/libusb/os/threads_windows.c ) + set(PLATFORM_WINDOWS TRUE) endif() include(CheckFunctionExists) @@ -127,7 +128,8 @@ check_include_files(asm/types.h HAVE_ASM_TYPES_H) check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) check_include_files(linux/filter.h HAVE_LINUX_FILTER_H) check_include_files(linux/netlink.h HAVE_LINUX_NETLINK_H) -check_include_files(poll.h HAVE_POLL_H) +check_function_exists(eventfd HAVE_EVENTFD) +check_function_exists(timerfd_create HAVE_TIMERFD) check_include_files(signal.h HAVE_SIGNAL_H) check_include_files(strings.h HAVE_STRINGS_H) check_type_size("struct timespec" STRUCT_TIMESPEC) @@ -136,17 +138,6 @@ check_include_files(syslog.h HAVE_SYSLOG_H) check_include_files(sys/socket.h HAVE_SYS_SOCKET_H) check_include_files(sys/time.h HAVE_SYS_TIME_H) check_include_files(sys/types.h HAVE_SYS_TYPES_H) - -set(CMAKE_EXTRA_INCLUDE_FILES poll.h) -check_type_size("nfds_t" nfds_t) -unset(CMAKE_EXTRA_INCLUDE_FILES) -if(HAVE_NFDS_T) - set(POLL_NFDS_TYPE "nfds_t") -else() - set(POLL_NFDS_TYPE "unsigned int") -endif() - -check_include_files(sys/timerfd.h USBI_TIMERFD_AVAILABLE) - +check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) configure_file(config.h.in config.h) diff --git a/externals/libusb/config.h.in b/externals/libusb/config.h.in index 915b7390f..ae28abd7f 100644 --- a/externals/libusb/config.h.in +++ b/externals/libusb/config.h.in @@ -26,8 +26,11 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_LINUX_NETLINK_H 1 -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_POLL_H 1 +/* Define to 1 if you have eventfd support. */ +#cmakedefine HAVE_EVENTFD 1 + +/* Define to 1 if you have timerfd support. */ +#cmakedefine HAVE_TIMERFD 1 /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SIGNAL_H 1 @@ -53,6 +56,9 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_TYPES_H 1 +/* Define to 1 if you have the 'clock_gettime' function. */ +#cmakedefine HAVE_CLOCK_GETTIME 1 + /* Darwin backend */ #cmakedefine OS_DARWIN 1 @@ -68,14 +74,11 @@ /* Windows backend */ #cmakedefine OS_WINDOWS 1 -/* type of second poll() argument */ -#define POLL_NFDS_TYPE @POLL_NFDS_TYPE@ +/* Use POSIX Platform */ +#cmakedefine PLATFORM_POSIX -/* Use POSIX Threads */ -#cmakedefine THREADS_POSIX - -/* timerfd headers available */ -#cmakedefine USBI_TIMERFD_AVAILABLE 1 +/* Use Windows Platform */ +#cmakedefine PLATFORM_WINDOWS /* Enable output to system log */ #define USE_SYSTEM_LOGGING_FACILITY 1 diff --git a/externals/libusb/libusb b/externals/libusb/libusb index e782eeb25..54350bd83 160000 --- a/externals/libusb/libusb +++ b/externals/libusb/libusb @@ -1 +1 @@ -Subproject commit e782eeb2514266f6738e242cdcb18e3ae1ed06fa +Subproject commit 54350bd83fbcc9555abc57988d6fd73f3b9e9ff8 diff --git a/externals/sdl2/CMakeLists.txt b/externals/sdl2/CMakeLists.txt index d27fee18a..eef02dcb8 100644 --- a/externals/sdl2/CMakeLists.txt +++ b/externals/sdl2/CMakeLists.txt @@ -1,33 +1,6 @@ -# Disable building the stuff we don't need. -set(SDL_DISKAUDIO OFF CACHE BOOL "") -set(SDL_OPENGL ON CACHE BOOL "") -set(SDL_OPENGLES ON CACHE BOOL "") -set(SDL_OSS OFF CACHE BOOL "") -set(SDL_ALSA OFF CACHE BOOL "") -set(SDL_JACK OFF CACHE BOOL "") -set(SDL_ESD OFF CACHE BOOL "") -set(SDL_PIPEWIRE OFF CACHE BOOL "") -set(SDL_PULSEAUDIO OFF CACHE BOOL "") -set(SDL_ARTS OFF CACHE BOOL "") -set(SDL_NAS OFF CACHE BOOL "") -set(SDL_SNDIO OFF CACHE BOOL "") -set(SDL_FUSIONSOUND OFF CACHE BOOL "") -set(SDL_LIBSAMPLERATE OFF CACHE BOOL "") -set(SDL_X11 OFF CACHE BOOL "") -set(SDL_WAYLAND OFF CACHE BOOL "") -set(SDL_RPI OFF CACHE BOOL "") -set(SDL_COCOA ON CACHE BOOL "") -set(SDL_DIRECTX OFF CACHE BOOL "") -set(SDL_WASAPI OFF CACHE BOOL "") -set(SDL_RENDER_D3D OFF CACHE BOOL "") -set(SDL_RENDER_METAL OFF CACHE BOOL "") -set(SDL_VIVANTE OFF CACHE BOOL "") -set(SDL_VULKAN OFF CACHE BOOL "") -set(SDL_METAL OFF CACHE BOOL "") -set(SDL_KMSDRM OFF CACHE BOOL "") -set(SDL_OFFSCREEN OFF CACHE BOOL "") -set(SDL_SHARED ON CACHE BOOL "") -set(SDL_STATIC OFF CACHE BOOL "") +# Configure static library build +set(SDL_SHARED OFF CACHE BOOL "") +set(SDL_STATIC ON CACHE BOOL "") # Subsystems set(SDL_ATOMIC ON CACHE BOOL "") diff --git a/externals/sdl2/SDL b/externals/sdl2/SDL index a1d1946dc..ac13ca9ab 160000 --- a/externals/sdl2/SDL +++ b/externals/sdl2/SDL @@ -1 +1 @@ -Subproject commit a1d1946dcba6509f0679f507b57e7b228d32e6f8 +Subproject commit ac13ca9ab691e13e8eebe9684740ddcb0d716203 diff --git a/src/citra/CMakeLists.txt b/src/citra/CMakeLists.txt index 8b1b59bb9..5793505a2 100644 --- a/src/citra/CMakeLists.txt +++ b/src/citra/CMakeLists.txt @@ -29,13 +29,9 @@ if(UNIX AND NOT APPLE) install(TARGETS citra RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") endif() -if (MSVC) - include(CopyCitraSDLDeps) - copy_citra_SDL_deps(citra) - if (ENABLE_WEB_SERVICE AND OPENSSL_DLL_DIR) - include(CopyCitraOpensslDeps) - copy_citra_openssl_deps(citra) - endif() +if (MSVC AND ENABLE_WEB_SERVICE AND OPENSSL_DLL_DIR) + include(CopyCitraOpensslDeps) + copy_citra_openssl_deps(citra) endif() if (CITRA_USE_PRECOMPILED_HEADERS) diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index b43508968..1ef141b70 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -341,9 +341,7 @@ endif() if (MSVC) include(CopyCitraQt6Deps) - include(CopyCitraSDLDeps) copy_citra_Qt6_deps(citra-qt) - copy_citra_SDL_deps(citra-qt) if (ENABLE_WEB_SERVICE AND OPENSSL_DLL_DIR) include(CopyCitraOpensslDeps) copy_citra_openssl_deps(citra-qt) diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp index 2cb0396a3..29e32e3fe 100644 --- a/src/input_common/gcadapter/gc_adapter.cpp +++ b/src/input_common/gcadapter/gc_adapter.cpp @@ -19,13 +19,19 @@ #include "common/param_package.h" #include "input_common/gcadapter/gc_adapter.h" +// Workaround for older libusb versions not having libusb_init_context. +// libusb_init is deprecated and causes a compile error in newer versions. +#if !defined(LIBUSB_API_VERSION) || (LIBUSB_API_VERSION < 0x0100010A) +#define libusb_init_context(a, b, c) libusb_init(a) +#endif + namespace GCAdapter { Adapter::Adapter() { if (usb_adapter_handle != nullptr) { return; } - const int init_res = libusb_init(&libusb_ctx); + const int init_res = libusb_init_context(&libusb_ctx, nullptr, 0); if (init_res == LIBUSB_SUCCESS) { adapter_scan_thread = std::thread(&Adapter::AdapterScanThread, this); } else { diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index c7de54c0a..2e2589b35 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -57,11 +57,35 @@ typedef struct { } SDL_ExtendedGameControllerBind; +#if SDL_VERSION_ATLEAST(2, 26, 0) +/* our hard coded list of mapping support */ +typedef enum { + SDL_CONTROLLER_MAPPING_PRIORITY_DEFAULT, + SDL_CONTROLLER_MAPPING_PRIORITY_API, + SDL_CONTROLLER_MAPPING_PRIORITY_USER, +} SDL_ControllerMappingPriority; + +typedef struct _ControllerMapping_t { + SDL_JoystickGUID guid; + char* name; + char* mapping; + SDL_ControllerMappingPriority priority; + struct _ControllerMapping_t* next; +} ControllerMapping_t; +#endif + struct _SDL_GameController { +#if SDL_VERSION_ATLEAST(2, 26, 0) + const void* magic; +#endif + SDL_Joystick* joystick; /* underlying joystick device */ int ref_count; const char* name; +#if SDL_VERSION_ATLEAST(2, 26, 0) + ControllerMapping_t* mapping; +#endif int num_bindings; SDL_ExtendedGameControllerBind* bindings; SDL_ExtendedGameControllerBind** last_match_axis;