diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89c86af2e7..0954bce45c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,12 +68,7 @@ jobs: - uses: msys2/setup-msys2@v2 with: update: true - install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-ccache mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git - - shell: msys2 {0} - run: | - curl -O https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-protobuf-c-1.4.1-1-any.pkg.tar.zst - curl -O https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-protobuf-21.9-1-any.pkg.tar.zst - pacman --noconfirm -U mingw-w64-x86_64-protobuf-c-1.4.1-1-any.pkg.tar.zst mingw-w64-x86_64-protobuf-21.9-1-any.pkg.tar.zst + install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-ccache mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git pkg-config - name: build run: | ${{env.CCACHE_SETTINGS}} diff --git a/cmake/CheckTrezor.cmake b/cmake/CheckTrezor.cmake index 87582a7133..a6b0605dc9 100644 --- a/cmake/CheckTrezor.cmake +++ b/cmake/CheckTrezor.cmake @@ -23,32 +23,6 @@ OPTION(USE_DEVICE_TREZOR_UDP_RELEASE "Trezor UdpTransport in release mode" $ENV{ OPTION(USE_DEVICE_TREZOR_DEBUG "Trezor Debugging enabled" $ENV{USE_DEVICE_TREZOR_DEBUG}) OPTION(TREZOR_DEBUG "Main Trezor debugging switch" $ENV{TREZOR_DEBUG}) -# Helper function to fix cmake < 3.6.0 FindProtobuf variables -function(_trezor_protobuf_fix_vars) - if(${CMAKE_VERSION} VERSION_LESS "3.6.0") - foreach(UPPER - PROTOBUF_SRC_ROOT_FOLDER - PROTOBUF_IMPORT_DIRS - PROTOBUF_DEBUG - PROTOBUF_LIBRARY - PROTOBUF_PROTOC_LIBRARY - PROTOBUF_INCLUDE_DIR - PROTOBUF_PROTOC_EXECUTABLE - PROTOBUF_LIBRARY_DEBUG - PROTOBUF_PROTOC_LIBRARY_DEBUG - PROTOBUF_LITE_LIBRARY - PROTOBUF_LITE_LIBRARY_DEBUG - ) - if (DEFINED ${UPPER}) - string(REPLACE "PROTOBUF_" "Protobuf_" Camel ${UPPER}) - if (NOT DEFINED ${Camel}) - set(${Camel} ${${UPPER}} PARENT_SCOPE) - endif() - endif() - endforeach() - endif() -endfunction() - macro(trezor_fatal_msg msg) if ($ENV{USE_DEVICE_TREZOR_MANDATORY}) message(FATAL_ERROR @@ -72,40 +46,21 @@ endmacro() # Use Trezor master switch if (USE_DEVICE_TREZOR) - # Protobuf is required to build protobuf messages for Trezor - include(FindProtobuf OPTIONAL) + # Look for protobuf-config.cmake, provided by Protobuf + find_package(Protobuf CONFIG) - # PkgConfig works better with new Protobuf - find_package(PkgConfig QUIET) - pkg_check_modules(PROTOBUF protobuf) - - if (NOT Protobuf_FOUND) - FIND_PACKAGE(Protobuf CONFIG) - endif() - if (NOT Protobuf_FOUND) - FIND_PACKAGE(Protobuf) + if (Protobuf_FOUND) + # https://github.com/protocolbuffers/protobuf/issues/14576 + find_program(Protobuf_PROTOC_EXECUTABLE protoc REQUIRED) + set(Protobuf_LIBRARY protobuf::libprotobuf) # Compatibility with FindProtobuf.cmake + else() + # Look for FindProtobuf.cmake, provided by CMake + find_package(Protobuf) endif() - _trezor_protobuf_fix_vars() - # Early fail for optional Trezor support - if(NOT Protobuf_FOUND AND NOT Protobuf_LIBRARY AND NOT Protobuf_PROTOC_EXECUTABLE AND NOT Protobuf_INCLUDE_DIR) - trezor_fatal_msg("Trezor: Could not find Protobuf") - elseif(${CMAKE_CXX_STANDARD} LESS 17 AND ${Protobuf_VERSION} GREATER 21) - trezor_fatal_msg("Trezor: Unsupported Protobuf version ${Protobuf_VERSION} with C++ ${CMAKE_CXX_STANDARD}. Please, use Protobuf v21.") - elseif(NOT Protobuf_LIBRARY) - trezor_fatal_msg("Trezor: Protobuf library not found: ${Protobuf_LIBRARY}") - unset(Protobuf_FOUND) - elseif(NOT Protobuf_PROTOC_EXECUTABLE OR NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") - trezor_fatal_msg("Trezor: Protobuf executable not found: ${Protobuf_PROTOC_EXECUTABLE}") - unset(Protobuf_FOUND) - elseif(NOT Protobuf_INCLUDE_DIR OR NOT EXISTS "${Protobuf_INCLUDE_DIR}") - trezor_fatal_msg("Trezor: Protobuf include dir not found: ${Protobuf_INCLUDE_DIR}") - unset(Protobuf_FOUND) - else() - message(STATUS "Trezor: Protobuf lib: ${Protobuf_LIBRARY}, inc: ${Protobuf_INCLUDE_DIR}, protoc: ${Protobuf_PROTOC_EXECUTABLE}") - set(Protobuf_INCLUDE_DIRS ${Protobuf_INCLUDE_DIR}) - set(Protobuf_FOUND 1) # override found if all required info was provided by variables + if (NOT Protobuf_FOUND) + trezor_fatal_msg("Trezor: protobuf library not found") endif() if(TREZOR_DEBUG)