From 42e2f8cb09578d845cbbb0f50cf15852be5cab3e Mon Sep 17 00:00:00 2001 From: crueter Date: Wed, 27 Aug 2025 14:50:35 -0400 Subject: [PATCH] [cmake] fix SPIRV-Tools Signed-off-by: crueter --- CMakeLists.txt | 7 +------ CMakeModules/FindSPIRV-Tools.cmake | 19 +++++++++++++++++++ externals/CMakeLists.txt | 10 +++++++++- externals/cpmfile.json | 1 + src/shader_recompiler/CMakeLists.txt | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 CMakeModules/FindSPIRV-Tools.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c9883ac195..8292d4fd8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -529,12 +529,6 @@ if(ENABLE_CUBEB) endif() endif() -# TODO(crueter): Work around this -if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS) - find_package(PkgConfig REQUIRED) - pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools) -endif() - # find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package if (ENABLE_SDL2) if (YUZU_USE_EXTERNAL_SDL2) @@ -604,6 +598,7 @@ add_subdirectory(externals) find_package(VulkanHeaders) find_package(VulkanUtilityLibraries) find_package(VulkanMemoryAllocator) +find_package(SPIRV-Tools) if (ENABLE_WEB_SERVICE) find_package(httplib) diff --git a/CMakeModules/FindSPIRV-Tools.cmake b/CMakeModules/FindSPIRV-Tools.cmake new file mode 100644 index 0000000000..aef74df5d9 --- /dev/null +++ b/CMakeModules/FindSPIRV-Tools.cmake @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2022 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +pkg_search_module(SPIRV-Tools QUIET IMPORTED_TARGET SPIRV-Tools) +find_package_handle_standard_args(SPIRV-Tools + REQUIRED_VARS SPIRV-Tools_LINK_LIBRARIES + VERSION_VAR SPIRV-Tools_VERSION +) + +if (SPIRV-Tools_FOUND AND NOT TARGET SPIRV-Tools::SPIRV-Tools) + if (TARGET SPIRV-Tools) + add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools) + else() + add_library(SPIRV-Tools::SPIRV-Tools ALIAS PkgConfig::SPIRV-Tools) + endif() +endif() diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 611937785f..b209b48db9 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -131,7 +131,15 @@ AddJsonPackage( ) # SPIRV Tools -AddJsonPackage(spirv-tools) +AddJsonPackage( + NAME spirv-tools + BUNDLED_PACKAGE ${YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS} +) + +if (SPIRV-Tools_ADDED) + add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static) + target_link_libraries(SPIRV-Tools-static PRIVATE SPIRV-Tools-opt SPIRV-Tools-link) +endif() # TZDB (Time Zone Database) add_subdirectory(nx_tzdb) diff --git a/externals/cpmfile.json b/externals/cpmfile.json index d4ea9ce382..effcbcc01f 100644 --- a/externals/cpmfile.json +++ b/externals/cpmfile.json @@ -67,6 +67,7 @@ "repo": "KhronosGroup/SPIRV-Tools", "sha": "40eb301f32", "hash": "58d0fb1047d69373cf24c73e6f78c73a72a6cca3b4df1d9f083b9dcc0962745ef154abf3dbe9b3623b835be20c6ec769431cf11733349f45e7568b3525f707aa", + "find_args": "MODULE", "options": [ "SPIRV_SKIP_EXECUTABLES ON" ] diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index 5d896db93d..55cdc17c1f 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt @@ -246,7 +246,7 @@ add_library(shader_recompiler STATIC ) -target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link) +target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools::SPIRV-Tools) if (MSVC) target_compile_options(shader_recompiler PRIVATE