diff --git a/.gitmodules b/.gitmodules
index 94d60fb94e..4b6ce17758 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -45,3 +45,6 @@
url = https://github.com/mozilla/cubeb.git
branch = master
shallow = true
+[submodule "Externals/implot/implot"]
+ path = Externals/implot/implot
+ url = https://github.com/epezent/implot.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 799ddcb238..c8c494bfdb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -693,6 +693,7 @@ else()
add_subdirectory(Externals/fmt EXCLUDE_FROM_ALL)
endif()
add_subdirectory(Externals/imgui)
+add_subdirectory(Externals/implot)
add_subdirectory(Externals/glslang)
add_subdirectory(Externals/spirv_cross)
diff --git a/Externals/implot/CMakeLists.txt b/Externals/implot/CMakeLists.txt
new file mode 100644
index 0000000000..dfe34a34b1
--- /dev/null
+++ b/Externals/implot/CMakeLists.txt
@@ -0,0 +1,23 @@
+if(NOT MSVC)
+ set(CMAKE_CXX_STANDARD 20)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+endif()
+
+set(SRCS
+ implot/implot.cpp
+ implot/implot_items.cpp
+ implot/implot_demo.cpp
+)
+
+add_library(implot STATIC ${SRCS})
+dolphin_disable_warnings_msvc(implot)
+target_include_directories(implot
+ PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/implot"
+ PRIVATE imgui
+)
+
+target_link_libraries(implot
+ PRIVATE imgui
+ PRIVATE fmt::fmt
+)
diff --git a/Externals/implot/LICENSE b/Externals/implot/LICENSE
new file mode 100644
index 0000000000..3995ef7c57
--- /dev/null
+++ b/Externals/implot/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Evan Pezent
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Externals/implot/exports.props b/Externals/implot/exports.props
new file mode 100644
index 0000000000..e3505c623c
--- /dev/null
+++ b/Externals/implot/exports.props
@@ -0,0 +1,14 @@
+
+
+
+
+ $(ExternalsDir)imgui;%(AdditionalIncludeDirectories)
+ $(ExternalsDir)implot;%(AdditionalIncludeDirectories)
+
+
+
+
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}
+
+
+
diff --git a/Externals/implot/implot b/Externals/implot/implot
new file mode 160000
index 0000000000..d875123534
--- /dev/null
+++ b/Externals/implot/implot
@@ -0,0 +1 @@
+Subproject commit d87512353495e7760e7fda7566a05beef7627d8f
diff --git a/Externals/implot/implot.vcxproj b/Externals/implot/implot.vcxproj
new file mode 100644
index 0000000000..d0e7557c5c
--- /dev/null
+++ b/Externals/implot/implot.vcxproj
@@ -0,0 +1,38 @@
+
+
+
+
+
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(CoreDir);%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Core/DolphinLib.vcxproj b/Source/Core/DolphinLib.vcxproj
index 1aad7a65c3..5875de1550 100644
--- a/Source/Core/DolphinLib.vcxproj
+++ b/Source/Core/DolphinLib.vcxproj
@@ -41,6 +41,7 @@
+
diff --git a/Source/Core/DolphinQt/CMakeLists.txt b/Source/Core/DolphinQt/CMakeLists.txt
index d5025114af..79bd9c7509 100644
--- a/Source/Core/DolphinQt/CMakeLists.txt
+++ b/Source/Core/DolphinQt/CMakeLists.txt
@@ -612,12 +612,12 @@ if(APPLE)
add_custom_command(TARGET dolphin-emu
POST_BUILD COMMAND
/usr/bin/codesign -f -s "${MACOS_CODE_SIGNING_IDENTITY}" --deep --options=runtime --entitlements "${CMAKE_SOURCE_DIR}/Source/Core/DolphinQt/DolphinEmu$<$:Debug>.entitlements" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Dolphin.app" || true)
-
+
# Code sign builds for build systems that do have release/debug variants (Xcode)
add_custom_command(TARGET dolphin-emu
POST_BUILD COMMAND
/usr/bin/codesign -f -s "${MACOS_CODE_SIGNING_IDENTITY}" --deep --options=runtime --entitlements "${CMAKE_SOURCE_DIR}/Source/Core/DolphinQt/DolphinEmuDebug.entitlements" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}/Dolphin.app" || true)
-
+
add_custom_command(TARGET dolphin-emu
POST_BUILD COMMAND
/usr/bin/codesign -f -s "${MACOS_CODE_SIGNING_IDENTITY}" --deep --options=runtime --entitlements "${CMAKE_SOURCE_DIR}/Source/Core/DolphinQt/DolphinEmu.entitlements" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}/Dolphin.app" || true)
@@ -678,4 +678,4 @@ endif()
if(USE_DISCORD_PRESENCE)
target_compile_definitions(dolphin-emu PRIVATE -DUSE_DISCORD_PRESENCE)
-endif()
+endif()
\ No newline at end of file
diff --git a/Source/dolphin-emu.sln b/Source/dolphin-emu.sln
index b4a36b08c3..5a9a0942d0 100644
--- a/Source/dolphin-emu.sln
+++ b/Source/dolphin-emu.sln
@@ -67,6 +67,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "..\Externals\min
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "imgui", "..\Externals\imgui\imgui.vcxproj", "{4C3B2264-EA73-4A7B-9CFE-65B0FD635EBB}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "implot", "..\Externals\implot\implot.vcxproj", "{A608225E-AE0A-4D1A-9B55-97F57C862391}"
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "..\Externals\bzip2\bzip2.vcxproj", "{1D8C51D2-FFA4-418E-B183-9F42B6A6717E}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblzma", "..\Externals\liblzma\liblzma.vcxproj", "{055A775F-B4F5-4970-9240-F6CF7661F37B}"
@@ -337,6 +339,14 @@ Global
{4C3B2264-EA73-4A7B-9CFE-65B0FD635EBB}.Release|ARM64.Build.0 = Release|ARM64
{4C3B2264-EA73-4A7B-9CFE-65B0FD635EBB}.Release|x64.ActiveCfg = Release|x64
{4C3B2264-EA73-4A7B-9CFE-65B0FD635EBB}.Release|x64.Build.0 = Release|x64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Debug|x64.ActiveCfg = Debug|x64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Debug|x64.Build.0 = Debug|x64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Release|ARM64.Build.0 = Release|ARM64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Release|x64.ActiveCfg = Release|x64
+ {A608225E-AE0A-4D1A-9B55-97F57C862391}.Release|x64.Build.0 = Release|x64
{1D8C51D2-FFA4-418E-B183-9F42B6A6717E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{1D8C51D2-FFA4-418E-B183-9F42B6A6717E}.Debug|ARM64.Build.0 = Debug|ARM64
{1D8C51D2-FFA4-418E-B183-9F42B6A6717E}.Debug|x64.ActiveCfg = Debug|x64