740 lines
29 KiB
YAML
740 lines
29 KiB
YAML
name: dev-short-tests
|
|
# Faster tests: mostly build tests, along with some other
|
|
# misc tests
|
|
|
|
concurrency:
|
|
group: fast-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [ dev, release, actionsTest ]
|
|
|
|
permissions: read-all
|
|
|
|
jobs:
|
|
linux-kernel:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: linux kernel, library + build + test
|
|
run: make -C contrib/linux-kernel test CFLAGS="-Werror -Wunused-const-variable -Wunused-but-set-variable"
|
|
|
|
benchmarking:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: make benchmarking
|
|
run: make benchmarking
|
|
|
|
check-32bit: # designed to catch https://github.com/facebook/zstd/issues/2428
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: make check on 32-bit
|
|
run: |
|
|
sudo apt update
|
|
APT_PACKAGES="gcc-multilib" make apt-install
|
|
CFLAGS="-m32 -O1 -fstack-protector" make check V=1
|
|
CFLAGS="-m32 -O1 -fstack-protector" make V=1 -C tests test-cli-tests
|
|
|
|
build-c89:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: ensure zstd can be built with c89/c90 compilers (+ long long support + variadic macros)
|
|
run: |
|
|
make c89build V=1
|
|
|
|
build-zstd-dll:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: build zstd bin against a dynamic lib (debuglevel for more dependencies)
|
|
run: |
|
|
make -C lib lib-mt-release
|
|
DEBUGLEVEL=2 make -C programs zstd-dll
|
|
|
|
gcc-7-libzstd:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: gcc-7 + libzstdmt compilation
|
|
# See https://askubuntu.com/a/1428822
|
|
run: |
|
|
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list
|
|
sudo apt-get -qqq update
|
|
make gcc7install
|
|
CC=gcc-7 CFLAGS=-Werror make -j all
|
|
make clean
|
|
LDFLAGS=-Wl,--no-undefined make -C lib libzstd-mt
|
|
|
|
# candidate test (for discussion) : underlink test
|
|
# LDFLAGS=-Wl,--no-undefined : will make the linker fail if dll is underlinked
|
|
|
|
cmake-build-and-test-check:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: cmake build and test
|
|
run: |
|
|
sudo apt install liblzma-dev
|
|
FUZZERTEST=-T1mn ZSTREAM_TESTTIME=-T1mn make cmakebuild V=1
|
|
|
|
cmake-source-directory-with-spaces:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
generator: "Unix Makefiles"
|
|
- os: windows-latest
|
|
generator: "NMake Makefiles"
|
|
- os: macos-latest
|
|
generator: "Unix Makefiles"
|
|
env:
|
|
SRC_DIR: "source directory with spaces"
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
with:
|
|
path: "${{ env.SRC_DIR }}"
|
|
- uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
|
if: ${{ matrix.generator == 'NMake Makefiles' }}
|
|
- name: cmake build on a source directory with spaces
|
|
run: |
|
|
cmake -S "${{ env.SRC_DIR }}/build/cmake" -B build -DBUILD_TESTING=ON -G "${{ matrix.generator }}" -DCMAKE_BUILD_TYPE=Release --install-prefix "${{ runner.temp }}/install"
|
|
cmake --build build --config Release
|
|
cmake --install build --config Release
|
|
|
|
cpp-gnu90-c99-compatibility:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: C++, gnu90 and c99 compatibility
|
|
run: |
|
|
make cxxtest
|
|
make clean
|
|
make gnu90build
|
|
make clean
|
|
make c99build
|
|
make clean
|
|
make travis-install # just ensures `make install` works
|
|
|
|
mingw-cross-compilation:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: mingw cross-compilation
|
|
run: |
|
|
# sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix; (doesn't work)
|
|
sudo apt-get -qqq update
|
|
sudo apt-get install gcc-mingw-w64
|
|
CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ CFLAGS="-Werror -O1" make zstd
|
|
|
|
armbuild:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: ARM Build Test
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make arminstall
|
|
make armbuild
|
|
|
|
bourne-shell:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Bourne shell compatibility (shellcheck)
|
|
run: |
|
|
wget https://github.com/koalaman/shellcheck/releases/download/v0.7.1/shellcheck-v0.7.1.linux.x86_64.tar.xz
|
|
tar -xf shellcheck-v0.7.1.linux.x86_64.tar.xz
|
|
shellcheck-v0.7.1/shellcheck --shell=sh --severity=warning --exclude=SC2010 tests/playTests.sh
|
|
|
|
zlib-wrapper:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: install valgrind
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make valgrindinstall V=1
|
|
- name: zlib wrapper test
|
|
run: make -C zlibWrapper test V=1
|
|
- name: zlib wrapper test under valgrind
|
|
run: make -C zlibWrapper test-valgrind V=1
|
|
|
|
lz4-threadpool-libs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: LZ4, thread pool, and libs build testslib wrapper test
|
|
run: |
|
|
make lz4install
|
|
make -C tests test-lz4
|
|
make check < /dev/null | tee # mess with lz4 console detection
|
|
make clean
|
|
make -C tests test-pool
|
|
make clean
|
|
bash tests/libzstd_builds.sh
|
|
|
|
gcc-make-all-avx2:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Make all, with AVX2
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make libc6install
|
|
CFLAGS="-Werror -mavx2" make -j all
|
|
|
|
gcc-make-all-32bit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Make all, 32bit mode
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make libc6install
|
|
CFLAGS="-Werror -m32" make -j all32
|
|
|
|
gcc-make-all-32bit-avx2:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Make all, 32bit + AVX2 mode
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make libc6install
|
|
CPPFLAGS="-DSTATIC_BMI2=1" CFLAGS="-Werror -m32 -mavx2 -mbmi2" make -j all32
|
|
|
|
|
|
gcc-8-make:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: gcc-8 build
|
|
# See https://askubuntu.com/a/1428822
|
|
run: |
|
|
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list
|
|
sudo apt-get -qqq update
|
|
make gcc8install
|
|
CC=gcc-8 CFLAGS="-Werror" make -j all
|
|
|
|
make-external-compressors:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- name: "no external compressors"
|
|
flags: "HAVE_ZLIB=0 HAVE_LZ4=0 HAVE_LZMA=0"
|
|
- name: "only zlib"
|
|
flags: "HAVE_ZLIB=1 HAVE_LZ4=0 HAVE_LZMA=0"
|
|
- name: "only lz4"
|
|
flags: "HAVE_ZLIB=0 HAVE_LZ4=1 HAVE_LZMA=0"
|
|
- name: "only lzma"
|
|
flags: "HAVE_ZLIB=0 HAVE_LZ4=0 HAVE_LZMA=1"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Build with ${{matrix.name}}
|
|
run: |
|
|
sudo apt install liblzma-dev
|
|
${{matrix.flags}} make zstd
|
|
|
|
|
|
implicit-fall-through:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: -Wimplicit-fallthrough build
|
|
run: |
|
|
make clean
|
|
CC=gcc MOREFLAGS="-Werror -Wimplicit-fallthrough=2 -O0" make -C lib -j libzstd.a ZSTD_LEGACY_SUPPORT=0
|
|
make clean
|
|
CC=clang MOREFLAGS="-Werror -Wimplicit-fallthrough -O0" make -C lib -j libzstd.a ZSTD_LEGACY_SUPPORT=0
|
|
|
|
meson-linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Install packages
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get -y install build-essential python3-pip ninja-build liblz4-dev liblzma-dev
|
|
pip install --pre meson
|
|
- name: Build with Meson
|
|
run: |
|
|
meson setup \
|
|
--buildtype=debugoptimized \
|
|
-Db_lundef=false \
|
|
-Dauto_features=enabled \
|
|
-Dbin_programs=true \
|
|
-Dbin_tests=true \
|
|
-Dbin_contrib=true \
|
|
-Ddefault_library=both \
|
|
build/meson mesonBuild
|
|
ninja -C mesonBuild/
|
|
meson test -C mesonBuild/ --print-errorlogs
|
|
meson install -C mesonBuild --destdir staging/
|
|
|
|
meson-mingw-cross-compilation:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Install packages
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
sudo apt-get -y install build-essential python3-pip ninja-build {gcc,g++}-mingw-w64-x86-64
|
|
pip install --pre meson
|
|
- name: Build with Meson
|
|
run: |
|
|
cat > cross.ini <<EOF
|
|
[binaries]
|
|
ar = 'x86_64-w64-mingw32-ar'
|
|
c = 'x86_64-w64-mingw32-gcc'
|
|
cpp = 'x86_64-w64-mingw32-g++'
|
|
ld = 'x86_64-w64-mingw32-ld'
|
|
objcopy = 'x86_64-w64-mingw32-objcopy'
|
|
objdump = 'x86_64-w64-mingw32-objdump'
|
|
strip = 'x86_64-w64-mingw32-strip'
|
|
windres = 'x86_64-w64-mingw32-windres'
|
|
|
|
[host_machine]
|
|
system = 'windows'
|
|
endian = 'little'
|
|
cpu_family = 'x86_64'
|
|
cpu = 'x86_64'
|
|
EOF
|
|
|
|
# pzstd doesn't build; skip -Dbin_contrib=true
|
|
meson setup \
|
|
--buildtype=debugoptimized \
|
|
--cross-file=cross.ini \
|
|
-Db_lundef=false \
|
|
-Dbin_programs=true \
|
|
-Dbin_tests=true \
|
|
-Ddefault_library=both \
|
|
build/meson builddir
|
|
ninja -C builddir/
|
|
if grep -- -pthread builddir/meson-private/libzstd.pc; then
|
|
echo "Error: found stray pthread dependency"
|
|
exit 1
|
|
fi
|
|
|
|
meson-windows:
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Install packages
|
|
run: pip install --pre meson
|
|
- name: Configure with Meson
|
|
run: |
|
|
meson setup --vsenv build/meson/ builddir -Dbin_tests=true -Dbin_programs=true -Dbin_contrib=true
|
|
- name: Build with Meson
|
|
run: |
|
|
meson compile -C builddir/
|
|
- name: Test with Meson
|
|
run: |
|
|
meson test -C builddir/ --print-errorlogs
|
|
- name: Install with Meson
|
|
run: |
|
|
meson install -C builddir --destdir staging/
|
|
|
|
cmake-visual-2022:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- generator: "Visual Studio 17 2022"
|
|
flags: "-A x64"
|
|
- generator: "Visual Studio 17 2022"
|
|
flags: "-A Win32"
|
|
- generator: "MinGW Makefiles"
|
|
- generator: "Visual Studio 17 2022"
|
|
flags: "-T ClangCL"
|
|
- generator: "Visual Studio 17 2022"
|
|
flags: "-T ClangCL -A x64 -DCMAKE_C_FLAGS=/arch:AVX2"
|
|
runs-on: windows-2022
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # tag=v2.0.0
|
|
- name: Build & Test
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
cd build\cmake
|
|
mkdir build
|
|
cd build
|
|
cmake.exe -G "${{matrix.generator}}" ${{matrix.flags}} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DZSTD_BUILD_TESTS:BOOL=ON -DZSTD_ZSTREAM_FLAGS=-T30s -DZSTD_FUZZER_FLAGS=-T30s -DZSTD_FULLBENCH_FLAGS=-i0 ..
|
|
cmake.exe --build .
|
|
ctest.exe -V -C Debug
|
|
|
|
msbuild-visual-studio:
|
|
strategy:
|
|
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix failed.
|
|
matrix:
|
|
include: [
|
|
{ name: "VS 2022 x64 Debug", platform: x64, configuration: Debug, toolset: v143, runner: "windows-2022", arch: "" },
|
|
{ name: "VS 2022 Win32 Debug", platform: Win32, configuration: Debug, toolset: v143, runner: "windows-2022", arch: "" },
|
|
{ name: "VS 2022 x64 Release", platform: x64, configuration: Release, toolset: v143, runner: "windows-2022", arch: ""},
|
|
{ name: "VS 2022 Win32 Release", platform: Win32, configuration: Release, toolset: v143, runner: "windows-2022", arch: ""},
|
|
{ name: "VS 2019 x64 Release", platform: Win32, configuration: Release, toolset: v142, runner: "windows-2019", arch: ""},
|
|
{ name: "VS 2019 Win32 Release", platform: x64, configuration: Release, toolset: v142, runner: "windows-2019", arch: ""},
|
|
{ name: "VS 2022 x64 Release AVX2", platform: x64, configuration: Release, toolset: v143, runner: "windows-2022", arch: "AdvancedVectorExtensions2" },
|
|
]
|
|
runs-on: ${{matrix.runner}}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # tag=v2.0.0
|
|
- name: Build ${{matrix.name}}
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
|
if: ${{ matrix.arch == '' }}
|
|
run: >
|
|
msbuild "build\VS2010\zstd.sln" /m /verbosity:minimal /property:PlatformToolset=${{matrix.toolset}}
|
|
/t:Clean,Build /p:Platform=${{matrix.platform}} /p:Configuration=${{matrix.configuration}} /warnaserror
|
|
- name: Build ${{matrix.name}}
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
|
if: ${{ matrix.arch != '' }}
|
|
run: >
|
|
msbuild "build\VS2010\zstd.sln" /m /verbosity:minimal /property:PlatformToolset=${{matrix.toolset}}
|
|
/t:Clean,Build /p:Platform=${{matrix.platform}} /p:Configuration=${{matrix.configuration}} /warnaserror
|
|
/p:InstructionSet=${{matrix.arch}}
|
|
|
|
# This tests that we don't accidentally grow the size too much.
|
|
# If the size grows intentionally, you can raise these numbers.
|
|
# But we do need to think about binary size, since it is a concern.
|
|
libzstd-size:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: libzstd size test
|
|
run: |
|
|
make clean && make -j -C lib libzstd && ./tests/check_size.py lib/libzstd.so 1100000
|
|
make clean && make -j -C lib libzstd ZSTD_LIB_COMPRESSION=0 ZSTD_LIB_DICTBUILDER=0 && ./tests/check_size.py lib/libzstd.so 400000
|
|
make clean && make -j -C lib libzstd ZSTD_LIB_MINIFY=1 && ./tests/check_size.py lib/libzstd.so 300000
|
|
make clean && make -j -C lib libzstd ZSTD_LIB_MINIFY=1 ZSTD_LIB_COMPRESSION=0 ZSTD_LIB_DICTBUILDER=0 && ./tests/check_size.py lib/libzstd.so 80000
|
|
|
|
minimal-decompressor-macros:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: minimal decompressor macros
|
|
run: |
|
|
make clean && make -j all ZSTD_LIB_MINIFY=1 MOREFLAGS="-Werror"
|
|
make clean && make check ZSTD_LIB_MINIFY=1 MOREFLAGS="-Werror"
|
|
make clean && make -j all MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X1 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT"
|
|
make clean && make check MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X1 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT"
|
|
make clean && make -j all MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X2 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG"
|
|
make clean && make check MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X2 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG"
|
|
make clean && make -j all MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS"
|
|
make clean && make check MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS"
|
|
make clean && make check ZSTD_LIB_EXCLUDE_COMPRESSORS_DFAST_AND_UP=1 MOREFLAGS="-Werror"
|
|
make clean && make check ZSTD_LIB_EXCLUDE_COMPRESSORS_GREEDY_AND_UP=1 MOREFLAGS="-Werror"
|
|
|
|
dynamic-bmi2:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: dynamic bmi2 tests
|
|
run: |
|
|
make clean && make -j check MOREFLAGS="-O0 -Werror -mbmi2"
|
|
make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=1"
|
|
make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=1 -mbmi2"
|
|
make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=0"
|
|
make clean && make -j check MOREFLAGS="-O0 -Werror -DDYNAMIC_BMI2=0 -mbmi2"
|
|
|
|
test-variants:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: make all variants & validate
|
|
run: |
|
|
make -j -C programs allVariants MOREFLAGS=-O0
|
|
./tests/test-variants.sh
|
|
|
|
qemu-consistency:
|
|
name: QEMU ${{ matrix.name }}
|
|
runs-on: ubuntu-24.04
|
|
strategy:
|
|
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix failed.
|
|
matrix:
|
|
include: [
|
|
{ name: ARM, xcc_pkg: gcc-arm-linux-gnueabi, xcc: arm-linux-gnueabi-gcc, xemu_pkg: qemu-system-arm, xemu: qemu-arm-static },
|
|
{ name: ARM64, xcc_pkg: gcc-aarch64-linux-gnu, xcc: aarch64-linux-gnu-gcc, xemu_pkg: qemu-system-aarch64,xemu: qemu-aarch64-static },
|
|
{ name: PPC, xcc_pkg: gcc-powerpc-linux-gnu, xcc: powerpc-linux-gnu-gcc, xemu_pkg: qemu-system-ppc, xemu: qemu-ppc-static },
|
|
{ name: PPC64LE, xcc_pkg: gcc-powerpc64le-linux-gnu, xcc: powerpc64le-linux-gnu-gcc, xemu_pkg: qemu-system-ppc, xemu: qemu-ppc64le-static },
|
|
{ name: S390X, xcc_pkg: gcc-s390x-linux-gnu, xcc: s390x-linux-gnu-gcc, xemu_pkg: qemu-system-s390x, xemu: qemu-s390x-static },
|
|
{ name: MIPS, xcc_pkg: gcc-mips-linux-gnu, xcc: mips-linux-gnu-gcc, xemu_pkg: qemu-system-mips, xemu: qemu-mips-static },
|
|
{ name: RISC-V, xcc_pkg: gcc-riscv64-linux-gnu, xcc: riscv64-linux-gnu-gcc, xemu_pkg: qemu-system-riscv64,xemu: qemu-riscv64-static },
|
|
{ name: M68K, xcc_pkg: gcc-m68k-linux-gnu, xcc: m68k-linux-gnu-gcc, xemu_pkg: qemu-system-m68k, xemu: qemu-m68k-static },
|
|
{ name: SPARC, xcc_pkg: gcc-sparc64-linux-gnu, xcc: sparc64-linux-gnu-gcc, xemu_pkg: qemu-system-sparc, xemu: qemu-sparc64-static },
|
|
]
|
|
env: # Set environment variables
|
|
XCC: ${{ matrix.xcc }}
|
|
XEMU: ${{ matrix.xemu }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: apt update & install
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install gcc-multilib g++-multilib qemu-utils qemu-user-static
|
|
sudo apt-get install ${{ matrix.xcc_pkg }} ${{ matrix.xemu_pkg }}
|
|
- name: Environment info
|
|
run: |
|
|
echo && which $XCC
|
|
echo && $XCC --version
|
|
echo && $XCC -v # Show built-in specs
|
|
echo && which $XEMU
|
|
echo && $XEMU --version
|
|
- name: ARM
|
|
if: ${{ matrix.name == 'ARM' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: ARM64
|
|
if: ${{ matrix.name == 'ARM64' }}
|
|
run: |
|
|
make clean
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make -j check
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make -j -C tests test-cli-tests
|
|
# This test is only compatible with standard libraries that support BTI (Branch Target Identification).
|
|
# Unfortunately, the standard library provided on Ubuntu 24.04 does not have this feature enabled.
|
|
# make clean
|
|
# LDFLAGS="-static -z force-bti" MOREFLAGS="-mbranch-protection=standard" CC=$XCC QEMU_SYS=$XEMU make check V=1
|
|
- name: PPC
|
|
if: ${{ matrix.name == 'PPC' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: PPC64LE
|
|
if: ${{ matrix.name == 'PPC64LE' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: S390X
|
|
if: ${{ matrix.name == 'S390X' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: MIPS
|
|
if: ${{ matrix.name == 'MIPS' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: RISC-V
|
|
if: ${{ matrix.name == 'RISC-V' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: M68K
|
|
if: ${{ matrix.name == 'M68K' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- name: SPARC
|
|
if: ${{ matrix.name == 'SPARC' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
|
|
mingw-short-test:
|
|
runs-on: windows-latest
|
|
strategy:
|
|
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix failed.
|
|
matrix:
|
|
include: [
|
|
{ compiler: gcc, msystem: MINGW32, cflags: "-Werror"},
|
|
{ compiler: gcc, msystem: MINGW64, cflags: "-Werror"},
|
|
{ compiler: clang, msystem: MINGW64, cflags: "--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion -Wno-unused-command-line-argument"},
|
|
]
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- uses: msys2/setup-msys2@61f9e5e925871ba6c9e3e8da24ede83ea27fa91f # tag=v2.27.0
|
|
with:
|
|
msystem: ${{ matrix.msystem }}
|
|
install: make diffutils
|
|
update: true
|
|
# Based on https://ariya.io/2020/07/on-github-actions-with-msys2
|
|
- name: install mingw gcc i686
|
|
if: ${{ (matrix.msystem == 'MINGW32') && (matrix.compiler == 'gcc') }}
|
|
run: pacman --noconfirm -S mingw-w64-i686-gcc
|
|
- name: install mingw gcc x86_64
|
|
if: ${{ (matrix.msystem == 'MINGW64') && (matrix.compiler == 'gcc') }}
|
|
run: pacman --noconfirm -S mingw-w64-x86_64-gcc
|
|
- name: install mingw clang i686
|
|
if: ${{ (matrix.msystem == 'MINGW32') && (matrix.compiler == 'clang') }}
|
|
run: pacman --noconfirm -S mingw-w64-i686-clang
|
|
- name: install mingw clang x86_64
|
|
if: ${{ (matrix.msystem == 'MINGW64') && (matrix.compiler == 'clang') }}
|
|
run: pacman --noconfirm -S mingw-w64-x86_64-clang
|
|
- name: run mingw tests
|
|
run: |
|
|
make -v
|
|
export CC=${{ matrix.compiler }}
|
|
$CC --version
|
|
CFLAGS="${{ matrix.cflags }}" make -j allzstd
|
|
echo "Testing $CC ${{ matrix.msystem }}"
|
|
make clean
|
|
MSYS="" make check
|
|
|
|
visual-runtime-tests:
|
|
runs-on: windows-latest
|
|
strategy:
|
|
matrix:
|
|
platform: [x64, Win32]
|
|
configuration: [Release]
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # tag=v2.0.0
|
|
- name: Build and run tests
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
env:
|
|
ZSTD_BIN: ./zstd.exe
|
|
DATAGEN_BIN: ./datagen.exe
|
|
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
|
run: |
|
|
msbuild "build\VS2010\zstd.sln" /m /verbosity:minimal /property:PlatformToolset=v142 /t:Clean,Build /p:Platform=${{matrix.platform}} /p:Configuration=${{matrix.configuration}}
|
|
COPY build\VS2010\bin\${{matrix.platform}}_${{matrix.configuration}}\*.exe tests\
|
|
CD tests
|
|
sh -e playTests.sh
|
|
.\fuzzer.exe -T2m
|
|
|
|
# Following instructions at: https://github.com/marketplace/actions/install-cygwin-action
|
|
cygwin-tests:
|
|
runs-on: windows-latest
|
|
steps:
|
|
- run: git config --global core.autocrlf input
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- uses: cygwin/cygwin-install-action@f61179d72284ceddc397ed07ddb444d82bf9e559 # tag=v5
|
|
with:
|
|
platform: x86_64
|
|
packages: >-
|
|
autoconf,
|
|
automake,
|
|
gcc-g++,
|
|
make,
|
|
mingw64-x86_64-gcc-g++,
|
|
patch,
|
|
perl
|
|
- name: cygwin tests
|
|
shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}'
|
|
run: >-
|
|
export PATH=/usr/bin:$(cygpath ${SYSTEMROOT})/system32 &&
|
|
export CFLAGS="-Werror -O1" &&
|
|
ls &&
|
|
make -j allzstd &&
|
|
make -C tests fuzzer &&
|
|
./tests/fuzzer.exe -v -T1m
|
|
- name: cygwin install test
|
|
shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}'
|
|
run: >-
|
|
make -j &&
|
|
make install
|
|
|
|
pkg-config:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: debian:testing
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Install dependencies
|
|
run: |
|
|
apt -y update
|
|
apt -y install --no-install-recommends gcc libc6-dev make pkg-config
|
|
- name: Build and install
|
|
run: make -C lib install
|
|
- name: Test pkg-config
|
|
run: |
|
|
cc -Wall -Wextra -Wpedantic -Werror -o simple examples/simple_compression.c $(pkg-config --cflags --libs libzstd)
|
|
./simple LICENSE
|
|
|
|
versions-compatibility:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Versions Compatibility Test
|
|
run: |
|
|
make -C tests versionsTest
|
|
|
|
clangbuild:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: make clangbuild
|
|
run: |
|
|
make clangbuild
|
|
|
|
gcc-pgo:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Build PGO Zstd with GCC
|
|
env:
|
|
CC: gcc
|
|
run: |
|
|
make -C programs zstd-pgo
|
|
./programs/zstd -b
|
|
|
|
clang-pgo:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Build PGO Zstd with Clang
|
|
env:
|
|
CC: clang
|
|
run: |
|
|
sudo apt install -y llvm
|
|
llvm-profdata --version
|
|
make -C programs zstd-pgo
|
|
./programs/zstd -b
|
|
|
|
musl-build:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Install musl-tools
|
|
run: |
|
|
sudo apt install -y musl-tools
|
|
- name: Compile with musl-gcc and test-zstd
|
|
run: |
|
|
CC=musl-gcc CFLAGS="-Werror -O3" CPPFLAGS=-DZDICT_QSORT=ZDICT_QSORT_C90 make -j -C tests test-zstd V=1
|
|
|
|
intel-cet-compatibility:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: Build Zstd
|
|
run: |
|
|
make -j zstd V=1
|
|
readelf -n zstd
|
|
- name: Get Intel SDE
|
|
run: |
|
|
curl -LO https://downloadmirror.intel.com/813591/sde-external-9.33.0-2024-01-07-lin.tar.xz
|
|
tar xJvf sde-external-9.33.0-2024-01-07-lin.tar.xz
|
|
- name: Configure Permissions
|
|
run: |
|
|
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
|
|
- name: Run Under SDE
|
|
run: |
|
|
sde-external-9.33.0-2024-01-07-lin/sde -cet -cet-raise 0 -cet-endbr-exe -cet-stderr -cet-abort -- ./zstd -b3
|
|
|
|
icx:
|
|
# install instructions: https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2025-0/apt-005.html
|
|
name: icx-check
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: install icx
|
|
run: |
|
|
# download the key to system keyring
|
|
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
|
|
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
|
|
|
|
# add signed entry to apt sources and configure the APT client to use Intel repository:
|
|
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
|
sudo apt-get update
|
|
sudo apt-get install -y intel-basekit intel-hpckit
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4.2.2
|
|
- name: make check
|
|
run: |
|
|
source /opt/intel/oneapi/setvars.sh
|
|
make CC=icx check
|
|
make CC=icx -C tests test-cli-tests
|