diff --git a/.gitmodules b/.gitmodules
index 64995f1c31..54b352717b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -84,3 +84,6 @@
[submodule "Externals/Vulkan-Headers"]
path = Externals/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git
+[submodule "Externals/watcher/watcher"]
+ path = Externals/watcher/watcher
+ url = https://github.com/e-dant/watcher.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5b246b193b..037242abb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -775,6 +775,8 @@ if (USE_RETRO_ACHIEVEMENTS)
add_subdirectory(Externals/rcheevos)
endif()
+add_subdirectory(Externals/watcher)
+
########################################
# Pre-build events: Define configuration variables and write SCM info header
#
diff --git a/Externals/watcher/CMakeLists.txt b/Externals/watcher/CMakeLists.txt
new file mode 100644
index 0000000000..097f16d647
--- /dev/null
+++ b/Externals/watcher/CMakeLists.txt
@@ -0,0 +1,4 @@
+add_library(watcher INTERFACE IMPORTED GLOBAL)
+set_target_properties(watcher PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/watcher/include
+)
diff --git a/Externals/watcher/watcher b/Externals/watcher/watcher
new file mode 160000
index 0000000000..0d6b9b409c
--- /dev/null
+++ b/Externals/watcher/watcher
@@ -0,0 +1 @@
+Subproject commit 0d6b9b409ccaed6313437ea3dc8b2fc078f3d25b
diff --git a/Source/Core/VideoCommon/CMakeLists.txt b/Source/Core/VideoCommon/CMakeLists.txt
index e24680185e..039e1abad9 100644
--- a/Source/Core/VideoCommon/CMakeLists.txt
+++ b/Source/Core/VideoCommon/CMakeLists.txt
@@ -219,6 +219,7 @@ PRIVATE
implot
glslang
tinygltf
+ watcher
)
if(_M_X86_64)
diff --git a/Source/VSProps/Base.Dolphin.props b/Source/VSProps/Base.Dolphin.props
index d3ef409c9e..53e5ec264c 100644
--- a/Source/VSProps/Base.Dolphin.props
+++ b/Source/VSProps/Base.Dolphin.props
@@ -16,6 +16,7 @@
$(ExternalsDir)rangeset\include;%(AdditionalIncludeDirectories)
$(ExternalsDir)Vulkan-Headers\include;%(AdditionalIncludeDirectories)
$(ExternalsDir)VulkanMemoryAllocator\include;%(AdditionalIncludeDirectories)
+ $(ExternalsDir)watcher\watcher\include;%(AdditionalIncludeDirectories)
$(ExternalsDir)WIL\include;%(AdditionalIncludeDirectories)
WIL_SUPPRESS_EXCEPTIONS;%(PreprocessorDefinitions)