Skip to content

Commit 4334d8b

Browse files
authored
[vcpkg] Add platform support for Solaris and illumos (#45524)
1 parent 8d25d5e commit 4334d8b

File tree

9 files changed

+96
-14
lines changed

9 files changed

+96
-14
lines changed

scripts/bootstrap.sh

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ vcpkgCheckRepoTool()
8787
echo "On Alpine:"
8888
echo " apk add build-base cmake ninja zip unzip curl git"
8989
echo " (and export VCPKG_FORCE_SYSTEM_BINARIES=1)"
90+
echo "On Solaris and illumos distributions:"
91+
echo " pkg install web/curl compress/zip compress/unzip"
9092
exit 1
9193
fi
9294
fi
@@ -154,12 +156,19 @@ vcpkgDownloadFile()
154156
mv "$downloadPath.part" "$downloadPath"
155157
}
156158

157-
vcpkgExtractTar()
159+
vcpkgExtractArchive()
158160
{
159161
archive=$1; toPath=$2
160162
rm -rf "$toPath" "$toPath.partial"
161-
mkdir -p "$toPath.partial"
162-
$(cd "$toPath.partial" && tar xzf "$archive")
163+
case "$archive" in
164+
*.tar.gz)
165+
mkdir -p "$toPath.partial"
166+
$(cd "$toPath.partial" && tar xzf "$archive")
167+
;;
168+
*.zip)
169+
unzip -qd "$toPath.partial" "$archive"
170+
;;
171+
esac
163172
mv "$toPath.partial" "$toPath"
164173
}
165174

@@ -202,25 +211,25 @@ fi
202211
if [ "$vcpkgDownloadTool" = "ON" ]; then
203212
vcpkgDownloadFile "https://github.com/microsoft/vcpkg-tool/releases/download/$VCPKG_TOOL_RELEASE_TAG/$vcpkgToolName" "$vcpkgRootDir/vcpkg" $vcpkgToolReleaseSha
204213
else
205-
vcpkgToolReleaseTarball="$VCPKG_TOOL_RELEASE_TAG.tar.gz"
206-
vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseTarball"
214+
vcpkgToolReleaseArchive="$VCPKG_TOOL_RELEASE_TAG.zip"
215+
vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseArchive"
207216
baseBuildDir="$vcpkgRootDir/buildtrees/_vcpkg"
208217
buildDir="$baseBuildDir/build"
209-
tarballPath="$downloadsDir/$vcpkgToolReleaseTarball"
218+
archivePath="$downloadsDir/$vcpkgToolReleaseArchive"
210219
srcBaseDir="$baseBuildDir/src"
211220
srcDir="$srcBaseDir/vcpkg-tool-$VCPKG_TOOL_RELEASE_TAG"
212221

213-
if [ -e "$tarballPath" ]; then
214-
vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
222+
if [ -e "$archivePath" ]; then
223+
vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha"
215224
else
216225
echo "Downloading vcpkg tool sources"
217-
vcpkgDownloadFile "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
226+
vcpkgDownloadFile "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha"
218227
fi
219228

220229
echo "Building vcpkg-tool..."
221230
rm -rf "$baseBuildDir"
222231
mkdir -p "$buildDir"
223-
vcpkgExtractTar "$tarballPath" "$srcBaseDir"
232+
vcpkgExtractArchive "$archivePath" "$srcBaseDir"
224233
cmakeConfigOptions="-DCMAKE_BUILD_TYPE=Release -G 'Ninja' -DVCPKG_DEVELOPMENT_WARNINGS=OFF"
225234

226235
if [ "${VCPKG_MAX_CONCURRENCY}" != "" ] ; then

scripts/buildsystems/vcpkg.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_
368368
set(Z_VCPKG_TARGET_TRIPLET_PLAT freebsd)
369369
elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD"))
370370
set(Z_VCPKG_TARGET_TRIPLET_PLAT openbsd)
371+
elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS"))
372+
set(Z_VCPKG_TARGET_TRIPLET_PLAT solaris)
371373
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Android"))
372374
set(Z_VCPKG_TARGET_TRIPLET_PLAT android)
373375
endif()

scripts/cmake/vcpkg_common_definitions.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
2323
set(VCPKG_TARGET_IS_FREEBSD ON)
2424
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
2525
set(VCPKG_TARGET_IS_OPENBSD ON)
26+
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "SunOS")
27+
set(VCPKG_TARGET_IS_SOLARIS ON)
2628
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
2729
set(VCPKG_TARGET_IS_WINDOWS ON)
2830
set(VCPKG_TARGET_IS_MINGW ON)
@@ -41,6 +43,8 @@ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
4143
set(VCPKG_HOST_IS_FREEBSD ON)
4244
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
4345
set(VCPKG_HOST_IS_OPENBSD ON)
46+
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
47+
set(VCPKG_HOST_IS_SOLARIS ON)
4448
endif()
4549

4650
#Helper variable to identify the host path separator.

scripts/cmake/vcpkg_configure_cmake.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ endfunction()
1717

1818
function(z_vcpkg_get_visual_studio_generator)
1919
cmake_parse_arguments(PARSE_ARGV 0 arg "" "OUT_GENERATOR;OUT_ARCH" "")
20-
20+
2121
if (NOT DEFINED arg_OUT_GENERATOR)
2222
message(FATAL_ERROR "OUT_GENERATOR must be defined.")
2323
endif()
@@ -81,6 +81,8 @@ function(z_vcpkg_select_default_vcpkg_chainload_toolchain)
8181
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/freebsd.cmake")
8282
elseif(VCPKG_TARGET_IS_OPENBSD)
8383
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/openbsd.cmake")
84+
elseif(VCPKG_TARGET_IS_SOLARIS)
85+
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/solaris.cmake")
8486
endif()
8587
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE ${VCPKG_CHAINLOAD_TOOLCHAIN_FILE} PARENT_SCOPE)
8688
endfunction()

scripts/cmake/vcpkg_configure_make.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,8 @@ function(vcpkg_configure_make)
902902
find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
903903
elseif(VCPKG_HOST_IS_FREEBSD OR VCPKG_HOST_IS_OPENBSD)
904904
find_program(Z_VCPKG_MAKE gmake REQUIRED)
905+
elseif(VCPKG_HOST_IS_SOLARIS)
906+
find_program(Z_VCPKG_MAKE NAMES gmake make REQUIRED)
905907
else()
906908
find_program(Z_VCPKG_MAKE make REQUIRED)
907909
endif()

scripts/toolchains/solaris.cmake

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
if(NOT _VCPKG_SOLARIS_TOOLCHAIN)
2+
set(_VCPKG_SOLARIS_TOOLCHAIN 1)
3+
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
4+
set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
5+
endif()
6+
set(CMAKE_SYSTEM_NAME SunOS CACHE STRING "")
7+
8+
if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
9+
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
10+
set(CMAKE_SYSTEM_PROCESSOR amd64 CACHE STRING "")
11+
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
12+
set(CMAKE_SYSTEM_PROCESSOR i386 CACHE STRING "")
13+
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
14+
set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
15+
else()
16+
set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
17+
endif()
18+
endif()
19+
20+
if(POLICY CMP0056)
21+
cmake_policy(SET CMP0056 NEW)
22+
endif()
23+
if(POLICY CMP0066)
24+
cmake_policy(SET CMP0066 NEW)
25+
endif()
26+
if(POLICY CMP0067)
27+
cmake_policy(SET CMP0067 NEW)
28+
endif()
29+
if(POLICY CMP0137)
30+
cmake_policy(SET CMP0137 NEW)
31+
endif()
32+
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
33+
VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
34+
VCPKG_C_FLAGS VCPKG_CXX_FLAGS
35+
VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
36+
VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
37+
VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
38+
)
39+
40+
string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
41+
string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
42+
string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
43+
string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
44+
string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
45+
string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
46+
47+
string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
48+
string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
49+
string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
50+
string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
51+
string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
52+
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
53+
string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
54+
string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
55+
string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
56+
string(APPEND CMAKE_ASM_FLAGS_INIT " ${VCPKG_C_FLAGS} ")
57+
endif()

scripts/update-vcpkg-tool-metadata.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ foreach ($binary in @('macos', 'muslc', 'glibc', 'glibc-arm64')) {
2424
}
2525

2626
# Source
27-
$sourceName = "$Date.tar.gz"
27+
$sourceName = "$Date.zip"
2828
& $vcpkg x-download "$PSScriptRoot\$sourceName" `
29-
"--url=https://github.com/microsoft/vcpkg-tool/archive/refs/tags/$Date.tar.gz" --skip-sha512
29+
"--url=https://github.com/microsoft/vcpkg-tool/archive/refs/tags/$Date.zip" --skip-sha512
3030
$sha512 = & $vcpkg hash "$PSScriptRoot\$sourceName"
3131
$metadata += "VCPKG_TOOL_SOURCE_SHA=$sha512`n"
3232

scripts/vcpkg-tool-metadata.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ VCPKG_MACOS_SHA=c66674ec843108ba12e5b5440e555bfd3dc90796800e47f3ada3ac1d21a2408b
33
VCPKG_MUSLC_SHA=5f45faebbf0d8b26d3a4c3185734b4777de6d9d2d3bf015462d4b111a80850785be825780a509b4222e951807f4a4f88a23bc4e9a97e7bd9b7e7f3ffe77eea88
44
VCPKG_GLIBC_SHA=7b1dc255863bed0c1187a4212b29af46a4700767b008013b12954d0d1e64473485c1ef90b210a2fbd521b574f888b23b853a7da9886dabdd4ed1b898cf65518d
55
VCPKG_GLIBC_ARM64_SHA=cb46320dd345fb84676b82b98ebdedf79e557dfc1a1e50fd8240e60c92b8ce2bb3d4c93020ef1a0f130dc4edcb4fda1f93d9912077c53818a097c12879bd177d
6-
VCPKG_TOOL_SOURCE_SHA=f39a7b58d798d4d2dc27c87fbdad3968c4565a8394dd640af9cadebbf69c7456eb49765d64dd0e5b0f5436586fa43b2037c0f9b2f8be1c7e71d67037a4590aa8
6+
VCPKG_TOOL_SOURCE_SHA=774b7d313c18ac89665d424f4ac94985e1e67a3fe900e5be749fe0042d8c478b7f385633de72bda7856a0b0639af190961609e63cc295879d01abbe9136a5a65
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
set(VCPKG_TARGET_ARCHITECTURE x64)
2+
set(VCPKG_CRT_LINKAGE dynamic)
3+
set(VCPKG_LIBRARY_LINKAGE static)
4+
5+
set(VCPKG_CMAKE_SYSTEM_NAME SunOS)
6+

0 commit comments

Comments
 (0)