diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index b35c592a6b..654150b098 100644 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -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 diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake index c34a1b615c..4ead2c4e53 100644 --- a/scripts/buildsystems/vcpkg.cmake +++ b/scripts/buildsystems/vcpkg.cmake @@ -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() diff --git a/scripts/cmake/vcpkg_common_definitions.cmake b/scripts/cmake/vcpkg_common_definitions.cmake index 64804a828f..922354dd7a 100644 --- a/scripts/cmake/vcpkg_common_definitions.cmake +++ b/scripts/cmake/vcpkg_common_definitions.cmake @@ -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. diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake index 03c7f34376..0e16df5411 100644 --- a/scripts/cmake/vcpkg_configure_cmake.cmake +++ b/scripts/cmake/vcpkg_configure_cmake.cmake @@ -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() diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake index f4a139b394..68120e1df3 100644 --- a/scripts/cmake/vcpkg_configure_make.cmake +++ b/scripts/cmake/vcpkg_configure_make.cmake @@ -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() diff --git a/scripts/toolchains/solaris.cmake b/scripts/toolchains/solaris.cmake new file mode 100644 index 0000000000..c1fc0aa736 --- /dev/null +++ b/scripts/toolchains/solaris.cmake @@ -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() diff --git a/scripts/update-vcpkg-tool-metadata.ps1 b/scripts/update-vcpkg-tool-metadata.ps1 index 231394f620..c9794c8587 100644 --- a/scripts/update-vcpkg-tool-metadata.ps1 +++ b/scripts/update-vcpkg-tool-metadata.ps1 @@ -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" diff --git a/scripts/vcpkg-tool-metadata.txt b/scripts/vcpkg-tool-metadata.txt index 7caff3e47b..26c74720dd 100644 --- a/scripts/vcpkg-tool-metadata.txt +++ b/scripts/vcpkg-tool-metadata.txt @@ -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 diff --git a/triplets/community/x64-solaris.cmake b/triplets/community/x64-solaris.cmake new file mode 100644 index 0000000000..b7f5d52591 --- /dev/null +++ b/triplets/community/x64-solaris.cmake @@ -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) +