From 89e57df2857f688667e6f96806054d919913152b Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Thu, 14 Aug 2025 16:26:37 +0200 Subject: [PATCH] fix(cpn): add dfu-util and libusb to windows build (#6516) Co-authored-by: raphaelcoeffic <1050031+raphaelcoeffic@users.noreply.github.com> --- .github/workflows/win_cpn-64.yml | 40 ++++++++++++++++++++++++++++++ cmake/NativeTargets.cmake | 4 +++ companion/src/burnconfigdialog.cpp | 2 +- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/.github/workflows/win_cpn-64.yml b/.github/workflows/win_cpn-64.yml index a73643d6a..e5cbcd7ca 100644 --- a/.github/workflows/win_cpn-64.yml +++ b/.github/workflows/win_cpn-64.yml @@ -71,6 +71,46 @@ jobs: echo $PATH $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow + - name: Setup dfu-util and libusb + run: | + #!/bin/bash + set -e + + echo "Setting up dfu-util and libusb..." + + # Create target directory + mkdir -p dfu-util-0.11 + + # Download and extract dfu-util + echo "Downloading dfu-util binaries..." + curl -LO https://dfu-util.sourceforge.net/releases/dfu-util-0.11-binaries.tar.xz + tar -xf dfu-util-0.11-binaries.tar.xz + cp dfu-util-0.11-binaries/win64/dfu-util.exe dfu-util-0.11/ + + # Install 7zip if not available + if ! command -v 7z &> /dev/null; then + echo "Installing 7zip..." + sudo apt-get update -qq + sudo apt-get install -y p7zip-full + fi + + # Download and extract libusb + echo "Downloading libusb..." + curl -LO https://github.com/libusb/libusb/releases/download/v1.0.29/libusb-1.0.29.7z + 7z x -olibusb-1.0.29 libusb-1.0.29.7z > /dev/null + cp libusb-1.0.29/VS2022/MS64/dll/* dfu-util-0.11/ + + # Clean up temporary files + rm -f dfu-util-0.11-binaries.tar.xz libusb-1.0.29.7z + rm -rf dfu-util-0.11-binaries libusb-1.0.29 + + echo "Setup complete. Contents of dfu-util-0.11:" + ls -la dfu-util-0.11/ + + echo "LIBUSB1_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV + echo "DFU_UTIL_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV + + - name: Setup MSVC uses: ilammy/msvc-dev-cmd@v1 diff --git a/cmake/NativeTargets.cmake b/cmake/NativeTargets.cmake index ac8eb08c2..30b653a55 100644 --- a/cmake/NativeTargets.cmake +++ b/cmake/NativeTargets.cmake @@ -21,6 +21,10 @@ if(Qt6Core_FOUND AND NOT DISABLE_COMPANION) find_package(Libusb1) if(LIBUSB1_FOUND) + if(DEFINED ENV{DFU_UTIL_ROOT_DIR}) + set(DFU_UTIL_ROOT_DIR "$ENV{DFU_UTIL_ROOT_DIR}") + endif() + find_package(Dfuutil) endif() diff --git a/companion/src/burnconfigdialog.cpp b/companion/src/burnconfigdialog.cpp index 6d7baa9fa..7f79de707 100644 --- a/companion/src/burnconfigdialog.cpp +++ b/companion/src/burnconfigdialog.cpp @@ -78,7 +78,7 @@ void burnConfigDialog::getSettings() if ( sambaLoc.isEmpty()) sambaLoc = QFileInfo("sam-ba.exe").absoluteFilePath(); if ( dfuLoc.isEmpty()) - dfuLoc = QFileInfo("dfu-util.exe").absoluteFilePath(); + dfuLoc = QFileInfo("bin/dfu-util.exe").absoluteFilePath(); #elif defined __APPLE__ if ( sambaLoc.isEmpty()) sambaLoc = "/usr/local/bin/sam-ba";