Update zig. #513
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (C) Markus Franz Xaver Johannes Oberhumer | |
# for current target status see https://github.com/ziglang/zig-bootstrap/ | |
# also see: zig targets | jq '.["libc"]' | |
# 115 build-on-linux targets (jobs) | |
# 9 build-on-macos targets (jobs) | |
# | |
# All linux-musl targets also perform exhaustive | |
# runtime tests using QEMU. | |
# All i386-windows and x86_64-windows targets also perform exhaustive | |
# runtime tests using Wine. | |
name: 'Build UPX with zig cc' | |
on: [push, workflow_dispatch] | |
env: | |
CMAKE_REQUIRED_QUIET: 'OFF' | |
CMAKE_VERBOSE_MAKEFILE: 'ON' | |
CTEST_OUTPUT_ON_FAILURE: 'ON' | |
DEBIAN_FRONTEND: noninteractive | |
NO_COLOR: 1 | |
UPX_CMAKE_BUILD_FLAGS: --verbose | |
UPX_CMAKE_CONFIG_FLAGS: -Wdev --warn-uninitialized | |
UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 1 | |
UPX_DEBUG_TEST_LIBC_QSORT: 1 | |
ZSTD_CLEVEL: 17 | |
# for upx.git cloning: | |
REMOTE_REF_NAME: test-threads | |
REMOTE_REPOSITORY: upx/upx-test-threads | |
REMOTE_SERVER_URL: https://github.com | |
# 2025-02-22 | |
ZIG_DIST_VERSION: 0.14.0-dev.3286+05d8b565a | |
jobs: | |
job-build-on-linux: | |
if: github.repository_owner == 'upx' | |
name: ${{ format('{0} {1}', matrix.zig_target, matrix.zig_pic) }} | |
runs-on: ubuntu-latest | |
container: 'alpine:edge' | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Linux musl (statically linked, can use qemu-user for testing) | |
- { zig_target: aarch64-linux-musl, qemu: qemu-aarch64 } | |
- { zig_target: aarch64-linux-musl, qemu: qemu-aarch64, zig_pic: -fPIE } | |
- { zig_target: aarch64_be-linux-musl, qemu: qemu-aarch64_be, tt: UPX-UNSUPPORTED } | |
- { zig_target: aarch64_be-linux-musl, qemu: qemu-aarch64_be, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: arm-linux-musleabi, qemu: qemu-arm } | |
- { zig_target: arm-linux-musleabi, qemu: qemu-arm, zig_pic: -fPIE } | |
- { zig_target: arm-linux-musleabihf, qemu: qemu-arm } | |
- { zig_target: arm-linux-musleabihf, qemu: qemu-arm, zig_pic: -fPIE } | |
- { zig_target: armeb-linux-musleabi, qemu: qemu-armeb, UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 0 } | |
- { zig_target: armeb-linux-musleabi, qemu: qemu-armeb, zig_pic: -fPIE, UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 0 } | |
- { zig_target: armeb-linux-musleabihf, qemu: qemu-armeb } | |
- { zig_target: armeb-linux-musleabihf, qemu: qemu-armeb, zig_pic: -fPIE } | |
- { zig_target: i386-linux-musl, zig_flags: -march=i586, qemu: qemu-i386 } | |
- { zig_target: i386-linux-musl, zig_flags: -march=i586, qemu: qemu-i386, zig_pic: -fPIE } | |
- { zig_target: loongarch64-linux-musl, qemu: qemu-loongarch64, tt: UPX-UNSUPPORTED } | |
- { zig_target: loongarch64-linux-musl, qemu: qemu-loongarch64, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
# { zig_target: m68k-linux-musl, qemu: qemu-m68k, tt: UPX-UNSUPPORTED } | |
# { zig_target: m68k-linux-musl, qemu: qemu-m68k, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: mips-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mips } | |
- { zig_target: mips-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mips, zig_pic: -fPIE } | |
- { zig_target: mips-linux-musleabihf, qemu: qemu-mips } | |
- { zig_target: mips-linux-musleabihf, qemu: qemu-mips, zig_pic: -fPIE } | |
- { zig_target: mipsel-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mipsel } | |
- { zig_target: mipsel-linux-musleabi, zig_flags: -msoft-float, qemu: qemu-mipsel, zig_pic: -fPIE } | |
- { zig_target: mipsel-linux-musleabihf, qemu: qemu-mipsel } | |
- { zig_target: mipsel-linux-musleabihf, qemu: qemu-mipsel, zig_pic: -fPIE } | |
- { zig_target: mips64-linux-muslabi64, qemu: qemu-mips64, tt: UPX-UNSUPPORTED } | |
- { zig_target: mips64-linux-muslabi64, qemu: qemu-mips64, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
# { zig_target: mips64-linux-muslabi64, zig_flags: -msoft-float, qemu: qemu-mips64, tt: UPX-UNSUPPORTED } | |
# { zig_target: mips64-linux-muslabi64, zig_flags: -msoft-float, qemu: qemu-mips64, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: mips64el-linux-muslabi64, qemu: qemu-mips64el, tt: UPX-UNSUPPORTED } | |
- { zig_target: mips64el-linux-muslabi64, qemu: qemu-mips64el, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
# { zig_target: mips64el-linux-muslabi64, zig_flags: -msoft-float, qemu: qemu-mips64el, tt: UPX-UNSUPPORTED } | |
# { zig_target: mips64el-linux-muslabi64, zig_flags: -msoft-float, qemu: qemu-mips64el, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: powerpc-linux-musleabi, qemu: qemu-ppc } | |
- { zig_target: powerpc-linux-musleabi, qemu: qemu-ppc, zig_pic: -fPIE } | |
- { zig_target: powerpc-linux-musleabihf, qemu: qemu-ppc } | |
- { zig_target: powerpc-linux-musleabihf, qemu: qemu-ppc, zig_pic: -fPIE } | |
- { zig_target: powerpc64-linux-musl, qemu: qemu-ppc64 } | |
- { zig_target: powerpc64-linux-musl, qemu: qemu-ppc64, zig_pic: -fPIE } | |
- { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le } | |
- { zig_target: powerpc64le-linux-musl, qemu: qemu-ppc64le, zig_pic: -fPIE } | |
- { zig_target: riscv32-linux-musl, qemu: qemu-riscv32, tt: UPX-UNSUPPORTED } | |
- { zig_target: riscv32-linux-musl, qemu: qemu-riscv32, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: riscv64-linux-musl, qemu: qemu-riscv64, tt: UPX-UNSUPPORTED } | |
- { zig_target: riscv64-linux-musl, qemu: qemu-riscv64, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: s390x-linux-musl, qemu: qemu-s390x, tt: UPX-UNSUPPORTED } | |
- { zig_target: s390x-linux-musl, qemu: qemu-s390x, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: thumb-linux-musleabi, qemu: qemu-arm } | |
- { zig_target: thumb-linux-musleabi, qemu: qemu-arm, zig_pic: -fPIE } | |
- { zig_target: thumb-linux-musleabihf, qemu: qemu-arm } | |
- { zig_target: thumb-linux-musleabihf, qemu: qemu-arm, zig_pic: -fPIE } | |
- { zig_target: thumbeb-linux-musleabi, qemu: qemu-armeb } | |
- { zig_target: thumbeb-linux-musleabi, qemu: qemu-armeb, zig_pic: -fPIE } | |
- { zig_target: thumbeb-linux-musleabihf, qemu: qemu-armeb } | |
- { zig_target: thumbeb-linux-musleabihf, qemu: qemu-armeb, zig_pic: -fPIE } | |
- { zig_target: x86_64-linux-musl, qemu: qemu-x86_64 } | |
- { zig_target: x86_64-linux-musl, qemu: qemu-x86_64, zig_pic: -fPIE } | |
# Linux GNU (glibc) | |
- { zig_target: aarch64-linux-gnu } | |
- { zig_target: aarch64_be-linux-gnu } | |
# { zig_target: arc-linux-gnu } | |
- { zig_target: arm-linux-gnueabi } | |
- { zig_target: arm-linux-gnueabihf } | |
- { zig_target: armeb-linux-gnueabi } | |
- { zig_target: armeb-linux-gnueabihf } | |
# { zig_target: csky-linux-gnueabi } | |
# { zig_target: csky-linux-gnueabihf } | |
- { zig_target: i386-linux-gnu } | |
- { zig_target: i386-linux-gnu.2.3.4, UPX_CONFIG_DISABLE_SHARED_LIBS: 'ON' } # RHEL 4 | |
- { zig_target: i386-linux-gnu.2.5 } # RHEL 5, manylinux1 | |
- { zig_target: i386-linux-gnu.2.12 } # RHEL 6, manylinux2010 | |
- { zig_target: i386-linux-gnu.2.17 } # RHEL 7, manylinux2014 | |
- { zig_target: i386-linux-gnu.2.41 } # latest glibc version supported by zig | |
# { zig_target: loongarch32-linux-gnu } | |
- { zig_target: loongarch64-linux-gnu } | |
# { zig_target: m68k-linux-gnu } | |
- { zig_target: mips-linux-gnueabi } | |
- { zig_target: mips-linux-gnueabihf } | |
- { zig_target: mipsel-linux-gnueabi } | |
- { zig_target: mipsel-linux-gnueabihf } | |
- { zig_target: mips64-linux-gnuabi64 } | |
- { zig_target: mips64el-linux-gnuabi64 } | |
- { zig_target: powerpc-linux-gnueabi } | |
- { zig_target: powerpc-linux-gnueabihf } | |
- { zig_target: powerpc-linux-gnueabihf.2.11 } # SLES 11, Fedora 12 | |
- { zig_target: powerpc64-linux-gnu } # zig problem: currently FAILS; PRIORITY 1 | |
- { zig_target: powerpc64-linux-gnu.2.11 } # SLES 11, Fedora 12; TODO later | |
- { zig_target: powerpc64le-linux-gnu } | |
- { zig_target: riscv32-linux-gnu } | |
- { zig_target: riscv64-linux-gnu } | |
- { zig_target: s390x-linux-gnu } | |
# { zig_target: sparc-linux-gnu } | |
# { zig_target: sparc64-linux-gnu } | |
- { zig_target: x86_64-linux-gnu } | |
- { zig_target: x86_64-linux-gnu.2.3.4 } # RHEL 4 | |
- { zig_target: x86_64-linux-gnu.2.5 } # RHEL 5, manylinux1 | |
- { zig_target: x86_64-linux-gnu.2.12 } # RHEL 6, manylinux2010 | |
- { zig_target: x86_64-linux-gnu.2.17 } # RHEL 7, manylinux2014 | |
- { zig_target: x86_64-linux-gnu.2.41 } # latest glibc version supported by zig | |
# Linux ILP32 on 64-bit archs | |
- { zig_target: mips64-linux-gnuabin32 } | |
- { zig_target: mips64-linux-muslabin32, qemu: qemu-mipsn32, tt: UPX-UNSUPPORTED } | |
- { zig_target: mips64-linux-muslabin32, qemu: qemu-mipsn32, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: mips64el-linux-gnuabin32 } | |
- { zig_target: mips64el-linux-muslabin32, qemu: qemu-mipsn32el, tt: UPX-UNSUPPORTED } | |
- { zig_target: mips64el-linux-muslabin32, qemu: qemu-mipsn32el, tt: UPX-UNSUPPORTED, zig_pic: -fPIE } | |
- { zig_target: x86_64-linux-gnux32 } | |
- { zig_target: x86_64-linux-muslx32 } | |
- { zig_target: x86_64-linux-muslx32, zig_pic: -fPIE } | |
# Windows (can use Wine for testing); also see https://github.com/mstorsjo/llvm-mingw | |
- { zig_target: aarch64-windows-gnu } | |
# { zig_target: arm-windows-gnu } # NOT WORKING: https://github.com/ziglang/zig-bootstrap/issues/105 | |
# TODO later: UPX problem: fix i386-windows need for UPX_CONFIG_DISABLE_RUN_PACKED_TEST | |
- { zig_target: i386-windows-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
# { zig_target: i386-windows.xp-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
# { zig_target: i386-windows.vista-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
- { zig_target: i386-windows.win7-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
- { zig_target: i386-windows.win8-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
- { zig_target: i386-windows.win10-gnu, wine: wine32, UPX_CONFIG_DISABLE_RUN_PACKED_TEST: 'ON' } | |
- { zig_target: thumb-windows-gnu } | |
- { zig_target: x86_64-windows-gnu, wine: wine64 } | |
# { zig_target: x86_64-windows.xp-gnu, wine: wine64 } | |
- { zig_target: x86_64-windows.vista-gnu, wine: wine64 } | |
- { zig_target: x86_64-windows.win7-gnu, wine: wine64 } | |
- { zig_target: x86_64-windows.win8-gnu, wine: wine64 } | |
- { zig_target: x86_64-windows.win10-gnu, wine: wine64 } | |
# macOS | |
- { zig_target: aarch64-macos-none } | |
- { zig_target: aarch64-macos.11.0-none } | |
- { zig_target: aarch64-macos.12.0-none } | |
- { zig_target: aarch64-macos.13.0-none } | |
- { zig_target: x86_64-macos-none } | |
- { zig_target: x86_64-macos.11.0-none } | |
- { zig_target: x86_64-macos.12.0-none } | |
- { zig_target: x86_64-macos.13.0-none } | |
# wasm/WebAssembly (TODO later: can use Wasmtime for testing?) | |
- { zig_target: wasm32-wasi-musl, zig_flags: -Wno-macro-redefined -DDOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS -DDOCTEST_CONFIG_NO_POSIX_SIGNALS -DHAVE_SETJMP_H=0 -DHAVE_SIGNAL_H=0 -DHAVE_CHMOD=0 -DHAVE_CHOWN=0 -DHAVE_DUP=0, UPX_CONFIG_DISABLE_SANITIZE: 'ON', UPX_CONFIG_DISABLE_SHARED_LIBS: 'ON', UPX_CONFIG_EXPECT_THREADS: 'OFF' } | |
# just for testing: MIPS extra -march tests | |
# - mips32 is based on mips2; it looks like mips32 is the default arch for zig | |
# - mips1 is experimental (not fully supported) by clang/llvm | |
# - mips32r4 is not supported by clang/llvm/gcc | |
# - zig bug: mips3 and mips4 do not work (need extra flags) | |
# - zig bug: mips32r6 needs UPX_CONFIG_DISABLE_SAVE_TEMPS | |
# ====== working | |
# { zig_target: mips2-linux-musl, zig_flags: -march=mips2, qemu: qemu-mips } | |
# { zig_target: mips2-linux-muslsf, zig_flags: -march=mips2 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel2-linux-musl, zig_flags: -march=mips2, qemu: qemu-mipsel } | |
# { zig_target: mipsel2-linux-muslsf, zig_flags: -march=mips2 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips32-linux-musl, zig_flags: -march=mips32, qemu: qemu-mips } | |
# { zig_target: mips32-linux-muslsf, zig_flags: -march=mips32 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel32-linux-musl, zig_flags: -march=mips32, qemu: qemu-mipsel } | |
# { zig_target: mipsel32-linux-muslsf, zig_flags: -march=mips32 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips32r2-linux-musl, zig_flags: -march=mips32r2, qemu: qemu-mips } | |
# { zig_target: mips32r2-linux-muslsf, zig_flags: -march=mips32r2 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel32r2-linux-musl, zig_flags: -march=mips32r2, qemu: qemu-mipsel } | |
# { zig_target: mipsel32r2-linux-muslsf, zig_flags: -march=mips32r2 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips32r3-linux-musl, zig_flags: -march=mips32r3, qemu: qemu-mips } | |
# { zig_target: mips32r3-linux-muslsf, zig_flags: -march=mips32r3 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel32r3-linux-musl, zig_flags: -march=mips32r3, qemu: qemu-mipsel } | |
# { zig_target: mipsel32r3-linux-muslsf, zig_flags: -march=mips32r3 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips32r5-linux-musl, zig_flags: -march=mips32r5, qemu: qemu-mips } | |
# { zig_target: mips32r5-linux-muslsf, zig_flags: -march=mips32r5 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel32r5-linux-musl, zig_flags: -march=mips32r5, qemu: qemu-mipsel } | |
# { zig_target: mipsel32r5-linux-muslsf, zig_flags: -march=mips32r5 -msoft-float, qemu: qemu-mipsel } | |
# ====== these currently do not work with zig | |
# { zig_target: mips3-linux-musl, zig_flags: -march=mips3, qemu: qemu-mips } | |
# { zig_target: mips3-linux-muslsf, zig_flags: -march=mips3 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel3-linux-musl, zig_flags: -march=mips3, qemu: qemu-mipsel } | |
# { zig_target: mipsel3-linux-muslsf, zig_flags: -march=mips3 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips4-linux-musl, zig_flags: -march=mips4, qemu: qemu-mips } | |
# { zig_target: mips4-linux-muslsf, zig_flags: -march=mips4 -msoft-float, qemu: qemu-mips } | |
# { zig_target: mipsel4-linux-musl, zig_flags: -march=mips4, qemu: qemu-mipsel } | |
# { zig_target: mipsel4-linux-muslsf, zig_flags: -march=mips4 -msoft-float, qemu: qemu-mipsel } | |
# { zig_target: mips32r6-linux-musl, zig_flags: -march=mips32r6, qemu: qemu-mips, UPX_CONFIG_DISABLE_SAVE_TEMPS: 'ON' } | |
# { zig_target: mips32r6-linux-muslsf, zig_flags: -march=mips32r6 -msoft-float, qemu: qemu-mips, UPX_CONFIG_DISABLE_SAVE_TEMPS: 'ON' } | |
# { zig_target: mipsel32r6-linux-musl, zig_flags: -march=mips32r6, qemu: qemu-mipsel, UPX_CONFIG_DISABLE_SAVE_TEMPS: 'ON' } | |
# { zig_target: mipsel32r6-linux-muslsf, zig_flags: -march=mips32r6 -msoft-float, qemu: qemu-mipsel, UPX_CONFIG_DISABLE_SAVE_TEMPS: 'ON' } | |
env: | |
# for zig-cc wrapper scripts (see below): | |
ZIG_CPPFLAGS: -DUPX_DOCTEST_CONFIG_MULTITHREADING | |
ZIG_FLAGS: ${{ matrix.zig_flags }} | |
ZIG_PIC: ${{ matrix.zig_pic }} | |
ZIG_TARGET: ${{ matrix.zig_target }} | |
# for running the tests under QEMU/Wine: | |
UPX: --no-color --no-progress | |
UPX_DEBUG_DISABLE_GITREV_WARNING: 1 | |
UPX_DEBUG_DOCTEST_VERBOSE: 0 | |
steps: | |
- name: ${{ format('Install packages {0}', 'alpine') }} | |
if: ${{ job.container }} | |
shell: sh | |
run: | | |
apk update && apk upgrade && apk add bash cmake coreutils file git make parallel tar util-linux xz zstd | |
if test '${{ matrix.zig_target }}' = 'x86_64-linux-gnu'; then # only do this once per Action | |
apk add clang g++ | |
fi | |
# set PATH like in Ubuntu | |
echo "PATH=$HOME/.local/bin:$PATH" >> $GITHUB_ENV | |
git config --global --add safe.directory '*' # needed when running in a container | |
mkdir -p ~/.parallel && : > ~/.parallel/$(echo 6305-4721 | tr 0-7 leticlwi) | |
- name: ${{ format('Check out UPX {0} source code', env.REMOTE_REF_NAME) }} | |
run: | | |
git clone --branch "$REMOTE_REF_NAME" --depth 1 "$REMOTE_SERVER_URL/$REMOTE_REPOSITORY" . | |
git submodule update --init | |
rev=$(git rev-parse --short=7 HEAD) | |
echo "UPX_GITREV_SHORT=$rev" >> $GITHUB_ENV | |
# allow matrix to override env vars | |
test -z "${{ matrix.UPX_CONFIG_DISABLE_RUN_PACKED_TEST }}" || echo "UPX_CONFIG_DISABLE_RUN_PACKED_TEST=${{ matrix.UPX_CONFIG_DISABLE_RUN_PACKED_TEST }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_CONFIG_DISABLE_SANITIZE }}" || echo "UPX_CONFIG_DISABLE_SANITIZE=${{ matrix.UPX_CONFIG_DISABLE_SANITIZE }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_CONFIG_DISABLE_SAVE_TEMPS }}" || echo "UPX_CONFIG_DISABLE_SAVE_TEMPS=${{ matrix.UPX_CONFIG_DISABLE_SAVE_TEMPS }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_CONFIG_DISABLE_SELF_PACK_TEST }}" || echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=${{ matrix.UPX_CONFIG_DISABLE_SELF_PACK_TEST }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_CONFIG_DISABLE_SHARED_LIBS }}" || echo "UPX_CONFIG_DISABLE_SHARED_LIBS=${{ matrix.UPX_CONFIG_DISABLE_SHARED_LIBS }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_CONFIG_EXPECT_THREADS }}" || echo "UPX_CONFIG_EXPECT_THREADS=${{ matrix.UPX_CONFIG_EXPECT_THREADS }}" >> $GITHUB_ENV | |
test -z "${{ matrix.UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO }}" || echo "UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO=${{ matrix.UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO }}" >> $GITHUB_ENV | |
test -z "${{ matrix.tt }}" || echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV | |
# note that ~/.local/bin is included in the default $PATH on Ubuntu | |
- name: ${{ format('Install Zig {0}', env.ZIG_DIST_VERSION) }} | |
shell: bash | |
run: | | |
mkdir -p -v ~/.local/bin | |
cd ~/.local/bin | |
ZIG_DIST_NAME=zig-linux-x86_64-${ZIG_DIST_VERSION} | |
wget -q https://ziglang.org/builds/${ZIG_DIST_NAME}.tar.xz | |
ls -l ${ZIG_DIST_NAME}.tar.xz | |
tar -xoJf ${ZIG_DIST_NAME}.tar.xz | |
rm ${ZIG_DIST_NAME}.tar.xz | |
ln -s -v ${ZIG_DIST_NAME}/zig zig | |
#echo "PATH=$PATH" && which zig | |
echo -n 'zig version: '; zig version | |
# create wrapper scripts (needed for CMake) | |
log= | |
log='set -x\n' | |
echo -e '#!/bin/sh\n'$log'exec zig ar "$@"' > zig-ar | |
echo -e '#!/bin/sh\n'$log'exec zig cc -target $ZIG_TARGET $ZIG_PIC $ZIG_FLAGS $ZIG_CPPFLAGS $ZIG_CFLAGS "$@"' > zig-cc | |
echo -e '#!/bin/sh\n'$log'exec zig c++ -target $ZIG_TARGET $ZIG_PIC $ZIG_FLAGS $ZIG_CPPFLAGS $ZIG_CXXFLAGS "$@"' > zig-cxx | |
echo -e '#!/bin/sh\n'$log'exec zig ranlib "$@"' > zig-ranlib | |
chmod +x zig-ar zig-cc zig-cxx zig-ranlib | |
ls -la; head zig-ar zig-cc zig-cxx zig-ranlib | |
# update ZIG_TARGET | |
ZIG_TARGET=${ZIG_TARGET/i386-/x86-} # i386 => x86 | |
ZIG_TARGET=${ZIG_TARGET/-muslsf/-musl} # muslsf => musl | |
ZIG_TARGET=${ZIG_TARGET/mips2-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel2-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips3-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel3-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips4-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel4-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips32-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel32-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips32r2-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel32r2-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips32r3-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel32r3-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips32r5-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel32r5-/mipsel-} | |
ZIG_TARGET=${ZIG_TARGET/mips32r6-/mips-}; ZIG_TARGET=${ZIG_TARGET/mipsel32r6-/mipsel-} | |
echo "ZIG_TARGET=$ZIG_TARGET" >> $GITHUB_ENV | |
# update ZIG_FLAGS | |
# -fPIE is for compilation only => also use the correct linker flag "-pie" | |
# INFO: it seems the zig driver does handle this automatically(??), so not really needed | |
if test "X$ZIG_PIC" = "X-fPIE"; then true; | |
ZIG_FLAGS="$ZIG_FLAGS --start-no-unused-arguments -pie --end-no-unused-arguments" | |
echo "UPX_CONFIG_DISABLE_SHARED_LIBS=ON" >> $GITHUB_ENV # conflicts with ZIG_PIC/ZIG_FLAGS | |
fi | |
# zig bug TODO later: need -Wno-unused-command-line-argument | |
case "$ZIG_TARGET" in | |
powerpc*) ZIG_FLAGS="$ZIG_FLAGS -Wno-unused-command-line-argument" ;; | |
esac | |
# clang/zig bug TODO later: bogus warnings when using -save-temps | |
####ZIG_FLAGS="$ZIG_FLAGS -save-temps=obj -Wno-parentheses-equality -Wno-self-assign" | |
echo "ZIG_FLAGS=$ZIG_FLAGS" >> $GITHUB_ENV | |
#- run: set -x; zig version; zig-cc --version; zig-cxx --version | |
- run: zig-cc -E -x c -dM /dev/null # list predefined macros for C | |
- run: zig-cxx -E -x c++ -dM /dev/null # list predefined macros for C++ | |
- name: 'Build with local clang and gcc' | |
if: ${{ matrix.zig_target == 'x86_64-linux-gnu' }} # only do this once per Action | |
run: | | |
export UPX_CONFIG_HAVE_WORKING_BUILD_RPATH=ON | |
clang --version; clang++ --version | |
gcc --version; g++ --version | |
make build/extra/clang/all+test | |
make build/extra/gcc/all+test | |
- name: ${{ format('Build Release with zig-cc -target {0} {1}', env.ZIG_TARGET, env.ZIG_PIC) }} | |
run: | | |
make UPX_XTARGET=zig/${ZIG_TARGET}${ZIG_PIC} xtarget/release \ | |
CC="zig-cc" CXX="zig-cxx" CMAKE_AR="$HOME/.local/bin/zig-ar" CMAKE_RANLIB="$HOME/.local/bin/zig-ranlib" | |
file build/zig/${ZIG_TARGET}${ZIG_PIC}/release/upx* | |
- name: ${{ format('Build Debug with zig-cc -target {0} {1}', env.ZIG_TARGET, env.ZIG_PIC) }} | |
run: | | |
make UPX_XTARGET=zig/${ZIG_TARGET}${ZIG_PIC} xtarget/debug \ | |
CC="zig-cc" CXX="zig-cxx" CMAKE_AR="$HOME/.local/bin/zig-ar" CMAKE_RANLIB="$HOME/.local/bin/zig-ranlib" | |
file build/zig/${ZIG_TARGET}${ZIG_PIC}/debug/upx* | |
- name: ${{ format('Make artifact from upx-{0}-{1}', env.REMOTE_REF_NAME, env.UPX_GITREV_SHORT) }} | |
shell: bash | |
run: | | |
N=$(echo "upx-zigcc-linux-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.zig_target }}${ZIG_PIC}" | sed 's/[^0-9a-zA-Z_.+-]/-/g') | |
xbuild=$(echo "build-upx-${REMOTE_REF_NAME}-${UPX_GITREV_SHORT}" | sed 's/[^0-9a-zA-Z_.+-]/-/g') | |
mkdir -p "tmp/artifact/$N/$xbuild" | |
if [[ "${{ matrix.zig_target }}" == *-linux* ]]; then | |
dirs="${ZIG_TARGET}${ZIG_PIC}/debug ${ZIG_TARGET}${ZIG_PIC}/release" | |
for d in $dirs; do DESTDIR="$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithDestdir/$d" cmake --install build/zig/$d; done | |
for d in $dirs; do DESTDIR="$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithDestdirAndStrip/$d" cmake --install build/zig/$d --strip; done | |
for d in $dirs; do cmake --install build/zig/$d --prefix "$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithPrefix/$d"; done | |
for d in $dirs; do cmake --install build/zig/$d --prefix "$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithPrefixAndStrip/$d" --strip; done | |
fi | |
(cd build && shopt -s nullglob && cp -ai --parents */upx{,.exe} */*/*/upx{,.exe} "../tmp/artifact/$N/$xbuild") | |
(cd tmp/artifact/$N/$xbuild && find . -type f | LC_ALL=C sort | xargs -r file) | |
if command -v hardlink >/dev/null; then (cd "tmp/artifact/$N" && hardlink .) fi | |
(cd tmp/artifact && tar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") | |
echo "artifact_name=$N" >> $GITHUB_ENV | |
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact_name }} | |
path: tmp/artifact | |
- name: 'Install QEMU' | |
if: ${{ matrix.qemu }} | |
shell: bash | |
run: | | |
uname -a; pwd; id; umask | |
qemu='${{ matrix.qemu }}' | |
if test -f /etc/alpine-release; then | |
apk add "${qemu%% *}" | |
else | |
sudo apt-get update && sudo apt-get upgrade -y | |
sudo apt-get install -y --no-install-recommends qemu-user | |
fi | |
- name: 'Run basic tests under QEMU - Release' | |
if: ${{ matrix.qemu }} | |
shell: bash | |
run: | | |
set -ex -o pipefail | |
cd build/zig/${ZIG_TARGET}${ZIG_PIC}/release | |
file ./upx | |
qemu='${{ matrix.qemu }}' | |
tt='${{ matrix.tt }}' | |
[[ $tt == UPX-UNSUPPORTED ]] && tt=/bin/bash | |
[[ -z $tt ]] && tt=./upx | |
$qemu ./upx --version-short | |
$qemu ./upx -3 $tt -o tt.packed | |
$qemu ./upx -l tt.packed | |
$qemu ./upx -t tt.packed | |
$qemu ./upx -d tt.packed -o tt.unpacked | |
[[ $tt == ./upx ]] && $qemu ./tt.unpacked --version-short | |
[[ $tt == ./upx ]] && $qemu ./tt.packed --version-short | |
true | |
- name: 'Run basic tests under QEMU - Debug' | |
if: ${{ matrix.qemu }} | |
shell: bash | |
run: | | |
set -ex -o pipefail | |
cd build/zig/${ZIG_TARGET}${ZIG_PIC}/debug | |
file ./upx | |
qemu='${{ matrix.qemu }}' | |
tt='${{ matrix.tt }}' | |
[[ $tt == UPX-UNSUPPORTED ]] && tt=/bin/bash | |
[[ -z $tt ]] && tt=./upx | |
$qemu ./upx --version-short | |
$qemu ./upx -3 $tt -o tt.packed | |
$qemu ./upx -l tt.packed | |
$qemu ./upx -t tt.packed | |
$qemu ./upx -d tt.packed -o tt.unpacked | |
[[ $tt == ./upx ]] && $qemu ./tt.unpacked --version-short | |
[[ $tt == ./upx ]] && $qemu ./tt.packed --version-short | |
true | |
- name: ${{ format('Mimic ctest tests with QEMU {0} - Release', matrix.qemu) }} | |
if: ${{ matrix.qemu }} | |
run: | | |
export upx_exe_runner="${{ matrix.qemu }}" | |
env -C build/zig/${ZIG_TARGET}${ZIG_PIC}/release bash "$PWD"/misc/testsuite/mimic_ctest.sh | |
- name: ${{ format('Mimic ctest tests with QEMU {0} - Debug', matrix.qemu) }} | |
if: ${{ matrix.qemu }} | |
run: | | |
export upx_exe_runner="${{ matrix.qemu }}" | |
env -C build/zig/${ZIG_TARGET}${ZIG_PIC}/debug bash "$PWD"/misc/testsuite/mimic_ctest.sh | |
- name: 'Install Wine' | |
if: ${{ matrix.wine }} | |
shell: bash | |
run: | | |
uname -a; pwd; id; umask | |
if test -f /etc/alpine-release; then | |
# Wine >= 8.0 can run i686 win32 programs in WOW64 mode under pure 64-bit Alpine Linux | |
apk add wine | |
else | |
[[ '${{ matrix.wine }}' == wine32 ]] && sudo dpkg --add-architecture i386 | |
sudo apt-get update && sudo apt-get upgrade -y | |
[[ '${{ matrix.wine }}' == wine32 ]] && sudo apt-get install -y wine wine32:i386 | |
[[ '${{ matrix.wine }}' == wine64 ]] && sudo apt-get install -y wine wine64 | |
fi | |
# this seems to be needed for Wine when running in a container (beause of UID mismatch??) | |
mkdir -p -v ~/.wine | |
wineboot --init | |
- name: 'Run basic tests under Wine - Release' | |
if: ${{ matrix.wine }} | |
shell: bash | |
run: | | |
set -ex -o pipefail | |
cd build/zig/${ZIG_TARGET}${ZIG_PIC}/release | |
[[ -f upx && ! -f upx.exe ]] && mv -i -v upx upx.exe | |
file ./upx.exe | |
wine=wine | |
tt='./upx.exe' | |
$wine ./upx.exe --version-short | |
$wine ./upx.exe -3 $tt -o tt.packed.exe | |
$wine ./upx.exe -l tt.packed.exe | |
$wine ./upx.exe -t tt.packed.exe | |
$wine ./upx.exe -d tt.packed.exe -o tt.unpacked.exe | |
$wine ./tt.unpacked.exe --version-short | |
[[ $UPX_CONFIG_DISABLE_RUN_PACKED_TEST == ON ]] || $wine ./tt.packed.exe --version-short | |
- name: 'Run basic tests under Wine - Debug' | |
if: ${{ matrix.wine }} | |
shell: bash | |
run: | | |
set -ex -o pipefail | |
cd build/zig/${ZIG_TARGET}${ZIG_PIC}/debug | |
[[ -f upx && ! -f upx.exe ]] && mv -i -v upx upx.exe | |
file ./upx.exe | |
wine=wine | |
tt='./upx.exe' | |
$wine ./upx.exe --version-short | |
$wine ./upx.exe -3 $tt -o tt.packed.exe | |
$wine ./upx.exe -l tt.packed.exe | |
$wine ./upx.exe -t tt.packed.exe | |
$wine ./upx.exe -d tt.packed.exe -o tt.unpacked.exe | |
$wine ./tt.unpacked.exe --version-short | |
[[ $UPX_CONFIG_DISABLE_RUN_PACKED_TEST == ON ]] || $wine ./tt.packed.exe --version-short | |
- name: 'Mimic ctest tests under Wine - Release' | |
if: ${{ matrix.wine }} | |
run: | | |
export upx_exe_runner=wine | |
export upx_exe=./upx.exe | |
env -C build/zig/${ZIG_TARGET}${ZIG_PIC}/release bash "$PWD"/misc/testsuite/mimic_ctest.sh | |
- name: 'Mimic ctest tests under Wine - Debug' | |
if: ${{ matrix.wine }} | |
run: | | |
export upx_exe_runner=wine | |
export upx_exe=./upx.exe | |
env -C build/zig/${ZIG_TARGET}${ZIG_PIC}/debug bash "$PWD"/misc/testsuite/mimic_ctest.sh | |
job-build-on-macos: | |
if: github.repository_owner == 'upx' | |
name: ${{ format('{0} {1} {2}', matrix.os, matrix.zig_target, matrix.zig_pic) }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# { os: macos-11, zig_target: x86_64-macos-none } # macos-11 is EOL | |
# { os: macos-11, zig_target: x86_64-macos.11.0-none } # macos-11 is EOL | |
# { os: macos-12, zig_target: x86_64-macos-none } | |
# { os: macos-12, zig_target: x86_64-macos.11.0-none } | |
# { os: macos-12, zig_target: x86_64-macos.12.0-none } | |
- { os: macos-13, zig_target: x86_64-macos-none } | |
- { os: macos-13, zig_target: x86_64-macos.11.0-none } | |
# { os: macos-13, zig_target: x86_64-macos.12.0-none } | |
- { os: macos-13, zig_target: x86_64-macos.13.0-none } | |
# { os: macos-14, zig_target: x86_64-macos-none } | |
# { os: macos-14, zig_target: x86_64-macos.11.0-none } | |
# { os: macos-14, zig_target: x86_64-macos.12.0-none } | |
# { os: macos-14, zig_target: x86_64-macos.13.0-none } | |
- { os: macos-14, zig_target: aarch64-macos-none } | |
- { os: macos-14, zig_target: aarch64-macos.11.0-none } | |
# { os: macos-14, zig_target: aarch64-macos.12.0-none } | |
- { os: macos-14, zig_target: aarch64-macos.13.0-none } | |
- { os: macos-15, zig_target: aarch64-macos-none } | |
- { os: macos-15, zig_target: aarch64-macos.11.0-none } | |
# { os: macos-15, zig_target: aarch64-macos.12.0-none } | |
- { os: macos-15, zig_target: aarch64-macos.13.0-none } | |
env: | |
UPX_CONFIG_HAVE_WORKING_BUILD_RPATH: 'ON' | |
# for zig-cc wrapper scripts (see below): | |
ZIG_CPPFLAGS: -DUPX_DOCTEST_CONFIG_MULTITHREADING | |
ZIG_FLAGS: ${{ matrix.zig_flags }} | |
ZIG_PIC: ${{ matrix.zig_pic }} | |
ZIG_TARGET: ${{ matrix.zig_target }} | |
# for running the tests: | |
UPX: --no-color --no-progress | |
UPX_DEBUG_DISABLE_GITREV_WARNING: 1 | |
UPX_DEBUG_DOCTEST_VERBOSE: 0 | |
# misc | |
BUILD_SUBDIR: zig-on-${{ matrix.os }} | |
steps: | |
- name: ${{ format('Check out UPX {0} source code', env.REMOTE_REF_NAME) }} | |
run: | | |
git clone --branch "$REMOTE_REF_NAME" --depth 1 "$REMOTE_SERVER_URL/$REMOTE_REPOSITORY" . | |
git submodule update --init | |
rev=$(git rev-parse --short=7 HEAD) | |
echo "UPX_GITREV_SHORT=$rev" >> $GITHUB_ENV | |
# | |
mkdir -p ~/.parallel && : > ~/.parallel/$(echo 6305-4721 | tr 0-7 leticlwi) | |
echo "UPX_DEBUG_FORCE_PACK_MACOS=1" >> $GITHUB_ENV | |
case "${{ matrix.os }}" in | |
# TODO FIXME: UPX problem: UPX on macos-13+ is broken => disable run-packed for now | |
macos-13 | macos-14 | macos-15) echo "UPX_CONFIG_DISABLE_SELF_PACK_TEST=ON" >> $GITHUB_ENV ;; | |
esac | |
# note that ~/bin is included in the default $PATH on macos-11/12/13/14 runners | |
- name: ${{ format('Install Zig {0}', env.ZIG_DIST_VERSION) }} | |
run: | | |
uname -a; pwd; id; umask | |
mkdir -p -v ~/bin | |
cd ~/bin | |
ZIG_DIST_NAME=zig-macos-aarch64-${ZIG_DIST_VERSION} | |
case "${{ matrix.os }}" in | |
*-1[0-3]) ZIG_DIST_NAME=zig-macos-x86_64-${ZIG_DIST_VERSION} ;; | |
esac | |
wget -q https://ziglang.org/builds/${ZIG_DIST_NAME}.tar.xz | |
ls -l ${ZIG_DIST_NAME}.tar.xz | |
tar -xoJf ${ZIG_DIST_NAME}.tar.xz | |
rm ${ZIG_DIST_NAME}.tar.xz | |
ln -s -v ${ZIG_DIST_NAME}/zig zig | |
#echo "PATH=$PATH" && which zig | |
echo -n 'zig version: '; zig version | |
# create wrapper scripts (needed for CMake) | |
log= | |
log='set -x\n' | |
echo -e '#!/bin/sh\n'$log'exec zig ar "$@"' > zig-ar | |
echo -e '#!/bin/sh\n'$log'exec zig cc -target $ZIG_TARGET $ZIG_PIC $ZIG_FLAGS $ZIG_CPPFLAGS $ZIG_CFLAGS "$@"' > zig-cc | |
echo -e '#!/bin/sh\n'$log'exec zig c++ -target $ZIG_TARGET $ZIG_PIC $ZIG_FLAGS $ZIG_CPPFLAGS $ZIG_CXXFLAGS "$@"' > zig-cxx | |
echo -e '#!/bin/sh\n'$log'exec zig ranlib "$@"' > zig-ranlib | |
chmod +x zig-ar zig-cc zig-cxx zig-ranlib | |
ls -la; head zig-ar zig-cc zig-cxx zig-ranlib | |
- run: set -x; xcode-select -p || true; xcodebuild -version || true | |
- run: set -x; zig version; zig-cc --version; zig-cxx --version | |
- run: zig-cc -E -x c -dM /dev/null # list predefined macros for C | |
- run: zig-cxx -E -x c++ -dM /dev/null # list predefined macros for C++ | |
- name: 'Build with local clang' | |
if: ${{ endsWith(matrix.zig_target,'-macos-none') }} # only do this once per Action | |
run: | | |
export UPX_CONFIG_HAVE_WORKING_BUILD_RPATH=ON | |
clang --version; clang++ --version | |
make build/extra/clang/all+test | |
- name: ${{ format('Build Release with zig-cc -target {0} {1}', env.ZIG_TARGET, env.ZIG_PIC) }} | |
run: | | |
make UPX_XTARGET=$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC} xtarget/release \ | |
CC="zig-cc" CXX="zig-cxx" CMAKE_AR="$HOME/bin/zig-ar" CMAKE_RANLIB="$HOME/bin/zig-ranlib" | |
file build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/release/upx* | |
- name: ${{ format('Build Debug with zig-cc -target {0} {1}', env.ZIG_TARGET, env.ZIG_PIC) }} | |
run: | | |
make UPX_XTARGET=$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC} xtarget/debug \ | |
CC="zig-cc" CXX="zig-cxx" CMAKE_AR="$HOME/bin/zig-ar" CMAKE_RANLIB="$HOME/bin/zig-ranlib" | |
file build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/debug/upx* | |
- name: ${{ format('Make artifact from upx-{0}-{1}', env.REMOTE_REF_NAME, env.UPX_GITREV_SHORT) }} | |
run: | | |
N=$(echo "upx-zigcc-${{ matrix.os }}-${GITHUB_REF_NAME}-${GITHUB_SHA:0:7}-${{ matrix.zig_target }}${ZIG_PIC}" | sed 's/[^0-9a-zA-Z_.+-]/-/g') | |
xbuild=$(echo "build-upx-${REMOTE_REF_NAME}-${UPX_GITREV_SHORT}" | sed 's/[^0-9a-zA-Z_.+-]/-/g') | |
mkdir -p "tmp/artifact/$N/$xbuild" | |
dirs="${ZIG_TARGET}${ZIG_PIC}/debug ${ZIG_TARGET}${ZIG_PIC}/release" | |
for d in $dirs; do DESTDIR="$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithDestdir/$BUILD_SUBDIR/$d" cmake --install build/$BUILD_SUBDIR/$d; done | |
for d in $dirs; do DESTDIR="$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithDestdirAndStrip/$BUILD_SUBDIR/$d" cmake --install build/$BUILD_SUBDIR/$d --strip; done | |
for d in $dirs; do cmake --install build/$BUILD_SUBDIR/$d --prefix "$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithPrefix/$BUILD_SUBDIR/$d"; done | |
for d in $dirs; do cmake --install build/$BUILD_SUBDIR/$d --prefix "$PWD/tmp/artifact/$N/$xbuild/InstallWithCMake/InstallWithPrefixAndStrip/$BUILD_SUBDIR/$d" --strip; done | |
(cd build && shopt -s nullglob && rsync -R -a */upx */*/*/upx "../tmp/artifact/$N/$xbuild/") | |
hardlink="$HOMEBREW_PREFIX/opt/util-linux/bin/hardlink" | |
if test -f "$hardlink"; then (cd "tmp/artifact/$N" && "$hardlink" .) fi | |
(cd tmp/artifact && gtar --sort=name --zstd -cf "$N.tar.zst" "$N" && rm -rf "./$N" && ls -la && zstd -tq "$N.tar.zst") | |
echo "artifact_name=$N" >> $GITHUB_ENV | |
- name: ${{ format('Upload artifact {0}', env.artifact_name) }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact_name }} | |
path: tmp/artifact | |
- name: 'Run ctest tests - Release' | |
run: | | |
UPX_DEBUG_DOCTEST_VERBOSE=1 ./build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/release/upx --version-short | |
make build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/release+test | |
- name: 'Run ctest tests - Debug' | |
run: | | |
UPX_DEBUG_DOCTEST_VERBOSE=1 ./build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/debug/upx --version-short | |
make build/$BUILD_SUBDIR/${ZIG_TARGET}${ZIG_PIC}/debug+test |