From 379649dbceaffc414311fb308d8427461683e640 Mon Sep 17 00:00:00 2001 From: crueter Date: Fri, 5 Jun 2026 11:36:48 -0400 Subject: [PATCH] cmake: Fix MoltenVK fetch order/library conflicts (#2183) * [cmake] Fix MoltenVK fetch order/library conflicts Rather than dealing with `find_library` shenanigans, just set the library path directly (when using bundled MoltenVK). System MoltenVK solely uses `find_library`. Avoids cache nonsense that can cause system/bundled versions to get mixed up, and overall makes the system/bundled mvk handling a lot more consistent ``` cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=ON -- Using MoltenVK at /opt/homebrew/lib/libMoltenVK.dylib. cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=OFF -- Using MoltenVK at /Users/crueter/code/azahar/build/externals/MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib. cmake -S . -B build -DUSE_SYSTEM_MOLTENVK=ON -- Using MoltenVK at /opt/homebrew/lib/libMoltenVK.dylib. ``` Signed-off-by: crueter * remove old comment Signed-off-by: crueter * Cleanup --------- Signed-off-by: crueter Co-authored-by: OpenSauce04 --- CMakeLists.txt | 14 +++++++++++--- CMakeModules/DownloadExternals.cmake | 13 +------------ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 42664571b..2866e4814 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -411,13 +411,21 @@ if (APPLE) endif() find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED) find_library(IOSURFACE_LIBRARY IOSurface REQUIRED) - set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY}) + set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY}) if (ENABLE_VULKAN AND NOT ENABLE_LIBRETRO) - if (NOT USE_SYSTEM_MOLTENVK) + if (USE_SYSTEM_MOLTENVK) + find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) + else() download_moltenvk() + if (IOS) + set(MOLTENVK_RELATIVE_LIBPATH "static/MoltenVK.xcframework/ios-arm64/libMoltenVK.a") + else() + set(MOLTENVK_RELATIVE_LIBPATH "dynamic/dylib/macOS/libMoltenVK.dylib") + endif() + set(MOLTENVK_LIBRARY "${CMAKE_BINARY_DIR}/externals/MoltenVK/MoltenVK/${MOLTENVK_RELATIVE_LIBPATH}") endif() - find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED) + message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.") set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY}) endif() diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake index a76d95ae1..12178a49f 100644 --- a/CMakeModules/DownloadExternals.cmake +++ b/CMakeModules/DownloadExternals.cmake @@ -171,15 +171,8 @@ function(download_qt target) endfunction() function(download_moltenvk) - if (IOS) - set(MOLTENVK_PLATFORM "static/MoltenVK.xcframework/ios-arm64") - else() - set(MOLTENVK_PLATFORM "dynamic/dylib/macOS") - endif() - - set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK") set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar") - if (NOT EXISTS ${MOLTENVK_DIR}) + if (NOT EXISTS "${CMAKE_BINARY_DIR}/externals/MoltenVK") if (NOT EXISTS ${MOLTENVK_TAR}) file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar ${MOLTENVK_TAR} SHOW_PROGRESS) @@ -188,10 +181,6 @@ function(download_moltenvk) execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") endif() - - # Add the MoltenVK library path to the prefix so find_library can locate it. - list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/${MOLTENVK_PLATFORM}") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE) endfunction() function(get_external_prefix lib_name prefix_var)