When creating a new `Makefile` target to build, it's also necessary to update the `clean` target, which purpose is to remove built targets when they are present. This process is simple, but it's also easy to forget : since there is a large distance between the position in the `Makefile` where the new built target is added, and the place where the list of files to `clean` is defined. Moreover, the list of files becomes pretty long over time, hence it's difficult to visually ensure that all built targets are present there, or that no old target (no longer produced) is no longer in the list This PR tries to improve this process by adding a CLEAN variable. Now, when a new built target is added to the `Makefile`, it should preceded by : ``` CLEAN += newTarget newTarget: <TAB> ...recipe... ``` This new requirement is somewhat similar to `.PHONY: newTarget` for non-built targets. This new method offers the advantage of locality : there is no separate place in the file to maintain a list of files to clean. This makes maintenance of `make clean` easier.
450 lines
16 KiB
YAML
450 lines
16 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 ]
|
|
|
|
jobs:
|
|
linux-kernel:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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@v2
|
|
- 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@v2
|
|
- 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
|
|
|
|
check-x32:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: make check on x32 ABI # https://en.wikipedia.org/wiki/X32_ABI
|
|
env:
|
|
CHECK_CONSTRAINED_MEM: true
|
|
run: |
|
|
sudo apt update
|
|
APT_PACKAGES="gcc-multilib" make apt-install
|
|
CFLAGS="-mx32 -O1 -fstack-protector" make check V=1
|
|
|
|
gcc-7-libzstd:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: gcc-7 + libzstdmt compilation
|
|
run: |
|
|
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 (to check) : 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@v2
|
|
- name: cmake build and test check
|
|
run: |
|
|
FUZZERTEST=-T1mn ZSTREAM_TESTTIME=-T1mn make cmakebuild
|
|
cp -r ./ "../zstd source"
|
|
cd "../zstd source"
|
|
FUZZERTEST=-T1mn ZSTREAM_TESTTIME=-T1mn make cmakebuild
|
|
|
|
cpp-gnu90-c99-compatibility:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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@v2
|
|
- 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@v2
|
|
- name: ARM Build Test
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make arminstall
|
|
make armbuild
|
|
|
|
bourne-shell:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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@v2
|
|
- name: zlib wrapper test
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make valgrindinstall
|
|
make -C zlibWrapper test
|
|
make -C zlibWrapper test-valgrind
|
|
|
|
lz4-threadpool-libs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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-tests-32bit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Make all, 32bit mode
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make libc6install
|
|
CFLAGS="-Werror -m32" make -j all32
|
|
|
|
gcc-8-make:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: gcc-8 build
|
|
run: |
|
|
sudo apt-get -qqq update
|
|
make gcc8install
|
|
CC=gcc-8 CFLAGS="-Werror" make -j all
|
|
|
|
implicit-fall-through:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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
|
|
|
|
cmake-visual-2019:
|
|
runs-on: windows-2019
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- generator: "Visual Studio 16 2019"
|
|
flags: "-A x64"
|
|
- generator: "Visual Studio 16 2019"
|
|
flags: "-A Win32"
|
|
- generator: "MinGW Makefiles"
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@v1.0.2
|
|
- name: Build
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
cd build\cmake
|
|
mkdir build
|
|
cd build
|
|
cmake.exe -G "${{matrix.generator}}" ${{matrix.flags}} ..
|
|
cmake.exe --build .
|
|
|
|
visual-2019:
|
|
runs-on: windows-2019
|
|
strategy:
|
|
matrix:
|
|
platform: [x64, Win32]
|
|
configuration: [Debug, Release]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@v1.0.2
|
|
- name: Build
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
# 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}}
|
|
|
|
# TODO: fix as part of https://github.com/facebook/zstd/issues/3064
|
|
# visual-2015:
|
|
# # only GH actions windows-2016 contains VS 2015
|
|
# runs-on: windows-2016
|
|
# strategy:
|
|
# matrix:
|
|
# platform: [x64, Win32]
|
|
# configuration: [Debug, Release]
|
|
# steps:
|
|
# - uses: actions/checkout@v2
|
|
# - name: Add MSBuild to PATH
|
|
# uses: microsoft/setup-msbuild@v1.0.2
|
|
# - name: Build
|
|
# working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
# run: >
|
|
# msbuild "build\VS2010\zstd.sln" /m /verbosity:minimal /property:PlatformToolset=v140
|
|
# /t:Clean,Build /p:Platform=${{matrix.platform}} /p:Configuration=${{matrix.configuration}}
|
|
|
|
minimal-decompressor-macros:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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"
|
|
|
|
dynamic-bmi2:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- 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@v2
|
|
- 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-latest
|
|
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-arm, 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: M68K, xcc_pkg: gcc-m68k-linux-gnu, xcc: m68k-linux-gnu-gcc, xemu_pkg: qemu-system-m68k, xemu: qemu-m68k-static },
|
|
]
|
|
env: # Set environment variables
|
|
XCC: ${{ matrix.xcc }}
|
|
XEMU: ${{ matrix.xemu }}
|
|
steps:
|
|
- uses: actions/checkout@v2 # https://github.com/actions/checkout
|
|
- 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: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
- 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: M68K
|
|
if: ${{ matrix.name == 'M68K' }}
|
|
run: |
|
|
LDFLAGS="-static" CC=$XCC QEMU_SYS=$XEMU make clean check
|
|
|
|
mingw-short-test:
|
|
runs-on: windows-2019
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: [
|
|
{ compiler: gcc, platform: x64, script: "CFLAGS=-Werror make -j allzstd DEBUGLEVEL=2"},
|
|
{ compiler: gcc, platform: x86, script: "CFLAGS=-Werror make -j allzstd"},
|
|
{ compiler: clang, platform: x64, script: "CFLAGS='--target=x86_64-w64-mingw32 -Werror -Wconversion -Wno-sign-conversion' make -j allzstd V=1"},
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Mingw short test
|
|
run: |
|
|
ECHO "Building ${{matrix.compiler}} ${{matrix.platform}}"
|
|
$env:PATH_ORIGINAL = $env:PATH
|
|
$env:PATH_MINGW32 = "C:\msys64\mingw32\bin"
|
|
$env:PATH_MINGW64 = "C:\msys64\mingw64\bin"
|
|
COPY C:\msys64\usr\bin\make.exe C:\msys64\mingw32\bin\make.exe
|
|
COPY C:\msys64\usr\bin\make.exe C:\msys64\mingw64\bin\make.exe
|
|
IF ("${{matrix.platform}}" -eq "x64")
|
|
{
|
|
$env:PATH = $env:PATH_MINGW64 + ";" + $env:PATH_ORIGINAL
|
|
}
|
|
ELSEIF ("${{matrix.platform}}" -eq "x86")
|
|
{
|
|
$env:PATH = $env:PATH_MINGW32 + ";" + $env:PATH_ORIGINAL
|
|
}
|
|
make -v
|
|
sh -c "${{matrix.compiler}} -v"
|
|
$env:CC = "${{matrix.compiler}}"
|
|
sh -c "${{matrix.script}}"
|
|
ECHO "Testing ${{matrix.compiler}} ${{matrix.platform}}"
|
|
make clean
|
|
make check
|
|
|
|
|
|
visual-runtime-tests:
|
|
runs-on: windows-2019
|
|
strategy:
|
|
matrix:
|
|
platform: [x64, Win32]
|
|
configuration: [Release]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@v1.0.2
|
|
- 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
|
|
DIR
|
|
.\fuzzer.exe -T2m
|
|
|
|
intel-cet-compatibility:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Build Zstd
|
|
run: |
|
|
make -j zstd V=1
|
|
readelf -n zstd
|
|
- name: Get Intel SDE
|
|
run: |
|
|
curl -LO https://downloadmirror.intel.com/684899/sde-external-9.0.0-2021-11-07-lin.tar.xz
|
|
tar xJvf sde-external-9.0.0-2021-11-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.0.0-2021-11-07-lin/sde -cet -cet-raise 0 -cet-endbr-exe -cet-stderr -cet-abort -- ./zstd -b3
|
|
|
|
|
|
|
|
# This test currently fails on Github Actions specifically.
|
|
# Possible reason : TTY emulation.
|
|
# Note that the same test works fine locally and on travisCI.
|
|
# This will have to be fixed before transferring the test to GA.
|
|
# versions-compatibility:
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - uses: actions/checkout@v2
|
|
# - name: Versions Compatibility Test
|
|
# run: |
|
|
# make -C tests versionsTest
|
|
|
|
|
|
# For reference : icc tests
|
|
# icc tests are currently failing on Github Actions, likely to issues during installation stage
|
|
# To be fixed later
|
|
#
|
|
# icc:
|
|
# name: icc-check
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - name: install icc
|
|
# run: |
|
|
# export DEBIAN_FRONTEND=noninteractive
|
|
# sudo apt-get -qqq update
|
|
# sudo apt-get install -y wget build-essential pkg-config cmake ca-certificates gnupg
|
|
# sudo wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
|
# sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB
|
|
# sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main"
|
|
# sudo apt-get update
|
|
# sudo apt-get install -y intel-basekit intel-hpckit
|
|
# - uses: actions/checkout@v2
|
|
# - name: make check
|
|
# run: |
|
|
# make CC=/opt/intel/oneapi/compiler/latest/linux/bin/intel64/icc check
|