From 8e17b5469fc7f5211fc3e24841896ea030adce84 Mon Sep 17 00:00:00 2001
From: Alexandre Bouvier <contact@amb.tf>
Date: Fri, 25 Nov 2022 19:35:46 +0100
Subject: [PATCH] cmake: prefer system libraries

---
 CMakeLists.txt                              | 39 ++++++++++++------
 externals/CMakeLists.txt                    | 45 ++++++++++++++-------
 externals/find-modules/FindDiscordRPC.cmake | 27 +++++++++++++
 externals/find-modules/Findenet.cmake       | 17 ++++++++
 externals/find-modules/Findhttplib.cmake    | 22 ++++++++++
 externals/find-modules/Findinih.cmake       | 17 ++++++++
 externals/find-modules/Findlz4.cmake        | 41 ++++++++++++-------
 externals/find-modules/Findzstd.cmake       | 41 ++++++++++++-------
 externals/inih/CMakeLists.txt               |  3 +-
 src/audio_core/CMakeLists.txt               |  4 +-
 src/common/CMakeLists.txt                   | 14 +------
 src/core/CMakeLists.txt                     |  2 +-
 src/network/CMakeLists.txt                  |  2 +-
 src/video_core/CMakeLists.txt               |  7 ++--
 src/web_service/CMakeLists.txt              |  2 +-
 src/yuzu/CMakeLists.txt                     |  6 +--
 src/yuzu_cmd/CMakeLists.txt                 |  4 +-
 src/yuzu_cmd/config.cpp                     |  2 +-
 18 files changed, 209 insertions(+), 86 deletions(-)
 create mode 100644 externals/find-modules/FindDiscordRPC.cmake
 create mode 100644 externals/find-modules/Findenet.cmake
 create mode 100644 externals/find-modules/Findhttplib.cmake
 create mode 100644 externals/find-modules/Findinih.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index facf4ea5f..1200c14bd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,8 +43,6 @@ option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
 
 option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
 
-option(YUZU_USE_BUNDLED_OPUS "Compile bundled opus" ON)
-
 option(YUZU_TESTS "Compile tests" ON)
 
 option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
@@ -201,24 +199,39 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
 # System imported libraries
 # =======================================================================
 
-find_package(fmt 8.0.1 REQUIRED CONFIG)
-find_package(nlohmann_json 3.8 REQUIRED CONFIG)
+find_package(enet 1.3)
+find_package(fmt 9 REQUIRED)
+find_package(inih)
+find_package(lz4 1.8 REQUIRED)
+find_package(nlohmann_json 3.8 REQUIRED)
+find_package(Opus 1.3)
+find_package(Vulkan 1.3.213)
 find_package(ZLIB 1.2 REQUIRED)
+find_package(zstd 1.5 REQUIRED)
 
-# Search for config-only package first (for vcpkg), then try non-config
-find_package(zstd 1.5 CONFIG)
-if (NOT zstd_FOUND)
-    find_package(zstd 1.5 REQUIRED)
+if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
+    find_package(xbyak 6)
 endif()
 
-# lz4 1.8 is required, but vcpkg's lz4-config.cmake does not have version info
-find_package(lz4 CONFIG)
-if (NOT lz4_FOUND)
-    find_package(lz4 1.8 REQUIRED)
+if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
+    find_package(dynarmic 6.2.4)
+endif()
+
+if (ENABLE_CUBEB)
+    find_package(cubeb)
+endif()
+
+if (USE_DISCORD_PRESENCE)
+    find_package(DiscordRPC)
+endif()
+
+if (ENABLE_WEB_SERVICE)
+    find_package(cpp-jwt 1.4)
+    find_package(httplib 0.11)
 endif()
 
 if (YUZU_TESTS)
-    find_package(Catch2 2.13.7 REQUIRED CONFIG)
+    find_package(Catch2 2.13.7 REQUIRED)
 endif()
 
 find_package(Boost 1.73.0 COMPONENTS context)
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt
index d25626ccc..8bb321e35 100644
--- a/externals/CMakeLists.txt
+++ b/externals/CMakeLists.txt
@@ -6,15 +6,16 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/externals/find-modules")
 include(DownloadExternals)
 
 # xbyak
-if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
+if ((ARCHITECTURE_x86 OR ARCHITECTURE_x86_64) AND NOT TARGET xbyak::xbyak)
     add_subdirectory(xbyak EXCLUDE_FROM_ALL)
 endif()
 
 # Dynarmic
-if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
+if ((ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64) AND NOT TARGET dynarmic::dynarmic)
     set(DYNARMIC_NO_BUNDLED_FMT ON)
     set(DYNARMIC_IGNORE_ASSERTS ON CACHE BOOL "" FORCE)
-    add_subdirectory(dynarmic)
+    add_subdirectory(dynarmic EXCLUDE_FROM_ALL)
+    add_library(dynarmic::dynarmic ALIAS dynarmic)
 endif()
 
 # getopt
@@ -26,7 +27,9 @@ endif()
 add_subdirectory(glad)
 
 # inih
-add_subdirectory(inih)
+if (NOT TARGET inih::INIReader)
+    add_subdirectory(inih)
+endif()
 
 # mbedtls
 add_subdirectory(mbedtls EXCLUDE_FROM_ALL)
@@ -73,25 +76,30 @@ if (YUZU_USE_EXTERNAL_SDL2)
 endif()
 
 # ENet
-add_subdirectory(enet)
-target_include_directories(enet INTERFACE ./enet/include)
+if (NOT TARGET enet::enet)
+    add_subdirectory(enet EXCLUDE_FROM_ALL)
+    target_include_directories(enet INTERFACE ./enet/include)
+    add_library(enet::enet ALIAS enet)
+endif()
 
 # Cubeb
-if(ENABLE_CUBEB)
+if (ENABLE_CUBEB AND NOT TARGET cubeb::cubeb)
     set(BUILD_TESTS OFF CACHE BOOL "")
     add_subdirectory(cubeb EXCLUDE_FROM_ALL)
+    add_library(cubeb::cubeb ALIAS cubeb)
 endif()
 
 # DiscordRPC
-if (USE_DISCORD_PRESENCE)
+if (USE_DISCORD_PRESENCE AND NOT TARGET DiscordRPC::discord-rpc)
     add_subdirectory(discord-rpc EXCLUDE_FROM_ALL)
     target_include_directories(discord-rpc INTERFACE ./discord-rpc/include)
+    add_library(DiscordRPC::discord-rpc ALIAS discord-rpc)
 endif()
 
 # Sirit
-add_subdirectory(sirit)
+add_subdirectory(sirit EXCLUDE_FROM_ALL)
 
-if (ENABLE_WEB_SERVICE)
+if (ENABLE_WEB_SERVICE AND NOT TARGET httplib::httplib)
     if (NOT WIN32)
         find_package(OpenSSL 1.1)
         if (OPENSSL_FOUND)
@@ -119,18 +127,20 @@ if (ENABLE_WEB_SERVICE)
     if (WIN32)
         target_link_libraries(httplib INTERFACE crypt32 cryptui ws2_32)
     endif()
-	
-    # cpp-jwt
+    add_library(httplib::httplib ALIAS httplib)
+endif()
+
+# cpp-jwt
+if (ENABLE_WEB_SERVICE AND NOT TARGET cpp-jwt::cpp-jwt)
     add_library(cpp-jwt INTERFACE)
     target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include)
     target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON)
+    add_library(cpp-jwt::cpp-jwt ALIAS cpp-jwt)
 endif()
 
 # Opus
-if (YUZU_USE_BUNDLED_OPUS)
+if (NOT TARGET Opus::opus)
     add_subdirectory(opus EXCLUDE_FROM_ALL)
-else()
-    find_package(Opus 1.3 REQUIRED)
 endif()
 
 # FFMpeg
@@ -141,3 +151,8 @@ if (YUZU_USE_BUNDLED_FFMPEG)
     set(FFmpeg_LIBRARIES "${FFmpeg_LIBRARIES}" PARENT_SCOPE)
     set(FFmpeg_INCLUDE_DIR "${FFmpeg_INCLUDE_DIR}" PARENT_SCOPE)
 endif()
+
+# Vulkan-Headers
+if (NOT TARGET Vulkan::Headers)
+    add_subdirectory(Vulkan-Headers EXCLUDE_FROM_ALL)
+endif()
diff --git a/externals/find-modules/FindDiscordRPC.cmake b/externals/find-modules/FindDiscordRPC.cmake
new file mode 100644
index 000000000..44ca9904f
--- /dev/null
+++ b/externals/find-modules/FindDiscordRPC.cmake
@@ -0,0 +1,27 @@
+# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+find_path(DiscordRPC_INCLUDE_DIR discord_rpc.h)
+
+find_library(DiscordRPC_LIBRARY discord-rpc)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(DiscordRPC
+    REQUIRED_VARS
+        DiscordRPC_LIBRARY
+        DiscordRPC_INCLUDE_DIR
+)
+
+if (DiscordRPC_FOUND AND NOT TARGET DiscordRPC::discord-rpc)
+    add_library(DiscordRPC::discord-rpc UNKNOWN IMPORTED)
+    set_target_properties(DiscordRPC::discord-rpc PROPERTIES
+        IMPORTED_LOCATION "${DiscordRPC_LIBRARY}"
+        INTERFACE_INCLUDE_DIRECTORIES "${DiscordRPC_INCLUDE_DIR}"
+    )
+endif()
+
+mark_as_advanced(
+    DiscordRPC_INCLUDE_DIR
+    DiscordRPC_LIBRARY
+)
diff --git a/externals/find-modules/Findenet.cmake b/externals/find-modules/Findenet.cmake
new file mode 100644
index 000000000..663a2592f
--- /dev/null
+++ b/externals/find-modules/Findenet.cmake
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+find_package(PkgConfig QUIET)
+if (PKG_CONFIG_FOUND)
+    pkg_search_module(ENET QUIET IMPORTED_TARGET GLOBAL libenet)
+    if (ENET_FOUND)
+        add_library(enet::enet ALIAS PkgConfig::ENET)
+    endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(enet
+    REQUIRED_VARS ENET_LINK_LIBRARIES
+    VERSION_VAR ENET_VERSION
+)
diff --git a/externals/find-modules/Findhttplib.cmake b/externals/find-modules/Findhttplib.cmake
new file mode 100644
index 000000000..56e92a637
--- /dev/null
+++ b/externals/find-modules/Findhttplib.cmake
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+include(FindPackageHandleStandardArgs)
+
+find_package(httplib QUIET CONFIG)
+if (httplib_FOUND)
+    find_package_handle_standard_args(httplib CONFIG_MODE)
+else()
+    find_package(PkgConfig QUIET)
+    if (PKG_CONFIG_FOUND)
+        pkg_search_module(HTTPLIB QUIET IMPORTED_TARGET GLOBAL cpp-httplib)
+        if (HTTPLIB_FOUND)
+            add_library(httplib::httplib ALIAS PkgConfig::HTTPLIB)
+        endif()
+    endif()
+    find_package_handle_standard_args(httplib
+        REQUIRED_VARS HTTPLIB_INCLUDEDIR
+        VERSION_VAR HTTPLIB_VERSION
+    )
+endif()
diff --git a/externals/find-modules/Findinih.cmake b/externals/find-modules/Findinih.cmake
new file mode 100644
index 000000000..844396471
--- /dev/null
+++ b/externals/find-modules/Findinih.cmake
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2022 Alexandre Bouvier <contact@amb.tf>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+find_package(PkgConfig QUIET)
+if (PKG_CONFIG_FOUND)
+    pkg_search_module(INIREADER QUIET IMPORTED_TARGET GLOBAL INIReader)
+    if (INIREADER_FOUND)
+        add_library(inih::INIReader ALIAS PkgConfig::INIREADER)
+    endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(inih
+    REQUIRED_VARS INIREADER_LINK_LIBRARIES
+    VERSION_VAR INIREADER_VERSION
+)
diff --git a/externals/find-modules/Findlz4.cmake b/externals/find-modules/Findlz4.cmake
index 13ca5de66..a928c4307 100644
--- a/externals/find-modules/Findlz4.cmake
+++ b/externals/find-modules/Findlz4.cmake
@@ -1,19 +1,30 @@
 # SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-find_package(PkgConfig)
-
-if (PKG_CONFIG_FOUND)
-    pkg_search_module(liblz4 IMPORTED_TARGET GLOBAL liblz4)
-    if (liblz4_FOUND)
-        add_library(lz4::lz4 ALIAS PkgConfig::liblz4)
-    endif()
-endif()
-
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(lz4
-    REQUIRED_VARS
-        liblz4_LINK_LIBRARIES
-        liblz4_FOUND
-    VERSION_VAR liblz4_VERSION
-)
+
+find_package(lz4 QUIET CONFIG)
+if (lz4_FOUND)
+    find_package_handle_standard_args(lz4 CONFIG_MODE)
+    if (NOT TARGET lz4::lz4)
+        if (TARGET LZ4::lz4_shared)
+            set_target_properties(LZ4::lz4_shared PROPERTIES IMPORTED_GLOBAL TRUE)
+            add_library(lz4::lz4 ALIAS LZ4::lz4_shared)
+        else()
+            set_target_properties(LZ4::lz4_static PROPERTIES IMPORTED_GLOBAL TRUE)
+            add_library(lz4::lz4 ALIAS LZ4::lz4_static)
+        endif()
+    endif()
+else()
+    find_package(PkgConfig QUIET)
+    if (PKG_CONFIG_FOUND)
+        pkg_search_module(liblz4 QUIET IMPORTED_TARGET GLOBAL liblz4)
+        if (liblz4_FOUND)
+            add_library(lz4::lz4 ALIAS PkgConfig::liblz4)
+        endif()
+    endif()
+    find_package_handle_standard_args(lz4
+        REQUIRED_VARS liblz4_LINK_LIBRARIES
+        VERSION_VAR liblz4_VERSION
+    )
+endif()
diff --git a/externals/find-modules/Findzstd.cmake b/externals/find-modules/Findzstd.cmake
index f4031eb70..1c29f3598 100644
--- a/externals/find-modules/Findzstd.cmake
+++ b/externals/find-modules/Findzstd.cmake
@@ -1,19 +1,30 @@
 # SPDX-FileCopyrightText: 2022 yuzu Emulator Project
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-find_package(PkgConfig)
-
-if (PKG_CONFIG_FOUND)
-    pkg_search_module(libzstd IMPORTED_TARGET GLOBAL libzstd)
-    if (libzstd_FOUND)
-        add_library(zstd::zstd ALIAS PkgConfig::libzstd)
-    endif()
-endif()
-
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(zstd
-    REQUIRED_VARS
-        libzstd_LINK_LIBRARIES
-        libzstd_FOUND
-    VERSION_VAR libzstd_VERSION
-)
+
+find_package(zstd QUIET CONFIG)
+if (zstd_FOUND)
+    find_package_handle_standard_args(zstd CONFIG_MODE)
+    if (NOT TARGET zstd::zstd)
+        if (TARGET zstd::libzstd_shared)
+            set_target_properties(zstd::libzstd_shared PROPERTIES IMPORTED_GLOBAL TRUE)
+            add_library(zstd::zstd ALIAS zstd::libzstd_shared)
+        else()
+            set_target_properties(zstd::libzstd_static PROPERTIES IMPORTED_GLOBAL TRUE)
+            add_library(zstd::zstd ALIAS zstd::libzstd_static)
+        endif()
+    endif()
+else()
+    find_package(PkgConfig QUIET)
+    if (PKG_CONFIG_FOUND)
+        pkg_search_module(libzstd QUIET IMPORTED_TARGET GLOBAL libzstd)
+        if (libzstd_FOUND)
+            add_library(zstd::zstd ALIAS PkgConfig::libzstd)
+        endif()
+    endif()
+    find_package_handle_standard_args(zstd
+        REQUIRED_VARS libzstd_LINK_LIBRARIES
+        VERSION_VAR libzstd_VERSION
+    )
+endif()
diff --git a/externals/inih/CMakeLists.txt b/externals/inih/CMakeLists.txt
index b686e3cf5..ebb60a976 100644
--- a/externals/inih/CMakeLists.txt
+++ b/externals/inih/CMakeLists.txt
@@ -9,4 +9,5 @@ add_library(inih
 )
 
 create_target_directory_groups(inih)
-target_include_directories(inih INTERFACE .)
+target_include_directories(inih INTERFACE inih/cpp)
+add_library(inih::INIReader ALIAS inih)
diff --git a/src/audio_core/CMakeLists.txt b/src/audio_core/CMakeLists.txt
index 0a9d9ec29..f573a23e6 100644
--- a/src/audio_core/CMakeLists.txt
+++ b/src/audio_core/CMakeLists.txt
@@ -219,11 +219,11 @@ endif()
 
 target_link_libraries(audio_core PUBLIC common core)
 if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
-    target_link_libraries(audio_core PRIVATE dynarmic)
+    target_link_libraries(audio_core PRIVATE dynarmic::dynarmic)
 endif()
 
 if(ENABLE_CUBEB)
-    target_link_libraries(audio_core PRIVATE cubeb)
+    target_link_libraries(audio_core PRIVATE cubeb::cubeb)
     target_compile_definitions(audio_core PRIVATE -DHAVE_CUBEB=1)
 endif()
 if(ENABLE_SDL2)
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index a12edc584..6bdffcb7a 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -149,7 +149,7 @@ if(ARCHITECTURE_x86_64)
             x64/xbyak_abi.h
             x64/xbyak_util.h
     )
-    target_link_libraries(common PRIVATE xbyak)
+    target_link_libraries(common PRIVATE xbyak::xbyak)
 endif()
 
 if (MSVC)
@@ -174,17 +174,7 @@ endif()
 create_target_directory_groups(common)
 
 target_link_libraries(common PUBLIC ${Boost_LIBRARIES} fmt::fmt microprofile Threads::Threads)
-if (TARGET lz4::lz4)
-  target_link_libraries(common PRIVATE lz4::lz4)
-else()
-  target_link_libraries(common PRIVATE LZ4::lz4_shared)
-endif()
-if (TARGET zstd::zstd)
-  target_link_libraries(common PRIVATE zstd::zstd)
-else()
-  target_link_libraries(common PRIVATE
-    $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>)
-endif()
+target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd)
 
 if (YUZU_USE_PRECOMPILED_HEADERS)
     target_precompile_headers(common PRIVATE precompiled_headers.h)
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 6530d3c60..ad8b8ef95 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -824,7 +824,7 @@ if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
         hle/service/jit/jit.cpp
         hle/service/jit/jit.h
     )
-    target_link_libraries(core PRIVATE dynarmic)
+    target_link_libraries(core PRIVATE dynarmic::dynarmic)
 endif()
 
 if (YUZU_USE_PRECOMPILED_HEADERS)
diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt
index c85c308de..1ab52da59 100644
--- a/src/network/CMakeLists.txt
+++ b/src/network/CMakeLists.txt
@@ -19,7 +19,7 @@ add_library(network STATIC
 
 create_target_directory_groups(network)
 
-target_link_libraries(network PRIVATE common enet Boost::boost)
+target_link_libraries(network PRIVATE common enet::enet Boost::boost)
 if (ENABLE_WEB_SERVICE)
     target_compile_definitions(network PRIVATE -DENABLE_WEB_SERVICE)
     target_link_libraries(network PRIVATE web_service)
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index b9bad63ac..5096d935e 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -264,8 +264,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_include_directories(video_core PRIVATE sirit ../../externals/Vulkan-Headers/include)
-target_link_libraries(video_core PRIVATE sirit)
+target_link_libraries(video_core PRIVATE sirit Vulkan::Headers)
 
 if (ENABLE_NSIGHT_AFTERMATH)
     if (NOT DEFINED ENV{NSIGHT_AFTERMATH_SDK})
@@ -305,11 +304,11 @@ if (ARCHITECTURE_x86_64)
         macro/macro_jit_x64.cpp
         macro/macro_jit_x64.h
     )
-    target_link_libraries(video_core PUBLIC xbyak)
+    target_link_libraries(video_core PUBLIC xbyak::xbyak)
 endif()
 
 if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
-    target_link_libraries(video_core PRIVATE dynarmic)
+    target_link_libraries(video_core PRIVATE dynarmic::dynarmic)
 endif()
 
 if (YUZU_USE_PRECOMPILED_HEADERS)
diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt
index 19534b9e4..02582aa04 100644
--- a/src/web_service/CMakeLists.txt
+++ b/src/web_service/CMakeLists.txt
@@ -17,7 +17,7 @@ add_library(web_service STATIC
 )
 
 create_target_directory_groups(web_service)
-target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib cpp-jwt)
+target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann_json httplib::httplib cpp-jwt::cpp-jwt)
 
 if (YUZU_USE_PRECOMPILED_HEADERS)
     target_precompile_headers(web_service PRIVATE precompiled_headers.h)
diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt
index 656dd79a9..65c144921 100644
--- a/src/yuzu/CMakeLists.txt
+++ b/src/yuzu/CMakeLists.txt
@@ -315,7 +315,7 @@ target_link_libraries(yuzu PRIVATE common core input_common network video_core)
 target_link_libraries(yuzu PRIVATE Boost::boost glad Qt${QT_MAJOR_VERSION}::Widgets)
 target_link_libraries(yuzu PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
 
-target_include_directories(yuzu PRIVATE ../../externals/Vulkan-Headers/include)
+target_link_libraries(yuzu PRIVATE Vulkan::Headers)
 if (NOT WIN32)
     target_include_directories(yuzu PRIVATE ${Qt${QT_MAJOR_VERSION}Gui_PRIVATE_INCLUDE_DIRS})
 endif()
@@ -351,7 +351,7 @@ if (USE_DISCORD_PRESENCE)
         discord_impl.cpp
         discord_impl.h
     )
-    target_link_libraries(yuzu PRIVATE discord-rpc)
+    target_link_libraries(yuzu PRIVATE DiscordRPC::discord-rpc)
     target_compile_definitions(yuzu PRIVATE -DUSE_DISCORD_PRESENCE)
 endif()
 
@@ -408,7 +408,7 @@ if (NOT APPLE)
 endif()
 
 if (ARCHITECTURE_x86_64 OR ARCHITECTURE_arm64)
-    target_link_libraries(yuzu PRIVATE dynarmic)
+    target_link_libraries(yuzu PRIVATE dynarmic::dynarmic)
 endif()
 
 if (YUZU_USE_PRECOMPILED_HEADERS)
diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt
index 607b4e6aa..cbf04a939 100644
--- a/src/yuzu_cmd/CMakeLists.txt
+++ b/src/yuzu_cmd/CMakeLists.txt
@@ -34,7 +34,7 @@ add_executable(yuzu-cmd
 create_target_directory_groups(yuzu-cmd)
 
 target_link_libraries(yuzu-cmd PRIVATE common core input_common)
-target_link_libraries(yuzu-cmd PRIVATE inih glad)
+target_link_libraries(yuzu-cmd PRIVATE inih::INIReader glad)
 if (MSVC)
     target_link_libraries(yuzu-cmd PRIVATE getopt)
 endif()
@@ -43,7 +43,7 @@ target_link_libraries(yuzu-cmd PRIVATE ${PLATFORM_LIBRARIES} SDL2 Threads::Threa
 create_resource("../../dist/yuzu.bmp" "yuzu_cmd/yuzu_icon.h" "yuzu_icon")
 target_include_directories(yuzu-cmd PRIVATE ${RESOURCES_DIR})
 
-target_include_directories(yuzu-cmd PRIVATE ../../externals/Vulkan-Headers/include)
+target_link_libraries(yuzu-cmd PRIVATE Vulkan::Headers)
 
 if (YUZU_USE_EXTERNAL_SDL2)
     target_link_libraries(yuzu-cmd PRIVATE SDL2-static)
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index 59f9c8e09..2c78e776c 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -15,7 +15,7 @@
 #pragma clang diagnostic pop
 #endif
 
-#include <inih/cpp/INIReader.h>
+#include <INIReader.h>
 #include "common/fs/file.h"
 #include "common/fs/fs.h"
 #include "common/fs/path_util.h"