diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8cf5efbf0..ffe7c22fb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -3,7 +3,16 @@
name: Build and Release
-on: [push, pull_request]
+on:
+ push:
+ paths-ignore:
+ - "documents/**"
+ - "**/*.md"
+
+ pull_request:
+ paths-ignore:
+ - "documents/**"
+ - "**/*.md"
concurrency:
group: ci-${{ github.event_name }}-${{ github.ref }}
diff --git a/.gitmodules b/.gitmodules
index c0ba5e79d..e54658932 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,10 +2,6 @@
path = externals/zlib-ng
url = https://github.com/shadps4-emu/ext-zlib-ng.git
shallow = true
-[submodule "externals/sdl3"]
- path = externals/sdl3
- url = https://github.com/shadps4-emu/ext-SDL.git
- shallow = true
[submodule "externals/fmt"]
path = externals/fmt
url = https://github.com/shadps4-emu/ext-fmt.git
@@ -123,3 +119,10 @@
[submodule "externals/aacdec/fdk-aac"]
path = externals/aacdec/fdk-aac
url = https://android.googlesource.com/platform/external/aac
+[submodule "externals/CLI11"]
+ path = externals/CLI11
+ url = https://github.com/shadexternals/CLI11.git
+[submodule "externals/sdl3"]
+ path = externals/sdl3
+ url = https://github.com/shadexternals/sdl3.git
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ab144aa37..484a1d4d7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+# SPDX-FileCopyrightText: Copyright 2024-2026 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Version 3.24 needed for FetchContent OVERRIDE_FIND_PACKAGE
@@ -202,7 +202,7 @@ execute_process(
# Set Version
set(EMULATOR_VERSION_MAJOR "0")
-set(EMULATOR_VERSION_MINOR "13")
+set(EMULATOR_VERSION_MINOR "14")
set(EMULATOR_VERSION_PATCH "1")
set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}")
@@ -221,6 +221,7 @@ endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(Boost 1.84.0 CONFIG)
+find_package(CLI11 2.6.1 CONFIG)
find_package(FFmpeg 5.1.2 MODULE)
find_package(fmt 10.2.0 CONFIG)
find_package(glslang 15 CONFIG)
@@ -281,15 +282,16 @@ set(AJM_LIB src/core/libraries/ajm/ajm.cpp
set(AUDIO_LIB src/core/libraries/audio/audioin.cpp
src/core/libraries/audio/audioin.h
- src/core/libraries/audio/sdl_in.h
- src/core/libraries/audio/sdl_in.cpp
+ src/core/libraries/audio/audioin_backend.h
+ src/core/libraries/audio/audioin_error.h
+ src/core/libraries/audio/sdl_audio_in.cpp
src/core/libraries/voice/voice.cpp
src/core/libraries/voice/voice.h
src/core/libraries/audio/audioout.cpp
src/core/libraries/audio/audioout.h
src/core/libraries/audio/audioout_backend.h
src/core/libraries/audio/audioout_error.h
- src/core/libraries/audio/sdl_audio.cpp
+ src/core/libraries/audio/sdl_audio_out.cpp
src/core/libraries/ngs2/ngs2.cpp
src/core/libraries/ngs2/ngs2.h
)
@@ -494,6 +496,8 @@ set(HLE_LIBC_INTERNAL_LIB src/core/libraries/libc_internal/libc_internal.cpp
src/core/libraries/libc_internal/libc_internal_str.h
src/core/libraries/libc_internal/libc_internal_math.cpp
src/core/libraries/libc_internal/libc_internal_math.h
+ src/core/libraries/libc_internal/libc_internal_threads.cpp
+ src/core/libraries/libc_internal/libc_internal_threads.h
src/core/libraries/libc_internal/printf.h
)
@@ -524,6 +528,9 @@ set(SYSTEM_GESTURE_LIB
set(PNG_LIB src/core/libraries/libpng/pngdec.cpp
src/core/libraries/libpng/pngdec.h
src/core/libraries/libpng/pngdec_error.h
+ src/core/libraries/libpng/pngenc.cpp
+ src/core/libraries/libpng/pngenc.h
+ src/core/libraries/libpng/pngenc_error.h
)
set(JPEG_LIB src/core/libraries/jpeg/jpeg_error.h
@@ -581,14 +588,21 @@ set(NP_LIBS src/core/libraries/np/np_error.h
src/core/libraries/np/np_commerce.h
src/core/libraries/np/np_manager.cpp
src/core/libraries/np/np_manager.h
+ src/core/libraries/np/np_matching2.cpp
+ src/core/libraries/np/np_matching2.h
src/core/libraries/np/np_score.cpp
src/core/libraries/np/np_score.h
src/core/libraries/np/np_trophy.cpp
src/core/libraries/np/np_trophy.h
+ src/core/libraries/np/np_tus.cpp
+ src/core/libraries/np/np_tus.h
src/core/libraries/np/trophy_ui.cpp
src/core/libraries/np/trophy_ui.h
src/core/libraries/np/np_web_api.cpp
src/core/libraries/np/np_web_api.h
+ src/core/libraries/np/np_web_api_error.h
+ src/core/libraries/np/np_web_api_internal.cpp
+ src/core/libraries/np/np_web_api_internal.h
src/core/libraries/np/np_web_api2.cpp
src/core/libraries/np/np_web_api2.h
src/core/libraries/np/np_party.cpp
@@ -599,6 +613,9 @@ set(NP_LIBS src/core/libraries/np/np_error.h
src/core/libraries/np/np_profile_dialog.h
src/core/libraries/np/np_sns_facebook_dialog.cpp
src/core/libraries/np/np_sns_facebook_dialog.h
+ src/core/libraries/np/np_partner.cpp
+ src/core/libraries/np/np_partner.h
+ src/core/libraries/np/object_manager.h
)
set(ZLIB_LIB src/core/libraries/zlib/zlib.cpp
@@ -744,6 +761,8 @@ set(COMMON src/common/logging/backend.cpp
src/common/memory_patcher.cpp
${CMAKE_CURRENT_BINARY_DIR}/src/common/scm_rev.cpp
src/common/scm_rev.h
+ src/common/key_manager.cpp
+ src/common/key_manager.h
)
if (ENABLE_DISCORD_RPC)
@@ -787,6 +806,8 @@ set(CORE src/core/aerolib/stubs.cpp
src/core/file_format/playgo_chunk.h
src/core/file_format/trp.cpp
src/core/file_format/trp.h
+ src/core/file_format/npbind.cpp
+ src/core/file_format/npbind.h
src/core/file_sys/fs.cpp
src/core/file_sys/fs.h
src/core/ipc/ipc.cpp
@@ -912,6 +933,7 @@ set(SHADER_RECOMPILER src/shader_recompiler/profile.h
src/shader_recompiler/ir/passes/flatten_extended_userdata_pass.cpp
src/shader_recompiler/ir/passes/hull_shader_transform.cpp
src/shader_recompiler/ir/passes/identity_removal_pass.cpp
+ src/shader_recompiler/ir/passes/inject_clip_distance_attributes.cpp
src/shader_recompiler/ir/passes/ir_passes.h
src/shader_recompiler/ir/passes/lower_buffer_format_to_raw.cpp
src/shader_recompiler/ir/passes/lower_fp64_to_fp32.cpp
@@ -1093,7 +1115,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)
+target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac CLI11::CLI11)
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/README.md b/README.md
index 69ee64b13..0fb5c26ed 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
@@ -58,6 +58,11 @@ This project began for fun. Given our limited free time, it may take some time b
# Building
+## Docker
+
+For building shadPS4 in a containerized environment using Docker and VSCode, check the instructions here:
+[**Docker Build Instructions**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-docker.md)
+
## Windows
Check the build instructions for [**Windows**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-windows.md).
@@ -150,7 +155,7 @@ The following firmware modules are supported and must be placed in shadPS4's `sy
| libSceCesCs.sprx | libSceFont.sprx | libSceFontFt.sprx | libSceFreeTypeOt.sprx |
| libSceJpegDec.sprx | libSceJpegEnc.sprx | libSceJson.sprx | libSceJson2.sprx |
| libSceLibcInternal.sprx | libSceNgs2.sprx | libScePngEnc.sprx | libSceRtc.sprx |
-| libSceUlt.sprx | | | |
+| libSceUlt.sprx | libSceAudiodec.sprx | | |
> [!Caution]
diff --git a/REUSE.toml b/REUSE.toml
index 18200ab28..22bed2a50 100644
--- a/REUSE.toml
+++ b/REUSE.toml
@@ -20,6 +20,7 @@ path = [
"documents/Quickstart/2.png",
"documents/Screenshots/*",
"documents/Screenshots/Linux/*",
+ "documents/Screenshots/Windows/*",
"externals/MoltenVK/MoltenVK_icd.json",
"scripts/ps4_names.txt",
"src/images/bronze.png",
diff --git a/dist/net.shadps4.shadPS4.metainfo.xml b/dist/net.shadps4.shadPS4.metainfo.xml
index d2a6747d9..210ca1c5e 100644
--- a/dist/net.shadps4.shadPS4.metainfo.xml
+++ b/dist/net.shadps4.shadPS4.metainfo.xml
@@ -38,6 +38,9 @@
Game
+
+ https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.14.0
+
https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.13.0
diff --git a/documents/Docker Builder/.devcontainer/devcontainer.json b/documents/Docker Builder/.devcontainer/devcontainer.json
new file mode 100644
index 000000000..1139ffa33
--- /dev/null
+++ b/documents/Docker Builder/.devcontainer/devcontainer.json
@@ -0,0 +1,51 @@
+// SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+{
+ "name": "shadPS4-dev",
+ "dockerComposeFile": [
+ "../docker-compose.yml"
+ ],
+ "containerEnv": {
+ "GITHUB_TOKEN": "${localEnv:GITHUB_TOKEN}",
+ "GITHUB_USER": "${localEnv:GITHUB_USER}"
+ },
+ "service": "shadps4",
+ "workspaceFolder": "/workspaces/shadPS4",
+ "remoteUser": "root",
+ "shutdownAction": "none",
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "llvm-vs-code-extensions.vscode-clangd",
+ "ms-vscode.cmake-tools",
+ "xaver.clang-format"
+ ],
+ "settings": {
+ "clangd.arguments": [
+ "--background-index",
+ "--clang-tidy",
+ "--completion-style=detailed",
+ "--header-insertion=never",
+ "--compile-commands-dir=/workspaces/shadPS4/Build/x64-Clang-Release"
+ ],
+ "C_Cpp.intelliSenseEngine": "Disabled"
+ }
+ }
+ },
+ "settings": {
+ "cmake.configureOnOpen": false,
+ "cmake.generator": "Unix Makefiles",
+ "cmake.environment": {
+ "CC": "clang",
+ "CXX": "clang++"
+ },
+ "cmake.configureEnvironment": {
+ "CMAKE_CXX_STANDARD": "23",
+ "CMAKE_CXX_STANDARD_REQUIRED": "ON",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "editor.formatOnSave": true,
+ "clang-format.executable": "clang-format-19"
+ }
+}
\ No newline at end of file
diff --git a/documents/Docker Builder/.docker/Dockerfile b/documents/Docker Builder/.docker/Dockerfile
new file mode 100644
index 000000000..6ca9b2da5
--- /dev/null
+++ b/documents/Docker Builder/.docker/Dockerfile
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+FROM archlinux:latest
+
+RUN pacman-key --init && \
+ pacman-key --populate archlinux && \
+ pacman -Syu --noconfirm
+
+RUN pacman -S --noconfirm \
+ base-devel \
+ clang \
+ clang19 \
+ ninja \
+ git \
+ ca-certificates \
+ wget \
+ alsa-lib \
+ libpulse \
+ openal \
+ openssl \
+ zlib \
+ libedit \
+ systemd-libs \
+ libevdev \
+ sdl2 \
+ jack \
+ sndio \
+ libxtst \
+ vulkan-headers \
+ vulkan-validation-layers \
+ libpng \
+ clang-tools-extra \
+ cmake \
+ libx11 \
+ libxrandr \
+ libxcursor \
+ libxi \
+ libxinerama \
+ libxss \
+ && pacman -Scc --noconfirm
+
+RUN ln -sf /usr/lib/llvm19/bin/clang-format /usr/bin/clang-format-19
+
+WORKDIR /workspaces/shadPS4
\ No newline at end of file
diff --git a/documents/Docker Builder/docker-compose.yml b/documents/Docker Builder/docker-compose.yml
new file mode 100644
index 000000000..39efefa72
--- /dev/null
+++ b/documents/Docker Builder/docker-compose.yml
@@ -0,0 +1,10 @@
+# SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+services:
+ shadps4:
+ build:
+ context: ./.docker
+ volumes:
+ - ./emu:/workspaces/shadPS4:cached
+ tty: true
diff --git a/documents/Screenshots/Windows/vscode-ext-1.png b/documents/Screenshots/Windows/vscode-ext-1.png
new file mode 100644
index 000000000..b8427b80b
Binary files /dev/null and b/documents/Screenshots/Windows/vscode-ext-1.png differ
diff --git a/documents/Screenshots/Windows/vscode-ext-2.png b/documents/Screenshots/Windows/vscode-ext-2.png
new file mode 100644
index 000000000..082e478a4
Binary files /dev/null and b/documents/Screenshots/Windows/vscode-ext-2.png differ
diff --git a/documents/Screenshots/Windows/vscode-ext-3.png b/documents/Screenshots/Windows/vscode-ext-3.png
new file mode 100644
index 000000000..c362d6490
Binary files /dev/null and b/documents/Screenshots/Windows/vscode-ext-3.png differ
diff --git a/documents/building-docker.md b/documents/building-docker.md
new file mode 100644
index 000000000..84d238751
--- /dev/null
+++ b/documents/building-docker.md
@@ -0,0 +1,100 @@
+
+
+# Building shadPS4 with Docker and VSCode Support
+
+This guide explains how to build **shadPS4** using Docker while keeping full compatibility with **VSCode** development.
+
+---
+
+## Prerequisites
+
+Before starting, ensure you have:
+
+- **Docker Engine** or **Docker Desktop** installed
+ [Installation Guide](https://docs.docker.com/engine/install/)
+
+- **Git** installed on your system.
+
+---
+
+## Step 1: Prepare the Docker Environment
+
+Inside the container (or on your host if mounting volumes):
+
+1. Navigate to the repository folder containing the Docker Builder folder:
+
+```bash
+cd
+```
+
+2. Start the Docker container:
+
+```bash
+docker compose up -d
+```
+
+This will spin up a container with all the necessary build dependencies, including Clang, CMake, SDL2, Vulkan, and more.
+
+## Step 2: Clone shadPS4 Source
+
+```bash
+mkdir emu
+cd emu
+git clone --recursive https://github.com/shadps4-emu/shadPS4.git .
+
+or your fork link.
+```
+
+3. Initialize submodules:
+
+```bash
+git submodule update --init --recursive
+```
+
+## Step 3: Build with CMake Tools (GUI)
+
+Generate build with CMake Tools.
+
+1. Go `CMake Tools > Configure > '>'`
+2. And `Build > '>'`
+
+Compiled executable in `Build` folder.
+
+## Alternative Step 3: Build with CMake
+
+Generate the build directory and configure the project using Clang:
+
+```bash
+cmake -S . -B build/ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
+```
+
+Then build the project:
+
+```bash
+cmake --build ./build --parallel $(nproc)
+```
+
+* Tip: To enable debug builds, add -DCMAKE_BUILD_TYPE=Debug to the CMake command.
+
+---
+
+After a successful build, the executable is located at:
+
+```bash
+./build/shadps4
+```
+
+## Step 4: VSCode Integration
+
+1. Open the repository in VSCode.
+2. The CMake Tools extension should automatically detect the build directory inside the container or on your host.
+3. You can configure build options, build, and debug directly from the VSCode interface without extra manual setup.
+
+# Notes
+
+* The Docker environment contains all dependencies, so you don’t need to install anything manually.
+* Using Clang inside Docker ensures consistent builds across Linux and macOS runners.
+* GitHub Actions are recommended for cross-platform builds, including Windows .exe output, which is not trivial to produce locally without Visual Studio or clang-cl.
\ No newline at end of file
diff --git a/documents/building-windows.md b/documents/building-windows.md
index 88c5b6830..8251189ff 100644
--- a/documents/building-windows.md
+++ b/documents/building-windows.md
@@ -41,10 +41,171 @@ Go through the Git for Windows installation as normal
Your shadps4.exe will be in `C:\path\to\source\Build\x64-Clang-Release\`
-## Option 2: MSYS2/MinGW
+## Option 2: VSCode with Visual Studio Build Tools
+
+If your default IDE is VSCode, we have a fully functional example for that as well.
+
+### Requirements
+
+* [**Git for Windows**](https://git-scm.com/download/win)
+* [**LLVM 19.1.1**](https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.1/LLVM-19.1.1-win64.exe)
+* [**CMake 4.2.3 or newer**](https://github.com/Kitware/CMake/releases/download/v4.2.3/cmake-4.2.3-windows-x86_64.msi)
+* [**Ninja 1.13.2 or newer**](https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip)
+
+**The main reason we use clang19 is because that version is used in CI for formatting.**
+
+### Installs
+
+1. Go through the Git for Windows installation as normal
+2. Download and Run LLVM Installer and `Add LLVM to the system PATH for all users`
+3. Download and Run CMake Installer and `Add CMake to the system PATH for all users`
+4. Download Ninja and extract it to `C:\ninja` and add it to the system PATH for all users
+ * You can do this by going to `Search with Start Menu -> Environment Variables -> System Variables -> Path -> Edit -> New -> C:\ninja`
+
+### Validate the installs
+
+```bash
+git --version
+# git version 2.49.0.windows.1
+
+cmake --version
+# cmake version 4.2.3
+
+ninja --version
+# 1.13.2
+
+clang --version
+# clang version 19.1.1
+```
+
+### Install Visual Studio Build Tools
+
+1. Download [Visual Studio Build Tools](https://aka.ms/vs/17/release/vs_BuildTools.exe)
+2. Select `MSVC - Windows SDK` and install (you don't need to install an IDE)
+
+* Or you can install via `.vsconfig` file:
+
+```
+{
+ "version": "1.0",
+ "components": [
+ "Microsoft.VisualStudio.Component.Roslyn.Compiler",
+ "Microsoft.Component.MSBuild",
+ "Microsoft.VisualStudio.Component.CoreBuildTools",
+ "Microsoft.VisualStudio.Workload.MSBuildTools",
+ "Microsoft.VisualStudio.Component.Windows10SDK",
+ "Microsoft.VisualStudio.Component.VC.CoreBuildTools",
+ "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
+ "Microsoft.VisualStudio.Component.VC.Redist.14.Latest",
+ "Microsoft.VisualStudio.Component.Windows11SDK.26100",
+ "Microsoft.VisualStudio.Component.TestTools.BuildTools",
+ "Microsoft.VisualStudio.Component.VC.ASAN",
+ "Microsoft.VisualStudio.Component.TextTemplating",
+ "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core",
+ "Microsoft.VisualStudio.Workload.VCTools"
+ ],
+ "extensions": []
+}
+
+Save the file as `.vsconfig` and run the following command:
+
+%userprofile%\Downloads\vs_BuildTools.exe --passive --config ".vsconfig"
+
+Be carefull path to vs_BuildTools.exe and .vsconfig file.
+```
+
+__This will install the necessary components to build shadPS4.__
+
+### Project structure
+
+```
+shadps4/
+ ├── shared (shadps4 main files)
+ └── shadps4.code-workspace
+```
+
+### Content of `shadps4.code-workspace`
+
+```json
+{
+ "folders": [
+ {
+ "path": "shared"
+ }
+ ],
+ "settings": {
+ "cmake.generator": "Ninja",
+
+ "cmake.configureEnvironment": {
+ "CMAKE_CXX_STANDARD": "23",
+ "CMAKE_CXX_STANDARD_REQUIRED": "ON",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+
+ "cmake.configureOnOpen": false,
+
+ "C_Cpp.intelliSenseEngine": "Disabled",
+
+ "clangd.arguments": [
+ "--background-index",
+ "--clang-tidy",
+ "--completion-style=detailed",
+ "--header-insertion=never",
+ "--compile-commands-dir=Build/x64-Clang-Release"
+ ],
+
+ "editor.formatOnSave": true,
+ "clang-format.executable": "clang-format"
+ },
+
+ "extensions": {
+ "recommendations": [
+ "llvm-vs-code-extensions.vscode-clangd",
+ "ms-vscode.cmake-tools",
+ "xaver.clang-format"
+ ]
+ }
+}
+```
+
+### Cloning the source code
+
+1. Open your terminal and where to shadPS4 folder: `cd shadps4\shared`
+3. Clone the repository by running
+ `git clone --depth 1 --recursive https://github.com/shadps4-emu/shadPS4 .`
+
+_or fork link_
+
+* If you have already cloned repo:
+```bash
+git submodule update --init --recursive
+```
+
+### Requirements VSCode extensions
+1. CMake Tools
+2. Clangd
+3. Clang-Format
+
+_These plugins are suggested in the workspace file above and are already configured._
+
+
+
+
+
+
+
+### Building
+1. Open VS Code, `File > Open workspace from file > shadps4.code-workspace`
+2. Go to the CMake Tools extension on left side bar
+3. Change Clang x64 Debug to Clang x64 Release if you want a regular, non-debug build.
+4. Click build.
+
+Your shadps4.exe will be in `shadps4\shared\Build\x64-Clang-Release\`
+
+## Option 3: MSYS2/MinGW
> [!IMPORTANT]
-> Building with MSYS2 is broken as of right now, the only way to build on Windows is to use [Option 1: Visual Studio 2022](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-windows.md#option-1-visual-studio-2022).
+> Building with MSYS2 is broken as of right now, the only way to build on Windows is to use [Option 1: Visual Studio 2022](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-windows.md#option-1-visual-studio-2022) or [Option 2: VSCode with Visual Studio Build Tools](#option-2-vscode-with-visual-studio-build-tools).
### (Prerequisite) Download [**MSYS2**](https://www.msys2.org/)
diff --git a/externals/CLI11 b/externals/CLI11
new file mode 160000
index 000000000..bf5a16a26
--- /dev/null
+++ b/externals/CLI11
@@ -0,0 +1 @@
+Subproject commit bf5a16a26a34a9a7ad75f4a7705585e44675fef0
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index 8e96f9bec..80a6ff7e2 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+# SPDX-FileCopyrightText: Copyright 2024-2026 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
set(BUILD_SHARED_LIBS OFF)
@@ -204,6 +204,7 @@ add_subdirectory(tracy)
# pugixml
if (NOT TARGET pugixml::pugixml)
+ option(PUGIXML_NO_EXCEPTIONS "" ON)
add_subdirectory(pugixml)
endif()
@@ -268,3 +269,10 @@ add_subdirectory(json)
# miniz
add_subdirectory(miniz)
+
+# cli11
+if (NOT TARGET CLI11::CLI11)
+ set(CLI11_BUILD_TESTS OFF CACHE BOOL "" FORCE)
+ set(CLI11_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
+ add_subdirectory(CLI11)
+endif()
diff --git a/externals/MoltenVK b/externals/MoltenVK
index f168dec05..f79c6c569 160000
--- a/externals/MoltenVK
+++ b/externals/MoltenVK
@@ -1 +1 @@
-Subproject commit f168dec05998ab0ca09a400bab6831a95c0bdb2e
+Subproject commit f79c6c5690d3ee06ec3a00d11a8b1bab4aa1d030
diff --git a/src/common/config.cpp b/src/common/config.cpp
index eac463d0a..657943c95 100644
--- a/src/common/config.cpp
+++ b/src/common/config.cpp
@@ -1,7 +1,8 @@
-// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
+// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include
+#include