Skip to content

Commit 47fc241

Browse files
committed
Input: Update SDL for Linux and explicitly set Steamdeck controller hint
1 parent ebb5ab5 commit 47fc241

File tree

7 files changed

+273
-1
lines changed

7 files changed

+273
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
diff --git a/SDL2Config.cmake.in b/SDL2Config.cmake.in
2+
index cc8bcf26d..ead829767 100644
3+
--- a/SDL2Config.cmake.in
4+
+++ b/SDL2Config.cmake.in
5+
@@ -35,7 +35,8 @@ include("${CMAKE_CURRENT_LIST_DIR}/sdlfind.cmake")
6+
7+
set(SDL_ALSA @SDL_ALSA@)
8+
set(SDL_ALSA_SHARED @SDL_ALSA_SHARED@)
9+
-if(SDL_ALSA AND NOT SDL_ALSA_SHARED AND TARGET SDL2::SDL2-static)
10+
+if(SDL_ALSA)
11+
+ set(CMAKE_REQUIRE_FIND_PACKAGE_ALSA 1)
12+
sdlFindALSA()
13+
endif()
14+
unset(SDL_ALSA)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
diff --git a/CMakeLists.txt b/CMakeLists.txt
2+
index 2a91824..a8e9de4 100644
3+
--- a/CMakeLists.txt
4+
+++ b/CMakeLists.txt
5+
@@ -3162,6 +3162,19 @@ set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
6+
list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
7+
listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
8+
set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
9+
+if("${SOURCE_FILES};" MATCHES "[.]cpp;")
10+
+ set(FAKE_CXX_LINKAGE "")
11+
+ foreach(lib IN LISTS CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
12+
+ if(lib IN_LIST CMAKE_C_IMPLICIT_LINK_LIBRARIES)
13+
+ continue()
14+
+ elseif(EXISTS "${lib}")
15+
+ string(APPEND FAKE_CXX_LINKAGE " ${CMAKE_LINK_LIBRARY_FILE_FLAG}${lib}")
16+
+ else()
17+
+ string(APPEND FAKE_CXX_LINKAGE " ${CMAKE_LINK_LIBRARY_FLAG}${lib}")
18+
+ endif()
19+
+ endforeach()
20+
+ string(APPEND SDL_STATIC_LIBS "${FAKE_CXX_LINKAGE}")
21+
+endif()
22+
listtostr(SDL_LIBS _SDL_LIBS)
23+
set(SDL_LIBS ${_SDL_LIBS})
24+
listtostr(SDL_CFLAGS _SDL_CFLAGS "")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake
2+
index 65a98efbe..2f99f28f1 100644
3+
--- a/cmake/sdlchecks.cmake
4+
+++ b/cmake/sdlchecks.cmake
5+
@@ -352,7 +352,7 @@ endmacro()
6+
# - HAVE_SDL_LOADSO opt
7+
macro(CheckLibSampleRate)
8+
if(SDL_LIBSAMPLERATE)
9+
- find_package(SampleRate QUIET)
10+
+ find_package(SampleRate CONFIG REQUIRED)
11+
if(SampleRate_FOUND AND TARGET SampleRate::samplerate)
12+
set(HAVE_LIBSAMPLERATE TRUE)
13+
set(HAVE_LIBSAMPLERATE_H TRUE)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
vcpkg_from_github(
2+
OUT_SOURCE_PATH SOURCE_PATH
3+
REPO libsdl-org/SDL
4+
REF "release-${VERSION}"
5+
SHA512 0ce3aa0bd340465039c4dad8e562b4ac612932e23f011629522ceaf9cd3317b2a1905b30f190a5e6d79ac43a7a5db75dff712600570776e5bbef41fbedaab5c4
6+
HEAD_REF main
7+
PATCHES
8+
deps.patch
9+
alsa-dep-fix.patch
10+
cxx-linkage-pkgconfig.diff
11+
)
12+
13+
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" SDL_STATIC)
14+
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" SDL_SHARED)
15+
string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" FORCE_STATIC_VCRT)
16+
17+
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
18+
FEATURES
19+
alsa SDL_ALSA
20+
dbus SDL_DBUS
21+
ibus SDL_IBUS
22+
samplerate SDL_LIBSAMPLERATE
23+
vulkan SDL_VULKAN
24+
wayland SDL_WAYLAND
25+
x11 SDL_X11
26+
)
27+
28+
if ("x11" IN_LIST FEATURES)
29+
message(WARNING "You will need to install Xorg dependencies to use feature x11:\nsudo apt install libx11-dev libxft-dev libxext-dev\n")
30+
endif()
31+
if ("wayland" IN_LIST FEATURES)
32+
message(WARNING "You will need to install Wayland dependencies to use feature wayland:\nsudo apt install libwayland-dev libxkbcommon-dev libegl1-mesa-dev\n")
33+
endif()
34+
if ("ibus" IN_LIST FEATURES)
35+
message(WARNING "You will need to install ibus dependencies to use feature ibus:\nsudo apt install libibus-1.0-dev\n")
36+
endif()
37+
38+
if(VCPKG_TARGET_IS_UWP)
39+
set(configure_opts WINDOWS_USE_MSBUILD)
40+
endif()
41+
42+
vcpkg_cmake_configure(
43+
SOURCE_PATH "${SOURCE_PATH}"
44+
${configure_opts}
45+
OPTIONS ${FEATURE_OPTIONS}
46+
-DSDL_STATIC=${SDL_STATIC}
47+
-DSDL_SHARED=${SDL_SHARED}
48+
-DSDL_FORCE_STATIC_VCRT=${FORCE_STATIC_VCRT}
49+
-DSDL_LIBC=ON
50+
-DSDL_TEST=OFF
51+
-DSDL_INSTALL_CMAKEDIR=cmake
52+
-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON
53+
-DSDL_LIBSAMPLERATE_SHARED=OFF
54+
MAYBE_UNUSED_VARIABLES
55+
SDL_FORCE_STATIC_VCRT
56+
)
57+
58+
vcpkg_cmake_install()
59+
vcpkg_cmake_config_fixup(CONFIG_PATH cmake)
60+
61+
file(REMOVE_RECURSE
62+
"${CURRENT_PACKAGES_DIR}/debug/include"
63+
"${CURRENT_PACKAGES_DIR}/debug/share"
64+
"${CURRENT_PACKAGES_DIR}/bin/sdl2-config"
65+
"${CURRENT_PACKAGES_DIR}/debug/bin/sdl2-config"
66+
"${CURRENT_PACKAGES_DIR}/SDL2.framework"
67+
"${CURRENT_PACKAGES_DIR}/debug/SDL2.framework"
68+
"${CURRENT_PACKAGES_DIR}/share/licenses"
69+
"${CURRENT_PACKAGES_DIR}/share/aclocal"
70+
)
71+
72+
file(GLOB BINS "${CURRENT_PACKAGES_DIR}/debug/bin/*" "${CURRENT_PACKAGES_DIR}/bin/*")
73+
if(NOT BINS)
74+
file(REMOVE_RECURSE
75+
"${CURRENT_PACKAGES_DIR}/bin"
76+
"${CURRENT_PACKAGES_DIR}/debug/bin"
77+
)
78+
endif()
79+
80+
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP AND NOT VCPKG_TARGET_IS_MINGW)
81+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
82+
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib/manual-link")
83+
file(RENAME "${CURRENT_PACKAGES_DIR}/lib/SDL2main.lib" "${CURRENT_PACKAGES_DIR}/lib/manual-link/SDL2main.lib")
84+
endif()
85+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
86+
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link")
87+
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/SDL2maind.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link/SDL2maind.lib")
88+
endif()
89+
90+
file(GLOB SHARE_FILES "${CURRENT_PACKAGES_DIR}/share/sdl2/*.cmake")
91+
foreach(SHARE_FILE ${SHARE_FILES})
92+
vcpkg_replace_string("${SHARE_FILE}" "lib/SDL2main" "lib/manual-link/SDL2main" IGNORE_UNCHANGED)
93+
endforeach()
94+
endif()
95+
96+
vcpkg_copy_pdbs()
97+
98+
set(DYLIB_COMPATIBILITY_VERSION_REGEX "set\\(DYLIB_COMPATIBILITY_VERSION (.+)\\)")
99+
set(DYLIB_CURRENT_VERSION_REGEX "set\\(DYLIB_CURRENT_VERSION (.+)\\)")
100+
file(STRINGS "${SOURCE_PATH}/CMakeLists.txt" DYLIB_COMPATIBILITY_VERSION REGEX ${DYLIB_COMPATIBILITY_VERSION_REGEX})
101+
file(STRINGS "${SOURCE_PATH}/CMakeLists.txt" DYLIB_CURRENT_VERSION REGEX ${DYLIB_CURRENT_VERSION_REGEX})
102+
string(REGEX REPLACE ${DYLIB_COMPATIBILITY_VERSION_REGEX} "\\1" DYLIB_COMPATIBILITY_VERSION "${DYLIB_COMPATIBILITY_VERSION}")
103+
string(REGEX REPLACE ${DYLIB_CURRENT_VERSION_REGEX} "\\1" DYLIB_CURRENT_VERSION "${DYLIB_CURRENT_VERSION}")
104+
105+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT VCPKG_TARGET_IS_ANDROID)
106+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2main" "-lSDL2maind" IGNORE_UNCHANGED)
107+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2 " "-lSDL2d " IGNORE_UNCHANGED)
108+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2-static " "-lSDL2-staticd " IGNORE_UNCHANGED)
109+
endif()
110+
111+
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
112+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
113+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/sdl2.pc" "-lSDL2-static " " ")
114+
endif()
115+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
116+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-lSDL2-staticd " " ")
117+
endif()
118+
endif()
119+
120+
if(VCPKG_TARGET_IS_UWP)
121+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
122+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/sdl2.pc" "$<$<CONFIG:Debug>:d>.lib" "")
123+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/sdl2.pc" "-l-nodefaultlib:" "-nodefaultlib:")
124+
endif()
125+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
126+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "$<$<CONFIG:Debug>:d>.lib" "d")
127+
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/sdl2.pc" "-l-nodefaultlib:" "-nodefaultlib:")
128+
endif()
129+
endif()
130+
131+
vcpkg_fixup_pkgconfig()
132+
133+
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
134+
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.txt")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
sdl2 provides CMake targets:
2+
3+
find_package(SDL2 CONFIG REQUIRED)
4+
target_link_libraries(main
5+
PRIVATE
6+
$<TARGET_NAME_IF_EXISTS:SDL2::SDL2main>
7+
$<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>
8+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"name": "sdl2",
3+
"version": "2.30.12",
4+
"description": "Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.",
5+
"homepage": "https://www.libsdl.org/download-2.0.php",
6+
"license": "Zlib",
7+
"dependencies": [
8+
{
9+
"name": "vcpkg-cmake",
10+
"host": true
11+
},
12+
{
13+
"name": "vcpkg-cmake-config",
14+
"host": true
15+
}
16+
],
17+
"default-features": [
18+
{
19+
"name": "dbus",
20+
"platform": "linux"
21+
},
22+
{
23+
"name": "ibus",
24+
"platform": "linux"
25+
},
26+
{
27+
"name": "wayland",
28+
"platform": "linux"
29+
},
30+
{
31+
"name": "x11",
32+
"platform": "linux"
33+
}
34+
],
35+
"features": {
36+
"alsa": {
37+
"description": "Support for alsa audio",
38+
"dependencies": [
39+
{
40+
"name": "alsa",
41+
"platform": "linux"
42+
}
43+
]
44+
},
45+
"dbus": {
46+
"description": "Build with D-Bus support",
47+
"dependencies": [
48+
{
49+
"name": "dbus",
50+
"default-features": false,
51+
"platform": "linux"
52+
}
53+
]
54+
},
55+
"ibus": {
56+
"description": "Build with ibus IME support",
57+
"supports": "linux"
58+
},
59+
"samplerate": {
60+
"description": "Use libsamplerate for audio rate conversion",
61+
"dependencies": [
62+
"libsamplerate"
63+
]
64+
},
65+
"vulkan": {
66+
"description": "Vulkan functionality for SDL"
67+
},
68+
"wayland": {
69+
"description": "Build with Wayland support",
70+
"supports": "linux"
71+
},
72+
"x11": {
73+
"description": "Build with X11 support",
74+
"supports": "!windows"
75+
}
76+
}
77+
}

src/input/api/SDL/SDLControllerProvider.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ SDLControllerProvider::SDLControllerProvider()
2929
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1");
3030
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_STADIA, "1");
3131
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_STEAM, "1");
32+
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK, "1");
3233
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_LUNA, "1");
3334

3435
if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC | SDL_INIT_EVENTS) < 0)
3536
throw std::runtime_error(fmt::format("couldn't initialize SDL: {}", SDL_GetError()));
3637

3738

38-
if (SDL_GameControllerEventState(SDL_ENABLE) < 0) {
39+
if (SDL_GameControllerEventState(SDL_ENABLE) < 0)
40+
{
3941
cemuLog_log(LogType::Force, "Couldn't enable SDL gamecontroller event polling: {}", SDL_GetError());
4042
}
4143

0 commit comments

Comments
 (0)