802798ce3c
git-subtree-dir: external/capstone git-subtree-split: e46f64fadb351e9ecd05264fab26f2772feb0994
252 lines
8.8 KiB
YAML
252 lines
8.8 KiB
YAML
name: Run Test
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- ".gitignore"
|
|
- "docs/**"
|
|
- "ChangeLog"
|
|
- "CREDITS.TXT"
|
|
- "COMPILE_MAKE.TXT"
|
|
- "BUILDING.md"
|
|
- "CONTRIBUTING.md"
|
|
- "LICENSE.TXT"
|
|
- "LICENSE_LLVM.TXT"
|
|
- "README.md"
|
|
- "RELEASE_NOTES"
|
|
- "SPONSORS.TXT"
|
|
- "TODO"
|
|
pull_request:
|
|
|
|
# Stop previous runs on the same branch on new push
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CI: true
|
|
UBSAN_OPTIONS: "halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1"
|
|
ASAN_OPTIONS: "halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1"
|
|
LSAN_OPTIONS: "halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1"
|
|
|
|
jobs:
|
|
Linux:
|
|
runs-on: ${{ matrix.config.os }}
|
|
name: ${{ matrix.config.name }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
config:
|
|
- {
|
|
name: 'ubuntu-22.04 x64 make',
|
|
os: ubuntu-22.04,
|
|
arch: x64,
|
|
build-system: 'make',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'OFF'
|
|
}
|
|
- {
|
|
name: 'ubuntu-22.04 x64 cmake',
|
|
os: ubuntu-22.04,
|
|
arch: x64,
|
|
build-system: 'cmake',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'OFF',
|
|
build_type: 'Debug'
|
|
}
|
|
- {
|
|
name: 'ubuntu-22.04 x64 debug - assert warn',
|
|
os: ubuntu-22.04,
|
|
arch: x64,
|
|
build-system: 'cmake',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'OFF',
|
|
build_type: 'Debug',
|
|
build_options: '-DCAPSTONE_ASSERTION_WARNINGS=ON'
|
|
}
|
|
- {
|
|
name: 'ubuntu-22.04 x64 release - no assert warnings',
|
|
os: ubuntu-22.04,
|
|
arch: x64,
|
|
build-system: 'cmake',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'OFF',
|
|
build_type: 'Release',
|
|
build_options: '-DCAPSTONE_ASSERTION_WARNINGS=OFF'
|
|
}
|
|
- {
|
|
name: 'ubuntu-22.04 x64 release - assert warn',
|
|
os: ubuntu-22.04,
|
|
arch: x64,
|
|
build-system: 'cmake',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'OFF',
|
|
build_type: 'Release',
|
|
build_options: '-DCAPSTONE_ASSERTION_WARNINGS=ON'
|
|
}
|
|
- {
|
|
name: 'ubuntu-24.04 x64 ASAN',
|
|
os: ubuntu-24.04,
|
|
arch: x64,
|
|
build-system: 'cmake',
|
|
diet-build: 'OFF',
|
|
enable-asan: 'ON',
|
|
build_type: 'Debug'
|
|
}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.config.python-version }}
|
|
|
|
- name: Prepare fuzzing
|
|
run: |
|
|
export LD_LIBRARY_PATH=`pwd`/tests/:$LD_LIBRARY_PATH
|
|
wget https://github.com/groundx/capstonefuzz/raw/master/corpus/corpus-libFuzzer-capstone_fuzz_disasmnext-latest.zip
|
|
unzip -q corpus-libFuzzer-capstone_fuzz_disasmnext-latest.zip -d suite/fuzz
|
|
|
|
- name: make
|
|
if: startsWith(matrix.config.build-system, 'make')
|
|
run: |
|
|
./make.sh
|
|
sudo make install
|
|
|
|
- name: cmake
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
env:
|
|
asan: ${{ matrix.config.enable-asan }}
|
|
build_option: ${{ matrix.config.build_option }}
|
|
build_type: ${{ matrix.config.build_type }}
|
|
run: |
|
|
mkdir build && cd build
|
|
# build static library
|
|
cmake -DCMAKE_BUILD_TYPE=${build_type} -DCAPSTONE_INSTALL=1 -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_ASAN=${asan} -DCAPSTONE_BUILD_DIET=${diet_build} ${build_option} ..
|
|
cmake --build . --config ${build_type}
|
|
# build shared library
|
|
cmake -DCMAKE_BUILD_TYPE=${build_type} -DCAPSTONE_INSTALL=1 -DCAPSTONE_BUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_PREFIX=/usr -DCAPSTONE_BUILD_CSTEST=ON -DENABLE_ASAN=${asan} ${build_option} ..
|
|
sudo cmake --build . --config ${build_type} --target install
|
|
|
|
- name: Lower number of KASL randomized address bits
|
|
run: |
|
|
# Work-around ASAN bug https://github.com/google/sanitizers/issues/1716
|
|
sudo sysctl vm.mmap_rnd_bits=28
|
|
|
|
- name: unit tests
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R unit_*
|
|
|
|
- name: "Integration tests"
|
|
if: startsWith(matrix.config.build-system, 'cmake') && matrix.config.diet-build == 'OFF'
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R integration_*
|
|
|
|
- name: cstool - reaches disassembler engine
|
|
run: |
|
|
sh suite/run_invalid_cstool.sh
|
|
|
|
- name: cstest negatives
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R NegativeTests1
|
|
ctest --test-dir build --output-on-failure -R NegativeTests2
|
|
ctest --test-dir build --output-on-failure -R NegativeTests3
|
|
ctest --test-dir build --output-on-failure -R NegativeTests4
|
|
ctest --test-dir build --output-on-failure -R NegativeTests5
|
|
ctest --test-dir build --output-on-failure -R NegativeTests6
|
|
|
|
- name: cstest MC
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R MCTests
|
|
|
|
- name: cstest details
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R DetailTests
|
|
|
|
- name: cstest issues
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R IssueTests
|
|
|
|
- name: cstest features
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R FeaturesTests
|
|
|
|
- name: Legacy integration tests
|
|
if: startsWith(matrix.config.build-system, 'cmake')
|
|
run: |
|
|
ctest --test-dir build --output-on-failure -R legacy*
|
|
|
|
- name: Valgrind cstest
|
|
if: startsWith(matrix.config.build-system, 'cmake') && startsWith(matrix.config.enable-asan, 'OFF')
|
|
run: |
|
|
sudo apt-get -y update
|
|
sudo apt-get -y install valgrind
|
|
valgrind --leak-check=full cstest tests/details
|
|
valgrind --leak-check=full cstest tests/features
|
|
valgrind --leak-check=full cstest tests/issues
|
|
valgrind --leak-check=full cstest tests/MC
|
|
|
|
- name: Compatibility header generation
|
|
# clang-format-20 is only available in Ubuntu 24.04
|
|
# Hence the check only happens for it.
|
|
if: startsWith(matrix.config.build-system, 'cmake') && startsWith(matrix.config.os, 'ubuntu-24.04')
|
|
run: |
|
|
sudo apt-get -y update
|
|
sudo apt-get -y install clang-format-20
|
|
clang-format-20 --version
|
|
cp ./include/capstone/arm64.h arm64_compat_current.h
|
|
cp ./include/capstone/systemz_compatibility.h systemz_compat_current.h
|
|
./suite/auto-sync/src/autosync/HeaderPatcher.py -C ./.clang-format -c --v6 ./include/capstone/aarch64.h --v5 ./include/capstone/arm64.h
|
|
./suite/auto-sync/src/autosync/HeaderPatcher.py -C ./.clang-format -c --v6 ./include/capstone/systemz.h --v5 ./include/capstone/systemz_compatibility.h
|
|
diff ./include/capstone/arm64.h arm64_compat_current.h &&
|
|
diff ./include/capstone/systemz_compatibility.h systemz_compat_current.h
|
|
|
|
Windows:
|
|
runs-on: ${{ matrix.config.os }}
|
|
name: ${{ matrix.config.name }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
config:
|
|
- name: 'windows x64 MSVC 64bit'
|
|
os: windows-latest
|
|
arch: x64
|
|
platform: windows
|
|
python-arch: x64
|
|
python-version: '3.9'
|
|
diet_build: false
|
|
- name: 'windows x64 MSVC 64bit DIET'
|
|
os: windows-latest
|
|
arch: x64
|
|
platform: windows
|
|
python-arch: x64
|
|
python-version: '3.9'
|
|
diet_build: true
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: lukka/get-cmake@latest
|
|
name: Get CMake
|
|
|
|
- name: '🛠️ Win MSVC 64 setup'
|
|
if: contains(matrix.config.name, 'MSVC 64')
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
with:
|
|
arch: 'x64'
|
|
|
|
- name: '🚧 Win MSVC 64 build'
|
|
if: contains(matrix.config.name, 'MSVC 64')
|
|
shell: bash
|
|
run: |
|
|
cmake --version
|
|
cmake --preset=${{ matrix.config.platform }}-x64${{ matrix.config.diet_build == true && '-diet' || '' }}
|
|
cmake --build --preset build-${{ matrix.config.platform }}${{ matrix.config.diet_build == true && '-diet' || '' }}-release
|
|
cmake --build --preset install-${{ matrix.config.platform }}${{ matrix.config.diet_build == true && '-diet' || '' }}-release
|