From 4396089f3ef70807258a778ef5f95dbcedb16cef Mon Sep 17 00:00:00 2001 From: Zephyron Date: Sat, 22 Feb 2025 19:06:05 +1000 Subject: [PATCH] cmake: Optimize Android VVL download logic Improve the Vulkan Validation Layer (VVL) download logic for Android by checking for the final library file instead of just the zip archive. This prevents unnecessary re-downloads and extractions when the library is already in place. The check now looks for libVkLayer_khronos_validation.so in the final destination path before attempting to download and extract the archive. --- CMakeLists.txt | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27d5285a72..2c69806af1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,19 +108,20 @@ option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENAB if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL) set(vvl_version "vulkan-sdk-1.4.304.1") set(vvl_zip_file "${CMAKE_BINARY_DIR}/externals/vvl-android.zip") - if (NOT EXISTS "${vvl_zip_file}") - # Download and extract validation layer release to externals directory - set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download") - file(DOWNLOAD "${vvl_base_url}/${vvl_version}/android-binaries-1.4.304.1.zip" - "${vvl_zip_file}" SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") - endif() - - # Copy the arm64 binary to src/android/app/main/jniLibs only if it doesn't exist set(vvl_lib_path "${CMAKE_CURRENT_SOURCE_DIR}/src/android/app/src/main/jniLibs/arm64-v8a/") - set(vvl_lib_file "${vvl_lib_path}/libVkLayer_khronos_validation.so") - if (NOT EXISTS "${vvl_lib_file}") + set(vvl_final_lib "${vvl_lib_path}/libVkLayer_khronos_validation.so") + + if (NOT EXISTS "${vvl_final_lib}") + # Download and extract validation layer release to externals directory + if (NOT EXISTS "${vvl_zip_file}") + set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download") + file(DOWNLOAD "${vvl_base_url}/vulkan-sdk-${vvl_version}/android-binaries-${vvl_version}.zip" + "${vvl_zip_file}" SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") + endif() + + # Copy the arm64 binary to src/android/app/main/jniLibs file(COPY "${CMAKE_BINARY_DIR}/externals/android-binaries-${vvl_version}/arm64-v8a/libVkLayer_khronos_validation.so" DESTINATION "${vvl_lib_path}") endif()