Update Windows packaging script: follow upstream MSYS2 changes (#488)

- mingw-w64-clang-i686-qt5-static removed
- mingw-w64-i686-7zip removed
This commit is contained in:
Cyano Hao 2024-09-18 15:21:34 +08:00 committed by GitHub
parent b41ea443e0
commit 9952ce57f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 86 additions and 44 deletions

View File

@ -10,14 +10,21 @@ jobs:
matrix: matrix:
msystem: [MINGW32, MINGW64, UCRT64, CLANG64] msystem: [MINGW32, MINGW64, UCRT64, CLANG64]
include: include:
- isUcrt: false
- msystem: MINGW32 - msystem: MINGW32
packagePrefix: mingw-w64-i686 packagePrefix: mingw-w64-i686
_7zPackagePrefix: mingw-w64-x86_64
- msystem: MINGW64 - msystem: MINGW64
packagePrefix: mingw-w64-x86_64 packagePrefix: mingw-w64-x86_64
_7zPackagePrefix: mingw-w64-x86_64
- msystem: UCRT64 - msystem: UCRT64
isUcrt: true
packagePrefix: mingw-w64-ucrt-x86_64 packagePrefix: mingw-w64-ucrt-x86_64
_7zPackagePrefix: mingw-w64-ucrt-x86_64
- msystem: CLANG64 - msystem: CLANG64
isUcrt: true
packagePrefix: mingw-w64-clang-x86_64 packagePrefix: mingw-w64-clang-x86_64
_7zPackagePrefix: mingw-w64-clang-x86_64
runs-on: windows-latest runs-on: windows-latest
defaults: defaults:
run: run:
@ -33,21 +40,33 @@ jobs:
with: with:
msystem: ${{ matrix.msystem }} msystem: ${{ matrix.msystem }}
update: true update: true
install: ${{ matrix.packagePrefix }}-toolchain ${{ matrix.packagePrefix }}-qt5-static install: |
${{ matrix.packagePrefix }}-cc
${{ matrix.packagePrefix }}-make
${{ matrix.packagePrefix }}-qt5-static
${{ matrix.packagePrefix }}-cmake
mingw-w64-i686-nsis
${{ matrix._7zPackagePrefix }}-7zip
git
- name: Download MinGW toolchain
run: |
mkdir -p assets
curl -L https://github.com/redpanda-cpp/toolchain-win32-mingw-xp/releases/download/11.4.0-r0/mingw32-11.4.0-r0.7z -o assets/mingw32.7z
curl -L https://github.com/redpanda-cpp/toolchain-win32-mingw-xp/releases/download/11.4.0-r0/mingw64-11.4.0-r0.7z -o assets/mingw64.7z
- name: Build - name: Build
run: | run: |
mkdir build && pushd build ./packages/msys/build-mingw.sh \
$MSYSTEM_PREFIX/qt5-static/bin/qmake PREFIX=$GITHUB_WORKSPACE/pkg $GITHUB_WORKSPACE/Red_Panda_CPP.pro $( [[ ${{ matrix.isUcrt }} -eq 1 ]] && echo --ucrt 22621 )
mingw32-make -j$(nproc) ./packages/msys/build-mingw.sh --mingw \
mingw32-make install $( [[ ${{ matrix.isUcrt }} -eq 1 ]] && echo --ucrt 22621 )
popd
- name: Upload - name: Upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: Windows MSYS2 - msystem=${{ matrix.msystem }} name: Windows MSYS2 - msystem=${{ matrix.msystem }}
path: pkg/ path: dist/
windows_legacy: windows_legacy:
name: Windows NT 5.x name: Windows NT 5.x

View File

@ -35,7 +35,7 @@ See also [more build instructions for Windows](./docs/detailed-build-win.md).
## MSYS2 Qt Library with MinGW Toolchain (Recommended) ## MSYS2 Qt Library with MinGW Toolchain (Recommended)
Red Panda C++ should work with any MinGW toolchain from MSYS2, including GCCs and Clangs in three GNU-based environments (MINGW32, MINGW64 and UCRT64), and Clangs in three LLVM-based environments (CLANG32, CLANG64 and CLANGARM64; see also [MSYS2s document](https://www.msys2.org/docs/environments/)), while the following toolchains are frequently tested: Red Panda C++ should work with any MinGW toolchain from MSYS2, including GCCs and Clangs in three GNU-based environments (MINGW32, MINGW64 and UCRT64), and Clangs in 64-bit LLVM-based environments (CLANG64 and CLANGARM64; see also [MSYS2s document](https://www.msys2.org/docs/environments/)), while the following toolchains are frequently tested:
- MINGW32 GCC, - MINGW32 GCC,
- MINGW64 GCC, - MINGW64 GCC,
- UCRT64 GCC (recommended for x64) - UCRT64 GCC (recommended for x64)
@ -47,13 +47,21 @@ Prerequisites:
0. Windows 10 x64 or later, or Windows 11 ARM64. 0. Windows 10 x64 or later, or Windows 11 ARM64.
1. Install MSYS2. 1. Install MSYS2.
2. In selected environment, install toolchain, Qt 5 library, and required utils: 2. In selected environment, install toolchain, Qt 5 library, and required utils. For 64-bit:
```bash ```bash
pacman -S \ pacman -S \
$MINGW_PACKAGE_PREFIX-{toolchain,qt5-static,7zip,cmake} \ $MINGW_PACKAGE_PREFIX-{cc,make,qt5-static,7zip,cmake} \
mingw-w64-i686-nsis \ mingw-w64-i686-nsis \
git curl git curl
``` ```
And for 32-bit:
```bash
pacman -S \
$MINGW_PACKAGE_PREFIX-{cc,make,qt5-static,cmake} \
mingw-w64-i686-nsis \
mingw-w64-x86_64-7zip \
git curl
```
To build, launch selected MSYS2 environment, run: To build, launch selected MSYS2 environment, run:
```bash ```bash

View File

@ -35,7 +35,7 @@
## MSYS2 的 Qt 库 + MinGW 工具链(推荐) ## MSYS2 的 Qt 库 + MinGW 工具链(推荐)
小熊猫C++ 应该能在 MSYS2 的 MinGW 工具链上构建,包括 3 个基于 GNU 的环境MINGW32、MINGW64、UCRT64中的 GCC 和 Clang以及 3 个基于 LLVM 的环境(CLANG32、CLANG64、CLANGARM64中的 Clang关于环境的详情可参考 [MSYS2 的文档](https://www.msys2.org/docs/environments/)。以下几个工具链测试较充分: 小熊猫C++ 应该能在 MSYS2 的 MinGW 工具链上构建,包括 3 个基于 GNU 的环境MINGW32、MINGW64、UCRT64中的 GCC 和 Clang以及基于 LLVM 的 64 位环境CLANG64、CLANGARM64中的 Clang关于环境的详情可参考 [MSYS2 的文档](https://www.msys2.org/docs/environments/)。以下几个工具链测试较充分:
- MINGW32 GCC - MINGW32 GCC
- MINGW64 GCC - MINGW64 GCC
- UCRT64 GCCx64 推荐), - UCRT64 GCCx64 推荐),
@ -47,13 +47,21 @@
0. Windows 10 x64 或更高版本,或 Windows 11 ARM64。 0. Windows 10 x64 或更高版本,或 Windows 11 ARM64。
1. 安装 MSYS2。 1. 安装 MSYS2。
2. 在所选环境中安装工具链、Qt 5 库、其他所需工具: 2. 在所选环境中安装工具链、Qt 5 库、其他所需工具64 位
```bash ```bash
pacman -S \ pacman -S \
$MINGW_PACKAGE_PREFIX-{toolchain,qt5-static,7zip,cmake} \ $MINGW_PACKAGE_PREFIX-{cc,make,qt5-static,7zip,cmake} \
mingw-w64-i686-nsis \ mingw-w64-i686-nsis \
git curl git curl
``` ```
32 位:
```bash
pacman -S \
$MINGW_PACKAGE_PREFIX-{cc,make,qt5-static,cmake} \
mingw-w64-i686-nsis \
mingw-w64-x86_64-7zip \
git curl
```
要构建此项目,启动所选的 MSYS2 环境,然后运行 要构建此项目,启动所选的 MSYS2 环境,然后运行
```bash ```bash

View File

@ -9,7 +9,7 @@ Usage:
Options: Options:
-h, --help Display this information. -h, --help Display this information.
-m, --msystem <MSYSTEM> Switch to other MSYS2 environment. -m, --msystem <MSYSTEM> Switch to other MSYS2 environment.
(MINGW32, MINGW64, UCRT64, CLANG32, CLANG64, CLANGARM64) (MINGW32, MINGW64, UCRT64, CLANG64, CLANGARM64)
MUST be used before other options. MUST be used before other options.
-c, --clean Clean build and package directories. -c, --clean Clean build and package directories.
-nd, --no-deps Skip dependency check. -nd, --no-deps Skip dependency check.
@ -29,7 +29,7 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
msystem=$2 msystem=$2
shift 2 shift 2
case "${msystem}" in case "${msystem}" in
MINGW32|MINGW64|UCRT64|CLANG32|CLANG64|CLANGARM64) MINGW32|MINGW64|UCRT64|CLANG64|CLANGARM64)
export MSYSTEM="${msystem}" export MSYSTEM="${msystem}"
exec /bin/bash --login "$0" "$@" exec /bin/bash --login "$0" "$@"
;; ;;
@ -41,7 +41,10 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
fi fi
case $MSYSTEM in case $MSYSTEM in
MINGW32|CLANG32) MINGW32)
# there is no UCRT32
# CLANG32 qt5-static removed since 5.15.15
# https://github.com/msys2/MINGW-packages/commit/ab062c6e5d6e9fff86ee8f88c1d8e9601ea9ab5b
_NATIVE_ARCH=i686 _NATIVE_ARCH=i686
_DISPLAY_ARCH=x86 _DISPLAY_ARCH=x86
;; ;;
@ -55,7 +58,7 @@ case $MSYSTEM in
;; ;;
*) *)
echo "This script must be run from one of following MSYS2 shells:" echo "This script must be run from one of following MSYS2 shells:"
echo " - MINGW32/CLANG32" echo " - MINGW32"
echo " - MINGW64/UCRT64/CLANG64" echo " - MINGW64/UCRT64/CLANG64"
echo " - CLANGARM64" echo " - CLANGARM64"
exit 1 exit 1
@ -113,16 +116,9 @@ done
function check-deps() { function check-deps() {
# MSYS2s `pacman -Q` is 100x slower than Arch Linux. Allow skipping the check. # MSYS2s `pacman -Q` is 100x slower than Arch Linux. Allow skipping the check.
[[ $_SKIP_DEPS_CHECK -eq 1 ]] && return [[ $_SKIP_DEPS_CHECK -eq 1 ]] && return
case $MSYSTEM in
MINGW32|MINGW64|UCRT64)
local compiler=gcc
;;
CLANG32|CLANG64|CLANGARM64)
local compiler=clang
;;
esac
local deps=( local deps=(
$MINGW_PACKAGE_PREFIX-{$compiler,make,qt5-static} $MINGW_PACKAGE_PREFIX-{cc,make,qt5-static}
# always use x86 NSIS to display error message of mismatched architecture
mingw-w64-i686-nsis mingw-w64-i686-nsis
git git
) )

View File

@ -10,7 +10,7 @@ function fn_print_help() {
Options: Options:
-h, --help Display this information. -h, --help Display this information.
-m, --msystem <MSYSTEM> Switch to other MSYS2 environment. -m, --msystem <MSYSTEM> Switch to other MSYS2 environment.
(MINGW32, MINGW64, UCRT64, CLANG32, CLANG64, CLANGARM64) (MINGW32, MINGW64, UCRT64, CLANG64, CLANGARM64)
MUST be used before other options. MUST be used before other options.
-c, --clean Clean build and package directories. -c, --clean Clean build and package directories.
--mingw Alias for --mingw32 (x86 app) or --mingw64 (x64 app). --mingw Alias for --mingw32 (x86 app) or --mingw64 (x64 app).
@ -33,7 +33,7 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
msystem=$2 msystem=$2
shift 2 shift 2
case "${msystem}" in case "${msystem}" in
MINGW32|MINGW64|UCRT64|CLANG32|CLANG64|CLANGARM64) MINGW32|MINGW64|UCRT64|CLANG64|CLANGARM64)
export MSYSTEM="${msystem}" export MSYSTEM="${msystem}"
exec /bin/bash --login "$0" "$@" exec /bin/bash --login "$0" "$@"
;; ;;
@ -45,7 +45,10 @@ if [[ $# -gt 1 && ($1 == "-m" || $1 == "--msystem") ]]; then
fi fi
case "${MSYSTEM}" in case "${MSYSTEM}" in
MINGW32|CLANG32) # there is no UCRT32 MINGW32)
# there is no UCRT32
# CLANG32 qt5-static removed since 5.15.15
# https://github.com/msys2/MINGW-packages/commit/ab062c6e5d6e9fff86ee8f88c1d8e9601ea9ab5b
NSIS_ARCH=x86 NSIS_ARCH=x86
PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win32" PACKAGE_BASENAME="RedPanda.C++.${APP_VERSION}.win32"
;; ;;
@ -59,7 +62,7 @@ case "${MSYSTEM}" in
;; ;;
*) *)
echo "This script must be run in one of the following MSYS2 shells:" echo "This script must be run in one of the following MSYS2 shells:"
echo " - MINGW32 / CLANG32" echo " - MINGW32"
echo " - MINGW64 / UCRT64 / CLANG64" echo " - MINGW64 / UCRT64 / CLANG64"
echo " - CLANGARM64" echo " - CLANGARM64"
exit 1 exit 1
@ -113,7 +116,7 @@ while [[ $# -gt 0 ]]; do
;; ;;
--ucrt) --ucrt)
case "${MSYSTEM}" in case "${MSYSTEM}" in
CLANG32|UCRT64|CLANG64) UCRT64|CLANG64)
UCRT="$2" UCRT="$2"
shift 2 shift 2
;; ;;
@ -151,6 +154,19 @@ SOURCE_DIR="$(pwd)"
ASSETS_DIR="${SOURCE_DIR}/assets" ASSETS_DIR="${SOURCE_DIR}/assets"
UCRT_DIR="/c/Program Files (x86)/Windows Kits/10/Redist/10.0.${UCRT}.0/ucrt/DLLs/${NSIS_ARCH}" UCRT_DIR="/c/Program Files (x86)/Windows Kits/10/Redist/10.0.${UCRT}.0/ucrt/DLLs/${NSIS_ARCH}"
case "${MSYSTEM}" in
MINGW32)
# 32-bit 7zip removed since 24.05
# https://github.com/msys2/MINGW-packages/commit/de4ea25ca787035cbed50a158bdc200a3776254b
_7Z="/mingw64/bin/7z"
_7Z_PACKAGE_PREFIX="mingw-w64-x86_64"
;;
MINGW64|UCRT64|CLANG64|CLANGARM64)
_7Z="7z"
_7Z_PACKAGE_PREFIX="${MINGW_PACKAGE_PREFIX}"
;;
esac
MINGW32_FOLDER="mingw32" MINGW32_FOLDER="mingw32"
MINGW32_ARCHIVE="mingw32.7z" MINGW32_ARCHIVE="mingw32.7z"
MINGW32_COMPILER_NAME="MinGW-w64 i686 GCC 11.2" MINGW32_COMPILER_NAME="MinGW-w64 i686 GCC 11.2"
@ -175,19 +191,14 @@ function fn_print_progress() {
## check deps ## check deps
if [[ ${CHECK_DEPS} -eq 1 ]]; then if [[ ${CHECK_DEPS} -eq 1 ]]; then
case "${MSYSTEM}" in
MINGW32|MINGW64|UCRT64)
compiler=gcc
;;
CLANG32|CLANG64|CLANGARM64)
compiler=clang
;;
esac
deps=( deps=(
${MINGW_PACKAGE_PREFIX}-{$compiler,make,qt5-static,7zip,cmake} ${MINGW_PACKAGE_PREFIX}-{cc,make,qt5-static,cmake}
# always use x86 NSIS to display error message of mismatched architecture
mingw-w64-i686-nsis mingw-w64-i686-nsis
${_7Z_PACKAGE_PREFIX}-7zip
git git
) )
for dep in ${deps[@]}; do for dep in ${deps[@]}; do
pacman -Q ${dep} &>/dev/null || { pacman -Q ${dep} &>/dev/null || {
echo "Missing dependency: ${dep}" echo "Missing dependency: ${dep}"
@ -286,14 +297,14 @@ nsis_flags=(
if [[ ${COMPILER_MINGW32} -eq 1 ]]; then if [[ ${COMPILER_MINGW32} -eq 1 ]]; then
nsis_flags+=(-DHAVE_MINGW32) nsis_flags+=(-DHAVE_MINGW32)
if [[ ! -d "mingw32" ]]; then if [[ ! -d "mingw32" ]]; then
[[ -f "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" ]] && 7z x "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" -o"${PACKAGE_DIR}" [[ -f "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" ]] && "${_7Z}" x "${SOURCE_DIR}/assets/${MINGW32_ARCHIVE}" -o"${PACKAGE_DIR}"
[[ -d "${SOURCE_DIR}/assets/${MINGW32_FOLDER}" ]] && cp -a --dereference "${SOURCE_DIR}/assets/${MINGW32_FOLDER}" "${PACKAGE_DIR}" [[ -d "${SOURCE_DIR}/assets/${MINGW32_FOLDER}" ]] && cp -a --dereference "${SOURCE_DIR}/assets/${MINGW32_FOLDER}" "${PACKAGE_DIR}"
fi fi
fi fi
if [[ ${COMPILER_MINGW64} -eq 1 ]]; then if [[ ${COMPILER_MINGW64} -eq 1 ]]; then
nsis_flags+=(-DHAVE_MINGW64) nsis_flags+=(-DHAVE_MINGW64)
if [[ ! -d "mingw64" ]]; then if [[ ! -d "mingw64" ]]; then
[[ -f "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" ]] && 7z x "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" -o"${PACKAGE_DIR}" [[ -f "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" ]] && "${_7Z}" x "${SOURCE_DIR}/assets/${MINGW64_ARCHIVE}" -o"${PACKAGE_DIR}"
[[ -d "${SOURCE_DIR}/assets/${MINGW64_FOLDER}" ]] && cp -a --dereference "${SOURCE_DIR}/assets/${MINGW64_FOLDER}" "${PACKAGE_DIR}" [[ -d "${SOURCE_DIR}/assets/${MINGW64_FOLDER}" ]] && cp -a --dereference "${SOURCE_DIR}/assets/${MINGW64_FOLDER}" "${PACKAGE_DIR}"
fi fi
fi fi
@ -307,8 +318,8 @@ fi
"${NSIS}" "${nsis_flags[@]}" redpanda.nsi "${NSIS}" "${nsis_flags[@]}" redpanda.nsi
fn_print_progress "Making Portable Package..." fn_print_progress "Making Portable Package..."
7z x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe" "${_7Z}" x "${SETUP_NAME}" -o"RedPanda-CPP" -xr'!$PLUGINSDIR' -x"!uninstall.exe"
7z a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP" "${_7Z}" a -mmt -mx9 -ms=on -mqs=on -mf=BCJ2 "${PORTABLE_NAME}" "RedPanda-CPP"
rm -rf "RedPanda-CPP" rm -rf "RedPanda-CPP"
mv "${SETUP_NAME}" "${TARGET_DIR}" mv "${SETUP_NAME}" "${TARGET_DIR}"