[vcpkg] Add platform support for Solaris and illumos (#45524)

This commit is contained in:
Albert Lee
2025-09-18 09:20:36 +09:00
committed by GitHub
parent 8d25d5e456
commit 4334d8b4c8
9 changed files with 96 additions and 14 deletions

View File

@@ -87,6 +87,8 @@ vcpkgCheckRepoTool()
echo "On Alpine:"
echo " apk add build-base cmake ninja zip unzip curl git"
echo " (and export VCPKG_FORCE_SYSTEM_BINARIES=1)"
echo "On Solaris and illumos distributions:"
echo " pkg install web/curl compress/zip compress/unzip"
exit 1
fi
fi
@@ -154,12 +156,19 @@ vcpkgDownloadFile()
mv "$downloadPath.part" "$downloadPath"
}
vcpkgExtractTar()
vcpkgExtractArchive()
{
archive=$1; toPath=$2
rm -rf "$toPath" "$toPath.partial"
mkdir -p "$toPath.partial"
$(cd "$toPath.partial" && tar xzf "$archive")
case "$archive" in
*.tar.gz)
mkdir -p "$toPath.partial"
$(cd "$toPath.partial" && tar xzf "$archive")
;;
*.zip)
unzip -qd "$toPath.partial" "$archive"
;;
esac
mv "$toPath.partial" "$toPath"
}
@@ -202,25 +211,25 @@ fi
if [ "$vcpkgDownloadTool" = "ON" ]; then
vcpkgDownloadFile "https://github.com/microsoft/vcpkg-tool/releases/download/$VCPKG_TOOL_RELEASE_TAG/$vcpkgToolName" "$vcpkgRootDir/vcpkg" $vcpkgToolReleaseSha
else
vcpkgToolReleaseTarball="$VCPKG_TOOL_RELEASE_TAG.tar.gz"
vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseTarball"
vcpkgToolReleaseArchive="$VCPKG_TOOL_RELEASE_TAG.zip"
vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseArchive"
baseBuildDir="$vcpkgRootDir/buildtrees/_vcpkg"
buildDir="$baseBuildDir/build"
tarballPath="$downloadsDir/$vcpkgToolReleaseTarball"
archivePath="$downloadsDir/$vcpkgToolReleaseArchive"
srcBaseDir="$baseBuildDir/src"
srcDir="$srcBaseDir/vcpkg-tool-$VCPKG_TOOL_RELEASE_TAG"
if [ -e "$tarballPath" ]; then
vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
if [ -e "$archivePath" ]; then
vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha"
else
echo "Downloading vcpkg tool sources"
vcpkgDownloadFile "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
vcpkgDownloadFile "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha"
fi
echo "Building vcpkg-tool..."
rm -rf "$baseBuildDir"
mkdir -p "$buildDir"
vcpkgExtractTar "$tarballPath" "$srcBaseDir"
vcpkgExtractArchive "$archivePath" "$srcBaseDir"
cmakeConfigOptions="-DCMAKE_BUILD_TYPE=Release -G 'Ninja' -DVCPKG_DEVELOPMENT_WARNINGS=OFF"
if [ "${VCPKG_MAX_CONCURRENCY}" != "" ] ; then

View File

@@ -368,6 +368,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_
set(Z_VCPKG_TARGET_TRIPLET_PLAT freebsd)
elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD"))
set(Z_VCPKG_TARGET_TRIPLET_PLAT openbsd)
elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS"))
set(Z_VCPKG_TARGET_TRIPLET_PLAT solaris)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Android"))
set(Z_VCPKG_TARGET_TRIPLET_PLAT android)
endif()

View File

@@ -23,6 +23,8 @@ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
set(VCPKG_TARGET_IS_FREEBSD ON)
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
set(VCPKG_TARGET_IS_OPENBSD ON)
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "SunOS")
set(VCPKG_TARGET_IS_SOLARIS ON)
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
set(VCPKG_TARGET_IS_WINDOWS ON)
set(VCPKG_TARGET_IS_MINGW ON)
@@ -41,6 +43,8 @@ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
set(VCPKG_HOST_IS_FREEBSD ON)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
set(VCPKG_HOST_IS_OPENBSD ON)
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
set(VCPKG_HOST_IS_SOLARIS ON)
endif()
#Helper variable to identify the host path separator.

View File

@@ -17,7 +17,7 @@ endfunction()
function(z_vcpkg_get_visual_studio_generator)
cmake_parse_arguments(PARSE_ARGV 0 arg "" "OUT_GENERATOR;OUT_ARCH" "")
if (NOT DEFINED arg_OUT_GENERATOR)
message(FATAL_ERROR "OUT_GENERATOR must be defined.")
endif()
@@ -81,6 +81,8 @@ function(z_vcpkg_select_default_vcpkg_chainload_toolchain)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/freebsd.cmake")
elseif(VCPKG_TARGET_IS_OPENBSD)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/openbsd.cmake")
elseif(VCPKG_TARGET_IS_SOLARIS)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/solaris.cmake")
endif()
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${VCPKG_CHAINLOAD_TOOLCHAIN_FILE} PARENT_SCOPE)
endfunction()

View File

@@ -902,6 +902,8 @@ function(vcpkg_configure_make)
find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
elseif(VCPKG_HOST_IS_FREEBSD OR VCPKG_HOST_IS_OPENBSD)
find_program(Z_VCPKG_MAKE gmake REQUIRED)
elseif(VCPKG_HOST_IS_SOLARIS)
find_program(Z_VCPKG_MAKE NAMES gmake make REQUIRED)
else()
find_program(Z_VCPKG_MAKE make REQUIRED)
endif()

View File

@@ -0,0 +1,57 @@
if(NOT _VCPKG_SOLARIS_TOOLCHAIN)
set(_VCPKG_SOLARIS_TOOLCHAIN 1)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
endif()
set(CMAKE_SYSTEM_NAME SunOS CACHE STRING "")
if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
set(CMAKE_SYSTEM_PROCESSOR amd64 CACHE STRING "")
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
set(CMAKE_SYSTEM_PROCESSOR i386 CACHE STRING "")
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
else()
set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
endif()
endif()
if(POLICY CMP0056)
cmake_policy(SET CMP0056 NEW)
endif()
if(POLICY CMP0066)
cmake_policy(SET CMP0066 NEW)
endif()
if(POLICY CMP0067)
cmake_policy(SET CMP0067 NEW)
endif()
if(POLICY CMP0137)
cmake_policy(SET CMP0137 NEW)
endif()
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
VCPKG_C_FLAGS VCPKG_CXX_FLAGS
VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
)
string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
string(APPEND CMAKE_ASM_FLAGS_INIT " ${VCPKG_C_FLAGS} ")
endif()

View File

@@ -24,9 +24,9 @@ foreach ($binary in @('macos', 'muslc', 'glibc', 'glibc-arm64')) {
}
# Source
$sourceName = "$Date.tar.gz"
$sourceName = "$Date.zip"
& $vcpkg x-download "$PSScriptRoot\$sourceName" `
"--url=https://github.com/microsoft/vcpkg-tool/archive/refs/tags/$Date.tar.gz" --skip-sha512
"--url=https://github.com/microsoft/vcpkg-tool/archive/refs/tags/$Date.zip" --skip-sha512
$sha512 = & $vcpkg hash "$PSScriptRoot\$sourceName"
$metadata += "VCPKG_TOOL_SOURCE_SHA=$sha512`n"

View File

@@ -3,4 +3,4 @@ VCPKG_MACOS_SHA=c66674ec843108ba12e5b5440e555bfd3dc90796800e47f3ada3ac1d21a2408b
VCPKG_MUSLC_SHA=5f45faebbf0d8b26d3a4c3185734b4777de6d9d2d3bf015462d4b111a80850785be825780a509b4222e951807f4a4f88a23bc4e9a97e7bd9b7e7f3ffe77eea88
VCPKG_GLIBC_SHA=7b1dc255863bed0c1187a4212b29af46a4700767b008013b12954d0d1e64473485c1ef90b210a2fbd521b574f888b23b853a7da9886dabdd4ed1b898cf65518d
VCPKG_GLIBC_ARM64_SHA=cb46320dd345fb84676b82b98ebdedf79e557dfc1a1e50fd8240e60c92b8ce2bb3d4c93020ef1a0f130dc4edcb4fda1f93d9912077c53818a097c12879bd177d
VCPKG_TOOL_SOURCE_SHA=f39a7b58d798d4d2dc27c87fbdad3968c4565a8394dd640af9cadebbf69c7456eb49765d64dd0e5b0f5436586fa43b2037c0f9b2f8be1c7e71d67037a4590aa8
VCPKG_TOOL_SOURCE_SHA=774b7d313c18ac89665d424f4ac94985e1e67a3fe900e5be749fe0042d8c478b7f385633de72bda7856a0b0639af190961609e63cc295879d01abbe9136a5a65

View File

@@ -0,0 +1,6 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME SunOS)