From b74c91457ebdc630a3447e0cd47f0b534f7db583 Mon Sep 17 00:00:00 2001
From: Castor215 <132155746+Castor215@users.noreply.github.com>
Date: Sat, 11 Nov 2023 19:52:28 +0000
Subject: [PATCH] externals: allow user to use system VulkanMemoryAllocator
 (#7149)

---
 externals/CMakeLists.txt                            | 13 +++++++++++--
 externals/cmake-modules/CitraHandleSystemLibs.cmake |  3 +++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index 48afa0e1f..d695d2558 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -362,8 +362,17 @@ if (ENABLE_OPENAL)
 endif()
 
 # VMA
-add_library(vma INTERFACE)
-target_include_directories(vma SYSTEM INTERFACE ./vma/include)
+if(USE_SYSTEM_VMA)
+    add_library(vma INTERFACE)
+    find_package(VulkanMemoryAllocator REQUIRED)
+    if(TARGET GPUOpen::VulkanMemoryAllocator)
+        message(STATUS "Found VulkanMemoryAllocator")
+        target_link_libraries(vma INTERFACE GPUOpen::VulkanMemoryAllocator)
+    endif()
+else()
+    add_library(vma INTERFACE)
+    target_include_directories(vma SYSTEM INTERFACE ./vma/include)
+endif()
 
 # vulkan-headers
 add_library(vulkan-headers INTERFACE)
diff --git a/externals/cmake-modules/CitraHandleSystemLibs.cmake b/externals/cmake-modules/CitraHandleSystemLibs.cmake
index 471301c73..f72115056 100644
--- a/externals/cmake-modules/CitraHandleSystemLibs.cmake
+++ b/externals/cmake-modules/CitraHandleSystemLibs.cmake
@@ -23,6 +23,7 @@ option(USE_SYSTEM_CRYPTOPP "Use the system cryptopp (instead of the bundled one)
 option(USE_SYSTEM_CUBEB "Use the system cubeb (instead of the bundled one)" OFF)
 option(USE_SYSTEM_LODEPNG "Use the system lodepng (instead of the bundled one)" OFF)
 option(USE_SYSTEM_OPENAL "Use the system OpenAL (instead of the bundled one)" OFF)
+option(USE_SYSTEM_VMA "Use the system VulkanMemoryAllocator (instead of the bundled one)" OFF)
 
 # Qt and MoltenVK are handled separately
 CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_SDL2 "Disable system SDL2" OFF "USE_SYSTEM_LIBS" OFF)
@@ -45,6 +46,7 @@ CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_CRYPTOPP "Disable system cryptopp" OFF "US
 CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_CUBEB "Disable system cubeb" OFF "USE_SYSTEM_LIBS" OFF)
 CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_LODEPNG "Disable system lodepng" OFF "USE_SYSTEM_LIBS" OFF)
 CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_OPENAL "Disable system OpenAL" OFF "USE_SYSTEM_LIBS" OFF)
+CMAKE_DEPENDENT_OPTION(DISABLE_SYSTEM_VMA "Disable system VulkanMemoryAllocator" OFF "USE_SYSTEM_LIBS" OFF)
 
 set(LIB_VAR_LIST
     SDL2
@@ -67,6 +69,7 @@ set(LIB_VAR_LIST
     CUBEB
     LODEPNG
     OPENAL
+    VMA
     )
 
 # First, check that USE_SYSTEM_XXX is not used with USE_SYSTEM_LIBS