From c3050c1b48040ee1c66f7e84efa8e49fbe35a3e3 Mon Sep 17 00:00:00 2001
From: Alexandre Bouvier <contact@amb.tf>
Date: Tue, 27 Jun 2023 22:54:33 +0200
Subject: [PATCH] cmake: allow using system VMA library

---
 .gitmodules                                             | 2 +-
 CMakeLists.txt                                          | 1 +
 externals/CMakeLists.txt                                | 6 +++---
 externals/VulkanMemoryAllocator                         | 1 +
 externals/vma/VulkanMemoryAllocator                     | 1 -
 src/video_core/CMakeLists.txt                           | 6 +++++-
 {externals/vma => src/video_core/vulkan_common}/vma.cpp | 0
 7 files changed, 11 insertions(+), 6 deletions(-)
 create mode 160000 externals/VulkanMemoryAllocator
 delete mode 160000 externals/vma/VulkanMemoryAllocator
 rename {externals/vma => src/video_core/vulkan_common}/vma.cpp (100%)

diff --git a/.gitmodules b/.gitmodules
index 9f96b70be0..361f4845bb 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -56,5 +56,5 @@
 	path = externals/nx_tzdb/tzdb_to_nx
 	url = https://github.com/lat9nq/tzdb_to_nx.git
 [submodule "VulkanMemoryAllocator"]
-	path = externals/vma/VulkanMemoryAllocator
+	path = externals/VulkanMemoryAllocator
 	url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f8febb900..bf76282e15 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -281,6 +281,7 @@ find_package(LLVM MODULE COMPONENTS Demangle)
 find_package(lz4 REQUIRED)
 find_package(nlohmann_json 3.8 REQUIRED)
 find_package(Opus 1.3 MODULE)
+find_package(VulkanMemoryAllocator CONFIG)
 find_package(ZLIB 1.2 REQUIRED)
 find_package(zstd 1.5 REQUIRED)
 
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index 4ff5888510..1f7cd598e1 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -144,9 +144,9 @@ endif()
 add_subdirectory(nx_tzdb)
 
 # VMA
-add_library(vma vma/vma.cpp)
-target_include_directories(vma PUBLIC ./vma/VulkanMemoryAllocator/include)
-target_link_libraries(vma PRIVATE Vulkan::Headers)
+if (NOT TARGET GPUOpen::VulkanMemoryAllocator)
+    add_subdirectory(VulkanMemoryAllocator)
+endif()
 
 if (NOT TARGET LLVM::Demangle)
     add_library(demangle demangle/ItaniumDemangle.cpp)
diff --git a/externals/VulkanMemoryAllocator b/externals/VulkanMemoryAllocator
new file mode 160000
index 0000000000..9b0fc3e7b0
--- /dev/null
+++ b/externals/VulkanMemoryAllocator
@@ -0,0 +1 @@
+Subproject commit 9b0fc3e7b02afe97895eb3e945fe800c3a7485ac
diff --git a/externals/vma/VulkanMemoryAllocator b/externals/vma/VulkanMemoryAllocator
deleted file mode 160000
index 0aa3989b8f..0000000000
--- a/externals/vma/VulkanMemoryAllocator
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0aa3989b8f382f185fdf646cc83a1d16fa31d6ab
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index 3b2fe01da0..7f79111e01 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -274,6 +274,7 @@ add_library(video_core STATIC
     vulkan_common/vulkan_wrapper.h
     vulkan_common/nsight_aftermath_tracker.cpp
     vulkan_common/nsight_aftermath_tracker.h
+    vulkan_common/vma.cpp
 )
 
 create_target_directory_groups(video_core)
@@ -291,7 +292,7 @@ target_link_options(video_core PRIVATE ${FFmpeg_LDFLAGS})
 
 add_dependencies(video_core host_shaders)
 target_include_directories(video_core PRIVATE ${HOST_SHADERS_INCLUDE})
-target_link_libraries(video_core PRIVATE sirit Vulkan::Headers vma)
+target_link_libraries(video_core PRIVATE sirit Vulkan::Headers GPUOpen::VulkanMemoryAllocator)
 
 if (ENABLE_NSIGHT_AFTERMATH)
     if (NOT DEFINED ENV{NSIGHT_AFTERMATH_SDK})
@@ -324,6 +325,9 @@ else()
 
     # xbyak
     set_source_files_properties(macro/macro_jit_x64.cpp PROPERTIES COMPILE_OPTIONS "-Wno-conversion;-Wno-shadow")
+
+    # VMA
+    set_source_files_properties(vulkan_common/vma.cpp PROPERTIES COMPILE_OPTIONS "-Wno-conversion;-Wno-unused-variable;-Wno-unused-parameter;-Wno-missing-field-initializers")
 endif()
 
 if (ARCHITECTURE_x86_64)
diff --git a/externals/vma/vma.cpp b/src/video_core/vulkan_common/vma.cpp
similarity index 100%
rename from externals/vma/vma.cpp
rename to src/video_core/vulkan_common/vma.cpp