Deps_Builder: Win: Use blender mirror of msys2 for bootstrapping
This (optionally) uses the blender mirror for bootstrapping the msys2 environment, this is needed since some upstream providers remove older packages frequently which makes it difficult to build older libs from scratch. Pull Request: https://projects.blender.org/blender/blender/pulls/131617
This commit is contained in:
committed by
Ray molenkamp
parent
2a53debc73
commit
5eba4313aa
@@ -4,6 +4,7 @@
|
||||
|
||||
if(WIN32)
|
||||
option(ENABLE_MSYS2 "Enable building of ffmpeg/libsndfile/fftw3/gmp by installing msys2" ON)
|
||||
option(MSYS2_USE_UPSTREAM_PACKAGES "Use upstream packages to bootstrap msys2, when OFF the blender mirror will be used" OFF)
|
||||
endif()
|
||||
option(FORCE_CHECK_HASH "Force a check of all hashses during CMake the configure phase" OFF)
|
||||
|
||||
|
||||
@@ -10,6 +10,71 @@
|
||||
# Note - no compiler is actually installed here, we just use the tools
|
||||
##################################################################################################
|
||||
|
||||
macro(download_package package_name)
|
||||
# this will
|
||||
# 1 - download the required package from either the upstream location or blender mirror depending on MSYS2_USE_UPSTREAM_PACKAGES
|
||||
# 2 - Set a global variable [package_name]_FILE to point to the downloaded file
|
||||
# 3 - Verify the hash if FORCE_CHECK_HASH is on
|
||||
set(URL ${MSYS2_${package_name}_URL})
|
||||
set(HASH ${MSYS2_${package_name}_HASH})
|
||||
string(REPLACE "/" ";" _url_list ${URL})
|
||||
list(GET _url_list -1 _file_name)
|
||||
set(_final_filename "${DOWNLOAD_DIR}/${_file_name}")
|
||||
set(MSYS2_${package_name}_FILE ${_final_filename})
|
||||
if(NOT EXISTS "${_final_filename}")
|
||||
if(MSYS2_USE_UPSTREAM_PACKAGES)
|
||||
set(_final_url ${URI})
|
||||
else()
|
||||
set(_final_url "https://projects.blender.org/blender/lib-windows_x64/media/branch/build_environment/${_file_name}")
|
||||
endif()
|
||||
message("Downloading ${_final_filename} from ${_final_url}")
|
||||
file(
|
||||
DOWNLOAD ${_final_url} ${_final_filename}
|
||||
TIMEOUT 1800 # seconds
|
||||
EXPECTED_HASH SHA1=${HASH}
|
||||
TLS_VERIFY ON
|
||||
SHOW_PROGRESS
|
||||
)
|
||||
endif()
|
||||
if(EXISTS "${_final_filename}")
|
||||
if(FORCE_CHECK_HASH)
|
||||
file(SHA1 ${_final_filename} LOCAL_HASH)
|
||||
if(NOT ${HASH} STREQUAL ${LOCAL_HASH})
|
||||
message(FATAL_ERROR "${_final_filename} SHA1 mismatch\nExpected\t: ${HASH}\nActual\t: ${LOCAL_HASH}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
unset(URL)
|
||||
unset(HASH)
|
||||
unset(_final_url)
|
||||
unset(_final_filename)
|
||||
unset(_url_list)
|
||||
unset(_file_name)
|
||||
endmacro()
|
||||
|
||||
# Note we use URL here rather than URI as the deps checker will check all *_URI vars for package/license/homepage requirements
|
||||
# since none of this will end up on end users systems the requirements are not as strict
|
||||
set(MSYS2_BASE_URL https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20221028.tar.xz)
|
||||
set(MSYS2_BASE_HASH 545cc6a4c36bb98058f2b2945c5d06de523516db)
|
||||
|
||||
set(MSYS2_NASM_URL http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/win64/nasm-2.13.02-win64.zip)
|
||||
set(MSYS2_NASM_HASH 6ae5eaffde68aa7450fadd7f45ba5c6df3dce558)
|
||||
|
||||
set(MSYS2_PERL_URL https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip)
|
||||
set(MSYS2_PERL_HASH 987c870cc2401e481e3ddbdd1462d2a52da34187)
|
||||
|
||||
set(MSYS2_GAS_URL https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/9309c67acb535ca6248f092e96131d8eb07eefc1/gas-preprocessor.pl)
|
||||
set(MSYS2_GAS_HASH d86e756793eb37a269f06e20538d2bb3141ec24a)
|
||||
|
||||
set(MSYS2_AR_URL https://raw.githubusercontent.com/gcc-mirror/gcc/releases/gcc-12.2.0/ar-lib)
|
||||
set(MSYS2_AR_HASH 77194f45708a80f502102fa881a8a5cb048b03af)
|
||||
|
||||
download_package(BASE)
|
||||
download_package(NASM)
|
||||
download_package(PERL)
|
||||
download_package(GAS)
|
||||
download_package(AR)
|
||||
|
||||
message("LIBDIR = ${LIBDIR}")
|
||||
macro(cmake_to_msys_path MsysPath ResultingPath)
|
||||
string(REPLACE ":" "" TmpPath "${MsysPath}")
|
||||
@@ -21,16 +86,6 @@ endmacro()
|
||||
cmake_to_msys_path(${LIBDIR} msys2_LIBDIR)
|
||||
message("msys2_LIBDIR = ${msys2_LIBDIR}")
|
||||
|
||||
# Get msys2-base (currently x64 only)
|
||||
message("Checking for msys2 base")
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz")
|
||||
message("Downloading msys2-base")
|
||||
file(DOWNLOAD
|
||||
"https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20221028.tar.xz"
|
||||
"${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Make msys2 root directory
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2")
|
||||
execute_process(
|
||||
@@ -41,10 +96,10 @@ endif()
|
||||
|
||||
# Extract msys2
|
||||
if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd") AND
|
||||
(EXISTS "${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz"))
|
||||
(EXISTS "${MSYS2_BASE_FILE}"))
|
||||
message("Extracting msys2 base")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf ${MSYS2_BASE_FILE}
|
||||
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2
|
||||
)
|
||||
|
||||
@@ -96,20 +151,11 @@ if(EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/link.exe")
|
||||
)
|
||||
endif()
|
||||
|
||||
message("Checking for nasm")
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip")
|
||||
message("Downloading nasm")
|
||||
file(DOWNLOAD
|
||||
"http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/win64/nasm-2.13.02-win64.zip"
|
||||
"${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip"
|
||||
)
|
||||
endif()
|
||||
|
||||
# extract nasm
|
||||
if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip"))
|
||||
if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${MSYS2_NASM_FILE}"))
|
||||
message("Extracting nasm")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip"
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf "${MSYS2_NASM_FILE}"
|
||||
WORKING_DIRECTORY ${DOWNLOAD_DIR}/
|
||||
)
|
||||
execute_process(
|
||||
@@ -120,16 +166,6 @@ if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${D
|
||||
endif()
|
||||
set(NASM_PATH "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe")
|
||||
|
||||
message("Checking for perl")
|
||||
# download perl for libvpx
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/strawberry-perl-5.38.0.1-64bit-portable.zip")
|
||||
message("Downloading perl")
|
||||
file(DOWNLOAD
|
||||
"https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip"
|
||||
"${DOWNLOAD_DIR}/strawberry-perl-5.38.0.1-64bit-portable.zip"
|
||||
)
|
||||
endif()
|
||||
|
||||
# make perl root directory
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/perl")
|
||||
execute_process(
|
||||
@@ -139,32 +175,31 @@ if(NOT EXISTS "${DOWNLOAD_DIR}/perl")
|
||||
endif()
|
||||
|
||||
# extract perl
|
||||
if((NOT EXISTS "${DOWNLOAD_DIR}/perl/portable.perl") AND (EXISTS "${DOWNLOAD_DIR}/strawberry-perl-5.38.0.1-64bit-portable.zip"))
|
||||
if((NOT EXISTS "${DOWNLOAD_DIR}/perl/portable.perl") AND (EXISTS "${MSYS2_PERL_FILE}"))
|
||||
message("Extracting perl")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/strawberry-perl-5.38.0.1-64bit-portable.zip
|
||||
COMMAND ${CMAKE_COMMAND} -E tar jxf ${MSYS2_PERL_FILE}
|
||||
WORKING_DIRECTORY ${DOWNLOAD_DIR}/perl
|
||||
)
|
||||
endif()
|
||||
|
||||
# Get gas-preprocessor for ffmpeg
|
||||
# This is required for Windows ARM64 builds
|
||||
message("Checking for gas-preprocessor.pl")
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl")
|
||||
message("Downloading gas-preprocessor.pl")
|
||||
file(DOWNLOAD
|
||||
"https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/9309c67acb535ca6248f092e96131d8eb07eefc1/gas-preprocessor.pl"
|
||||
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl"
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${MSYS2_GAS_FILE}
|
||||
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Get ar-lib
|
||||
message("Checking for ar-lib")
|
||||
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib")
|
||||
message("Downloading ar-lib")
|
||||
file(DOWNLOAD
|
||||
"https://raw.githubusercontent.com/gcc-mirror/gcc/releases/gcc-12.2.0/ar-lib"
|
||||
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib"
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${MSYS2_AR_FILE}
|
||||
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user