diff --git a/.gitmodules b/.gitmodules index e54658932..55ae48ea3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -126,3 +126,10 @@ path = externals/sdl3 url = https://github.com/shadexternals/sdl3.git + branch = main +[submodule "externals/cpp-httplib"] + path = externals/cpp-httplib + url = https://github.com/shadexternals/cpp-httplib.git +[submodule "externals/openal-soft"] + path = externals/openal-soft + url = https://github.com/shadexternals/openal-soft.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a091539e2..099ad0be0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -228,6 +228,7 @@ find_package(glslang 15 CONFIG) find_package(half 1.12.0 MODULE) find_package(magic_enum 0.9.7 CONFIG) find_package(PNG 1.6 MODULE) +find_package(OpenAL CONFIG) find_package(RenderDoc 1.6.0 MODULE) find_package(SDL3_mixer 2.8.1 CONFIG) if (SDL3_mixer_FOUND) @@ -1119,7 +1120,7 @@ create_target_directory_groups(shadps4) target_link_libraries(shadps4 PRIVATE magic_enum::magic_enum fmt::fmt toml11::toml11 tsl::robin_map xbyak::xbyak Tracy::TracyClient RenderDoc::API FFmpeg::ffmpeg Dear_ImGui gcn half::half ZLIB::ZLIB PNG::PNG) target_link_libraries(shadps4 PRIVATE Boost::headers GPUOpen::VulkanMemoryAllocator LibAtrac9 sirit Vulkan::Headers xxHash::xxhash Zydis::Zydis glslang::glslang SDL3::SDL3 SDL3_mixer::SDL3_mixer pugixml::pugixml) -target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac CLI11::CLI11) +target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac CLI11::CLI11 OpenAL::OpenAL Cpp_Httplib) target_compile_definitions(shadps4 PRIVATE IMGUI_USER_CONFIG="imgui/imgui_config.h") target_compile_definitions(Dear_ImGui PRIVATE IMGUI_USER_CONFIG="${PROJECT_SOURCE_DIR}/src/imgui/imgui_config.h") diff --git a/externals/CLI11 b/externals/CLI11 index bf5a16a26..617af2722 160000 --- a/externals/CLI11 +++ b/externals/CLI11 @@ -1 +1 @@ -Subproject commit bf5a16a26a34a9a7ad75f4a7705585e44675fef0 +Subproject commit 617af272277f8c5aefdc20894b0ebef1cd6b0104 diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 80a6ff7e2..7f6e6ec4e 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -276,3 +276,41 @@ if (NOT TARGET CLI11::CLI11) set(CLI11_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(CLI11) endif() + + +#openal +if (NOT TARGET OpenAL::OpenAL) +set(ALSOFT_ENABLE_MODULES OFF CACHE BOOL "" FORCE) +set(LIBTYPE "STATIC" CACHE STRING "" FORCE) +# Disable everything we don't need +set(ALSOFT_UTILS OFF CACHE BOOL "" FORCE) +set(ALSOFT_EXAMPLES OFF CACHE BOOL "" FORCE) +set(ALSOFT_TESTS OFF CACHE BOOL "" FORCE) +set(ALSOFT_INSTALL OFF CACHE BOOL "" FORCE) +set(ALSOFT_CONFIG OFF CACHE BOOL "" FORCE) + +# Backends (platform-specific) +if (WIN32) + set(ALSOFT_BACKEND_WASAPI ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_DSOUND OFF CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_WINMM OFF CACHE BOOL "" FORCE) +elseif (APPLE) + set(ALSOFT_BACKEND_COREAUDIO ON CACHE BOOL "" FORCE) +else() + set(ALSOFT_BACKEND_ALSA ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_PULSEAUDIO ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_PIPEWIRE OFF CACHE BOOL "" FORCE) +endif() +# Headless-safe +set(ALSOFT_BACKEND_NULL ON CACHE BOOL "" FORCE) + +# Static build +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + +add_subdirectory(openal-soft EXCLUDE_FROM_ALL) +endif() + +# cpp-httplib +add_library(Cpp_Httplib INTERFACE) +target_include_directories(Cpp_Httplib INTERFACE cpp-httplib/) + diff --git a/externals/cpp-httplib b/externals/cpp-httplib new file mode 160000 index 000000000..f80864ca0 --- /dev/null +++ b/externals/cpp-httplib @@ -0,0 +1 @@ +Subproject commit f80864ca031932351abef49b74097c67f14719c6 diff --git a/externals/openal-soft b/externals/openal-soft new file mode 160000 index 000000000..f120be6e2 --- /dev/null +++ b/externals/openal-soft @@ -0,0 +1 @@ +Subproject commit f120be6e2e7d2eb37a70f8adb5a98e5a645c5349 diff --git a/externals/sdl3 b/externals/sdl3 index bdb72bb3f..4e2fd57e7 160000 --- a/externals/sdl3 +++ b/externals/sdl3 @@ -1 +1 @@ -Subproject commit bdb72bb3f051de32c91f5deb439a50bfd51499dc +Subproject commit 4e2fd57e77fb4a28c0eeef0670fc4121cc2cf1f9 diff --git a/src/core/libraries/np/np_web_api_internal.cpp b/src/core/libraries/np/np_web_api_internal.cpp index 838ba005f..3d52ae8d7 100644 --- a/src/core/libraries/np/np_web_api_internal.cpp +++ b/src/core/libraries/np/np_web_api_internal.cpp @@ -65,7 +65,7 @@ s32 createLibraryContext(s32 libHttpCtxId, u64 poolSize, const char* name, s32 t OrbisNpWebApiContext* findAndValidateContext(s32 libCtxId, s32 flag) { std::scoped_lock lk{g_global_mutex}; - if (libCtxId < 1 || libCtxId >= 0x8000) { + if (libCtxId < 1 || libCtxId >= 0x8000 || !g_contexts.contains(libCtxId)) { return nullptr; } auto& context = g_contexts[libCtxId]; diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index 4b1e8d876..f1de5940a 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -398,6 +398,9 @@ int ProcessStates(s32 handle, OrbisPadData* pData, Input::GameController& contro int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) { LOG_TRACE(Lib_Pad, "called"); + if (handle < 1) { + return ORBIS_PAD_ERROR_INVALID_HANDLE; + } int connected_count = 0; bool connected = false; std::vector states(64);