--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -105,7 +105,10 @@ foreach(_opt IN LISTS _LIBRETRO_INCOMPATIBLE_OPTIONS)
 endforeach()
 
 option(ENABLE_SDL2 "Enable using SDL2" ON)
+option(USE_SYSTEM_FAAD "Use the system faad2 lib (instead of the bundled one)" OFF)
 option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF)
+option(USE_SYSTEM_SPIRV_TOOLS "Use the system SPIRV-Tools lib (instead of the bundled one)" OFF)
+option(USE_SYSTEM_XXHASH "Use the system xxHash lib (instead of the bundled one)" OFF)
 
 # Set bundled qt as dependent options.
 option(ENABLE_QT "Enable the Qt frontend" ON)
@@ -541,6 +544,20 @@ if (USE_SYSTEM_SOUNDTOUCH)
     target_include_directories(SoundTouch INTERFACE "${SOUNDTOUCH_INCLUDE_DIRS}")
 endif()
 
+if (USE_SYSTEM_XXHASH)
+    find_package(PkgConfig)
+    if(PkgConfig_FOUND)
+	pkg_check_modules(libxxhash_PKGCONFIG IMPORTED_TARGET xxhash)
+    endif()
+endif()
+
+if (USE_SYSTEM_FAAD)
+    find_package(PkgConfig)
+    if(PkgConfig_FOUND)
+        pkg_check_modules(libfaad_PKGCONFIG IMPORTED_TARGET faad)
+    endif()
+endif()
+
 add_subdirectory(src)
 
 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT citra_meta)
--- externals/CMakeLists.txt.orig
+++ externals/CMakeLists.txt
@@ -176,7 +176,9 @@ endif()
 add_subdirectory(open_source_archives)
 
 # faad2
-add_subdirectory(faad2 EXCLUDE_FROM_ALL)
+if(NOT USE_SYSTEM_FAAD)
+    add_subdirectory(faad2 EXCLUDE_FROM_ALL)
+endif()
 
 # Dynamic library headers
 add_library(library-headers INTERFACE)
@@ -447,9 +449,12 @@ if (ENABLE_VULKAN)
     endif()
 
     # spirv-tools
-    # TODO: Implement USE_SYSTEM_SPIRV_TOOLS -OS
-    set(SPIRV_SKIP_EXECUTABLES ON)
-    add_subdirectory(spirv-tools EXCLUDE_FROM_ALL)
+    if(USE_SYSTEM_SPIRV_TOOLS)
+        find_package(SPIRV-Tools REQUIRED)
+    else()
+        set(SPIRV_SKIP_EXECUTABLES ON)
+        add_subdirectory(spirv-tools EXCLUDE_FROM_ALL)
+    endif()
 
     # glslang
     if(USE_SYSTEM_GLSLANG)
@@ -507,16 +512,18 @@ if (ENABLE_VULKAN)
     endif()
 endif()
 
-set(XXHASH_BUILD_XXHSUM OFF)
-add_subdirectory(xxHash/cmake_unofficial EXCLUDE_FROM_ALL)
-target_compile_definitions(xxhash PRIVATE XXH_FORCE_MEMORY_ACCESS=2)
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
-    target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SSE2)
-    message(STATUS "Enabling SSE2 for xxHash")
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8")
-    target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_NEON)
-    message(STATUS "Enabling NEON for xxHash")
-else()
-    target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR)
-    message(STATUS "Disabling SIMD for xxHash")
-endif()
\ No newline at end of file
+if(NOT USE_SYSTEM_XXHASH)
+    set(XXHASH_BUILD_XXHSUM OFF)
+    add_subdirectory(xxHash/cmake_unofficial EXCLUDE_FROM_ALL)
+    target_compile_definitions(xxhash PRIVATE XXH_FORCE_MEMORY_ACCESS=2)
+    if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
+        target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SSE2)
+        message(STATUS "Enabling SSE2 for xxHash")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|armv8")
+        target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_NEON)
+        message(STATUS "Enabling NEON for xxHash")
+    else()
+        target_compile_definitions(xxhash PRIVATE XXH_VECTOR=XXH_SCALAR)
+        message(STATUS "Disabling SIMD for xxHash")
+    endif()
+endif()

--- src/audio_core/CMakeLists.txt.orig
+++ src/audio_core/CMakeLists.txt
@@ -45,7 +45,11 @@ add_library(audio_core STATIC
 create_target_directory_groups(audio_core)
 
 target_link_libraries(audio_core PUBLIC citra_common citra_core)
-target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra)
+if(USE_SYSTEM_FAAD)
+    target_link_libraries(audio_core PRIVATE faad SoundTouch teakra)
+else()
+    target_link_libraries(audio_core PRIVATE faad2 SoundTouch teakra)
+endif()
 
 if(ENABLE_SDL2)
     target_link_libraries(audio_core PRIVATE SDL2::SDL2)

--- src/common/CMakeLists.txt.orig
+++ src/common/CMakeLists.txt
@@ -176,4 +176,8 @@ if (SSE42_COMPILE_OPTION)
     target_compile_options(citra_common PRIVATE ${SSE42_COMPILE_OPTION})
 endif()
 
-target_link_libraries(citra_common PUBLIC xxHash::xxhash)
\ No newline at end of file
+if (USE_SYSTEM_XXHASH)
+    target_link_libraries(citra_common PUBLIC xxhash)
+else()
+    target_link_libraries(citra_common PUBLIC xxHash::xxhash)
+endif()
