| name: Run Test |
| on: |
| push: |
| paths-ignore: |
| - ".gitignore" |
| - "docs/**" |
| - "ChangeLog" |
| - "CREDITS.TXT" |
| - "COMPILE.TXT" |
| - "COMPILE_MSVC.TXT" |
| - "COMPILE_CMAKE.TXT" |
| - "HACK.TXT" |
| - "LICENSE.TXT" |
| - "LICENSE_LLVM.TXT" |
| - "README.md" |
| - "RELEASE_NOTES" |
| - "SPONSORS.TXT" |
| - "TODO" |
| pull_request: |
| |
| env: |
| CI: true |
| |
| jobs: |
| Linux: |
| runs-on: ${{ matrix.config.os }} |
| name: ${{ matrix.config.name }} |
| strategy: |
| fail-fast: false |
| matrix: |
| config: |
| - { |
| name: 'ubuntu-20.04 x64 python3.6 cmake', |
| os: ubuntu-20.04, |
| arch: x64, |
| python-arch: x64, |
| python-version: '3.6', |
| build-system: 'cmake', |
| } |
| - { |
| name: 'ubuntu-22.04 x64 python3.9 make', |
| os: ubuntu-22.04, |
| arch: x64, |
| python-arch: x64, |
| python-version: '3.9', |
| build-system: 'make', |
| } |
| - { |
| name: 'ubuntu-22.04 x64 python3.9 cmake', |
| os: ubuntu-22.04, |
| arch: x64, |
| python-arch: x64, |
| python-version: '3.9', |
| build-system: 'cmake', |
| } |
| - { |
| name: 'ubuntu-22.04 x64 python3.11 cmake', |
| os: ubuntu-22.04, |
| arch: x64, |
| python-arch: x64, |
| python-version: '3.11', |
| build-system: 'cmake', |
| } |
| |
| steps: |
| - uses: actions/checkout@v3 |
| |
| - name: Set up Python |
| uses: actions/setup-python@v4 |
| with: |
| python-version: ${{ matrix.config.python-version }} |
| |
| - name: prepare |
| 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 |
| git clone https://git.cryptomilk.org/projects/cmocka.git suite/cstest/cmocka |
| chmod +x suite/cstest/build_cstest.sh |
| |
| - name: make |
| if: startsWith(matrix.config.build-system, 'make') |
| run: | |
| ./make.sh |
| make check |
| sudo make install |
| cp libcapstone.so.5 libcapstone.so.5.0 |
| |
| - name: cmake |
| if: startsWith(matrix.config.build-system, 'cmake') |
| run: | |
| mkdir build && cd build |
| # build static library |
| cmake -DCAPSTONE_INSTALL=1 -DCMAKE_INSTALL_PREFIX=/usr .. |
| cmake --build . --config Release |
| # build shared library |
| cmake -DCAPSTONE_INSTALL=1 -DBUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_PREFIX=/usr .. |
| sudo cmake --build . --config Release --target install |
| cp libcapstone.* ../ |
| cp libcapstone.* ../tests/ |
| cp test_* ../tests/ |
| |
| - name: cstool - reaches disassembler engine |
| run: | |
| sh suite/run_invalid_cstool.sh |
| |
| - name: cstest |
| run: | |
| cd suite/cstest && ./build_cstest.sh |
| python cstest_report.py -D -t build/cstest -d ../MC |
| python cstest_report.py -D -t build/cstest -f issues.cs; cd .. |
| |
| - name: verify python binding |
| run: | |
| mkdir -p bindings/python/capstone/lib && cp libcapstone.so.5.* bindings/python/capstone/lib/libcapstone.so |
| cd bindings/python |
| |
| # check if the generated *_const.py files are up-to-date |
| mkdir capstone_old && cp capstone/*_const.py capstone_old/ |
| make gen_const |
| for f in ./capstone/*_const.py; do |
| diff -u -w "$f" "./capstone_old/`basename $f`" |
| if [ ! $? -eq 0 ]; then |
| exit 1 |
| fi |
| done |
| rm -rf capstone_old |
| |
| # smoke test api usage |
| make check |
| |
| - name: run python binding test |
| run: | |
| cp libcapstone.* bindings/python/prebuilt |
| cd bindings/python |
| make install3 |
| cd .. |
| BUILD_TESTS=no make tests |
| |
| - name: run cython binding test |
| run: | |
| pip install cython |
| cd bindings/python |
| make install3_cython |
| cd .. |
| python -c "import capstone;print(capstone.debug())" | grep Cython |
| BUILD_TESTS=no make tests |
| |
| 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' |
| |
| steps: |
| - uses: actions/checkout@v3 |
| |
| - 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 |
| cmake --build --preset build-${{ matrix.config.platform }}-release |
| cmake --build --preset install-${{ matrix.config.platform }}-release |