diff --git a/.gitmodules b/.gitmodules
index bac18a1143..8e701abf03 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -63,3 +63,6 @@
[submodule "Externals/fmt/fmt"]
path = Externals/fmt/fmt
url = https://github.com/fmtlib/fmt.git
+[submodule "Externals/lz4/lz4"]
+ path = Externals/lz4/lz4
+ url = https://github.com/lz4/lz4
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6e3601ce2..b1eede22aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -682,6 +682,8 @@ dolphin_find_optional_system_library_pkgconfig(MINIZIP minizip>=3.0.0 minizip::m
dolphin_find_optional_system_library(LZO Externals/LZO)
+dolphin_find_optional_system_library_pkgconfig(lz4 liblz4>=1.8 LZ4::LZ4 Externals/lz4)
+
dolphin_find_optional_system_library_pkgconfig(SPNG spng spng::spng Externals/libspng)
# Using static FreeSurround from Externals
diff --git a/Externals/lz4/CMakeLists.txt b/Externals/lz4/CMakeLists.txt
new file mode 100644
index 0000000000..065e52593a
--- /dev/null
+++ b/Externals/lz4/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.13)
+
+# We only want the static library, nothing else.
+set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
+set(LZ4_BUILD_CLI OFF)
+set(LZ4_BUILD_LEGACY_LZ4C OFF)
+set(LZ4_BUNDLED_MODE ON)
+
+add_subdirectory(lz4/build/cmake)
+
+dolphin_disable_warnings_msvc(lz4_static)
+add_library(LZ4::LZ4 ALIAS lz4_static)
+
diff --git a/Externals/lz4/LZ4.vcxproj b/Externals/lz4/LZ4.vcxproj
new file mode 100644
index 0000000000..4bb1b83268
--- /dev/null
+++ b/Externals/lz4/LZ4.vcxproj
@@ -0,0 +1,34 @@
+
+
+
+
+
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Externals/lz4/exports.props b/Externals/lz4/exports.props
new file mode 100644
index 0000000000..58d3c4d3ec
--- /dev/null
+++ b/Externals/lz4/exports.props
@@ -0,0 +1,13 @@
+
+
+
+
+ $(ExternalsDir)lz4\lz4\lib;%(AdditionalIncludeDirectories)
+
+
+
+
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}
+
+
+
diff --git a/Externals/lz4/lz4 b/Externals/lz4/lz4
new file mode 160000
index 0000000000..5fc0630a0e
--- /dev/null
+++ b/Externals/lz4/lz4
@@ -0,0 +1 @@
+Subproject commit 5fc0630a0ed55e9755b0fe3990cd021ae1c3edc1
diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt
index 60f3c54a84..4a40eb7ec8 100644
--- a/Source/Core/Core/CMakeLists.txt
+++ b/Source/Core/Core/CMakeLists.txt
@@ -627,6 +627,7 @@ PRIVATE
FatFs
fmt::fmt
LZO::LZO
+ LZ4::LZ4
ZLIB::ZLIB
)
diff --git a/Source/Core/DolphinLib.vcxproj b/Source/Core/DolphinLib.vcxproj
index 827652cae7..d2071d6618 100644
--- a/Source/Core/DolphinLib.vcxproj
+++ b/Source/Core/DolphinLib.vcxproj
@@ -46,6 +46,7 @@
+
diff --git a/Source/dolphin-emu.sln b/Source/dolphin-emu.sln
index 916bc2ec73..ebb269de71 100644
--- a/Source/dolphin-emu.sln
+++ b/Source/dolphin-emu.sln
@@ -25,6 +25,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Languages", "..\Languages\L
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LZO", "..\Externals\LZO\LZO.vcxproj", "{AB993F38-C31D-4897-B139-A620C42BC565}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lz4", "..\Externals\LZ4\LZ4.vcxproj", "{9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}"
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniupnpc", "..\Externals\miniupnpc\miniupnpc.vcxproj", "{31643FDB-1BB8-4965-9DE7-000FC88D35AE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xxhash", "..\Externals\xxhash\xxhash.vcxproj", "{677EA016-1182-440C-9345-DC88D1E98C0C}"
@@ -173,6 +175,14 @@ Global
{AB993F38-C31D-4897-B139-A620C42BC565}.Release|ARM64.Build.0 = Release|ARM64
{AB993F38-C31D-4897-B139-A620C42BC565}.Release|x64.ActiveCfg = Release|x64
{AB993F38-C31D-4897-B139-A620C42BC565}.Release|x64.Build.0 = Release|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|ARM64.ActiveCfg = Debug|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|ARM64.Build.0 = Debug|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|x64.ActiveCfg = Debug|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Debug|x64.Build.0 = Debug|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|ARM64.ActiveCfg = Release|ARM64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|ARM64.Build.0 = Release|ARM64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|x64.ActiveCfg = Release|x64
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476}.Release|x64.Build.0 = Release|x64
{31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|ARM64.ActiveCfg = Debug|ARM64
{31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|ARM64.Build.0 = Debug|ARM64
{31643FDB-1BB8-4965-9DE7-000FC88D35AE}.Debug|x64.ActiveCfg = Debug|x64
@@ -436,6 +446,7 @@ Global
GlobalSection(NestedProjects) = preSolution
{8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}
{AB993F38-C31D-4897-B139-A620C42BC565} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}
+ {9092C5CC-3E71-41B3-BF68-4A7BDD8A5476} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}
{31643FDB-1BB8-4965-9DE7-000FC88D35AE} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}
{677EA016-1182-440C-9345-DC88D1E98C0C} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}
{F6EA7144-8D64-4EBB-A13E-76DFBD911EAE} = {87ADDFF9-5768-4DA2-A33B-2477593D6677}