From f0a30d45a1718c6a475a789162ba0cca058eaeec Mon Sep 17 00:00:00 2001 From: Rafael Kitover Date: Fri, 27 Jun 2025 23:08:11 +0000 Subject: [PATCH] build: fix installing host build dep bin pkgs Calculate and install only build dependencies for a binary package set instead of everything from the host triplet. This way we can support binary packages for dynamic builds as well. Also check that the vcpkg Git clone is writable if it does not exist. Signed-off-by: Rafael Kitover --- cmake/Set-Toolchain-vcpkg.cmake | 164 ++++++++++++++++++++++---------- 1 file changed, 112 insertions(+), 52 deletions(-) diff --git a/cmake/Set-Toolchain-vcpkg.cmake b/cmake/Set-Toolchain-vcpkg.cmake index dfca1dfe..f4dd5a82 100644 --- a/cmake/Set-Toolchain-vcpkg.cmake +++ b/cmake/Set-Toolchain-vcpkg.cmake @@ -225,48 +225,59 @@ function(vcpkg_is_installed vcpkg_exe pkg_name pkg_ver pkg_triplet powershell ou endforeach() endfunction() +function(get_triplet_package_list triplet) + if(EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html") + return() + endif() + + file( + DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" + STATUS pkg_list_status + ) + list(GET pkg_list_status 1 pkg_list_error) + list(GET pkg_list_status 0 pkg_list_status) + + if(NOT pkg_list_status EQUAL 0) + message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}") + return() + endif() +endfunction() + +function(download_package pkg pkgs_dir) + string(REGEX REPLACE "^[^_]+_[^_]+_([^.]+)[.]zip\$" "\\1" pkg_triplet ${pkg}) + + message(STATUS "Downloading https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg} ...") + + file( + DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${pkg_triplet}/${pkg}" "${pkgs_dir}/${pkg}" + STATUS pkg_download_status + ) + list(GET pkg_download_status 1 pkg_download_error) + list(GET pkg_download_status 0 pkg_download_status) + + if(NOT pkg_download_status EQUAL 0) + message(STATUS "Failed to download vcpkg binary package '${pkg}': ${pkg_download_status} - ${pkg_download_error}") + return() + endif() + + message(STATUS "done.") +endfunction() + function(get_binary_packages vcpkg_exe) set(binary_packages_installed FALSE PARENT_SCOPE) - unset(triplets) - unset(host_triplet) - # Determine host triplet for vcpkg build dependencies - if(WIN32) - if($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Rr][Mm]64") - set(host_triplet "arm64-windows") - elseif($ENV{PROCESSOR_ARCHITECTURE} MATCHES "[Aa][Mm][Dd]64|[Xx]64") - set(host_triplet "x64-windows") - else() - set(host_triplet "x86-windows") - endif() + get_triplet_package_list(${VCPKG_TARGET_TRIPLET}) + + if(NOT EXISTS "${CMAKE_BINARY_DIR}/binary_package_list_${VCPKG_TARGET_TRIPLET}.html") + message(STATUS "Failed to download binary package list found for triplet '${VCPKG_TARGET_TRIPLET}', aborting.") + return() endif() - if(DEFINED host_triplet) - list(APPEND triplets ${host_triplet}) - endif() - list(APPEND triplets ${VCPKG_TARGET_TRIPLET}) - foreach(triplet ${triplets}) - file( - DOWNLOAD "https://nightly.visualboyadvance-m.org/vcpkg/${triplet}/" "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" - STATUS pkg_list_status - ) - list(GET pkg_list_status 1 pkg_list_error) - list(GET pkg_list_status 0 pkg_list_status) - - if(NOT pkg_list_status EQUAL 0) - message(STATUS "Failed to download vcpkg binary package list: ${pkg_list_status} - ${pkg_list_error}") - return() - endif() - endforeach() - - unset(binary_packages) - foreach(triplet ${triplets}) - file(READ "${CMAKE_BINARY_DIR}/binary_package_list_${triplet}.html" raw_html) - string(REGEX MATCHALL "