diff --git a/ports/protobuf/CONTROL b/ports/protobuf/CONTROL index 115b306c55ae64..799613ec1df9f5 100644 --- a/ports/protobuf/CONTROL +++ b/ports/protobuf/CONTROL @@ -1,6 +1,6 @@ Source: protobuf Version: 3.13.0 -Port-Version: 2 +Port-Version: 3 Homepage: https://github.com/protocolbuffers/protobuf Description: Protocol Buffers - Google's data interchange format diff --git a/ports/protobuf/portfile.cmake b/ports/protobuf/portfile.cmake index 47510b5504ac2a..a91a83743c0ca2 100644 --- a/ports/protobuf/portfile.cmake +++ b/ports/protobuf/portfile.cmake @@ -10,16 +10,99 @@ vcpkg_from_github( fix-static-build.patch ) -if(CMAKE_HOST_WIN32 AND NOT VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND NOT VCPKG_TARGET_ARCHITECTURE MATCHES "x86") +if(VCPKG_HOST_IS_WINDOWS) + set(HOST_PROTOBUF_TRIPLET "x86-windows") + set(VCPKG_HOST_ARCH "$ENV{PROCESSOR_ARCHITECTURE}") + + message(STATUS "Dump CMake variables and some ENV variables to debug azure pipeline") + get_cmake_property(_variableNames VARIABLES) + foreach (_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") + endforeach() + + message(STATUS "VCPKG_TARGET_ARCHITECTURE = ${VCPKG_TARGET_ARCHITECTURE}, PROCESSOR_ARCHITECTURE = $ENV{PROCESSOR_ARCHITECTURE}, PROCESSOR_ARCHITEW6432 = $ENV{PROCESSOR_ARCHITEW6432}") + + if(NOT VCPKG_TARGET_IS_WINDOWS) set(protobuf_BUILD_PROTOC_BINARIES OFF) -elseif(CMAKE_HOST_WIN32 AND NOT VCPKG_TARGET_IS_MINGW AND NOT (VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP)) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "AMD64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND (VCPKG_HOST_ARCH MATCHES "[xX]86" AND $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64")) + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "[xX]86|AMD64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm|arm64" AND VCPKG_HOST_ARCH MATCHES "ARM64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + else() set(protobuf_BUILD_PROTOC_BINARIES OFF) -else() + endif() + + if(NOT protobuf_BUILD_PROTOC_BINARIES) + if(VCPKG_HOST_ARCH MATCHES "ARM64") + set(HOST_PROTOBUF_TRIPLET "arm64-windows") + elseif(VCPKG_HOST_ARCH MATCHES "[xX]86" AND NOT $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64") + set(HOST_PROTOBUF_TRIPLET "x86-windows") + elseif(VCPKG_HOST_ARCH MATCHES "AMD64" OR (VCPKG_HOST_ARCH MATCHES "[xX]86" AND $ENV{PROCESSOR_ARCHITEW6432} MATCHES "AMD64")) + set(HOST_PROTOBUF_TRIPLET "x64-windows") + else() + set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet") + endif() + endif() + +elseif(VCPKG_HOST_IS_OSX) + execute_process(COMMAND "sysctl" "hw.machine" OUTPUT_VARIABLE VCPKG_HOST_ARCH) + string(STRIP "${VCPKG_HOST_ARCH}" VCPKG_HOST_ARCH) + + if(NOT VCPKG_TARGET_IS_OSX) + set(protobuf_BUILD_PROTOC_BINARIES OFF) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "x86_64") set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "i[36]86|x86_64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + else() + set(protobuf_BUILD_PROTOC_BINARIES OFF) + endif() + + if(NOT protobuf_BUILD_PROTOC_BINARIES) + if(VCPKG_HOST_ARCH MATCHES "x86_64") + set(HOST_PROTOBUF_TRIPLET "x64-osx") + else() + set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet") + endif() + endif() + +elseif(VCPKG_HOST_IS_LINUX) + execute_process(COMMAND "uname" "-m" OUTPUT_VARIABLE VCPKG_HOST_ARCH) + string(STRIP "${VCPKG_HOST_ARCH}" VCPKG_HOST_ARCH) + + if(NOT VCPKG_TARGET_IS_LINUX) + set(protobuf_BUILD_PROTOC_BINARIES OFF) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_HOST_ARCH MATCHES "x86_64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_HOST_ARCH MATCHES "i[36]86|x86_64") + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64" AND VCPKG_HOST_ARCH MATCHES "arm64*") + set(protobuf_BUILD_PROTOC_BINARIES ON) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm" AND VCPKG_HOST_ARCH MATCHES "arm*") + set(protobuf_BUILD_PROTOC_BINARIES ON) + else() + set(protobuf_BUILD_PROTOC_BINARIES OFF) + endif() + + if(NOT protobuf_BUILD_PROTOC_BINARIES) + if(VCPKG_HOST_ARCH MATCHES "x86_64") + set(HOST_PROTOBUF_TRIPLET "x64-linux") + elseif(VCPKG_HOST_ARCH MATCHES "arm64*") + set(HOST_PROTOBUF_TRIPLET "arm64-linux") + elseif(VCPKG_HOST_ARCH MATCHES "arm") + set(HOST_PROTOBUF_TRIPLET "arm-linux") + else() + set(HOST_PROTOBUF_TRIPLET "unknown host compatible triplet") + endif() + endif() endif() -if(NOT protobuf_BUILD_PROTOC_BINARIES AND NOT EXISTS ${CURRENT_INSTALLED_DIR}/../x86-windows/tools/protobuf) - message(FATAL_ERROR "Cross-targetting protobuf requires the x86-windows protoc to be available. Please install protobuf:x86-windows first.") +if(HOST_PROTOBUF_TRIPLET AND NOT protobuf_BUILD_PROTOC_BINARIES AND NOT EXISTS ${_VCPKG_INSTALLED_DIR}/${HOST_PROTOBUF_TRIPLET}/tools/protobuf) + message(FATAL_ERROR "Cross-targetting protobuf requires the ${HOST_PROTOBUF_TRIPLET} protoc to be available. Please install protobuf:${HOST_PROTOBUF_TRIPLET} first.") endif() if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") @@ -93,13 +176,21 @@ endif() protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/share) -if(CMAKE_HOST_WIN32) - if(protobuf_BUILD_PROTOC_BINARIES) - vcpkg_copy_tools(TOOL_NAMES protoc) - else() - file(COPY ${CURRENT_INSTALLED_DIR}/../x86-windows/tools/${PORT} DESTINATION ${CURRENT_PACKAGES_DIR}/tools) - endif() +if(protobuf_BUILD_PROTOC_BINARIES) + file(GLOB EXECUTABLES ${CURRENT_PACKAGES_DIR}/bin/protoc*) + foreach(E IN LISTS EXECUTABLES) + file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ) + endforeach() +else() + file(GLOB EXECUTABLES ${_VCPKG_INSTALLED_DIR}/${HOST_PROTOBUF_TRIPLET}/tools/${PORT}/protoc*) + foreach(E IN LISTS EXECUTABLES) + file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ) + endforeach() +endif() +if(VCPKG_HOST_IS_WINDOWS) if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/bin) protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin) @@ -108,11 +199,6 @@ if(CMAKE_HOST_WIN32) protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin/protoc.exe) endif() else() - file(GLOB EXECUTABLES ${CURRENT_PACKAGES_DIR}/bin/protoc*) - foreach(E IN LISTS EXECUTABLES) - file(INSTALL ${E} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT} - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ) - endforeach() protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/debug/bin) protobuf_try_remove_recurse_wait(${CURRENT_PACKAGES_DIR}/bin) endif() @@ -139,4 +225,4 @@ endif() vcpkg_fixup_pkgconfig(${SYSTEM_LIBRARIES}) configure_file(${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake ${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake @ONLY) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) \ No newline at end of file +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)