Update CI workflows #579
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
name: Build Python Package | |
on: [push, pull_request, workflow_dispatch] | |
env: | |
package-version: '1.0.0rc4' | |
jobs: | |
build-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Create Docker image | |
run: bash ./src/scripts/docker/build-docker-image.sh | |
- name: Install LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v2 | |
with: | |
version: "14.0" | |
directory: ${{ runner.temp }}/llvm | |
- name: Build Wheel packages | |
run: | | |
docker run \ | |
--rm \ | |
--volume $GITHUB_WORKSPACE:/src \ | |
--volume ${{env.LLVM_PATH}}:/llvm \ | |
build-triton-linux-x86_64 bash /src/src/scripts/docker/build-wheel-linux.sh | |
- name: Upload Wheel packages (Python 3.8) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp38-cp38-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp38-cp38-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
- name: Upload Wheel packages (Python 3.9) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp39-cp39-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp39-cp39-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
- name: Upload Wheel packages (Python 3.10) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp310-cp310-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp310-cp310-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
- name: Upload Wheel packages (Python 3.11) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp311-cp311-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp311-cp311-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
- name: Upload Wheel packages (Python 3.12) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp312-cp312-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp312-cp312-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
- name: Upload Wheel packages (Python 3.13) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-cp313-cp313-manylinux_2_31_x86_64.whl | |
path: wheelhouse/manylinux_2_31_x86_64/triton_library-${{ env.package-version }}-cp313-cp313-manylinux_2_31_x86_64.whl | |
if-no-files-found: warn | |
build-windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] | |
include: | |
- python-version: 3.8 | |
pycp: cp38-cp38 | |
pylib: python38.lib | |
- python-version: 3.9 | |
pycp: cp39-cp39 | |
pylib: python39.lib | |
- python-version: 3.10 | |
pycp: cp310-cp310 | |
pylib: python310.lib | |
- python-version: 3.11 | |
pycp: cp311-cp311 | |
pylib: python311.lib | |
- python-version: 3.12 | |
pycp: cp312-cp312 | |
pylib: python312.lib | |
- python-version: 3.13 | |
pycp: cp313-cp313 | |
pylib: python313.lib | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Get CMake | |
uses: lukka/get-cmake@latest | |
- name: Setup Windows dev environment | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: 'x64' | |
- name: Upgrade pip version | |
run: | | |
python -m pip install -U pip | |
- name: Install build package | |
run: | | |
python -m pip install build | |
- name: Download and build Z3 | |
run: | | |
wget -UseBasicParsing https://github.com/Z3Prover/z3/releases/download/z3-4.12.2/z3-4.12.2-x64-win.zip -O z3-4.12.2-x64-win.zip | |
tar -xf z3-4.12.2-x64-win.zip | |
shell: powershell | |
- name: Download and build Capstone | |
run: | | |
wget -UseBasicParsing https://github.com/capstone-engine/capstone/archive/refs/tags/5.0.1.zip -O capstone-5.0.1.zip | |
tar -xf capstone-5.0.1.zip | |
mkdir -p capstone-5.0.1/build | |
cd capstone-5.0.1/build | |
../nmake.bat | |
shell: powershell | |
- name: Build Triton Python package | |
run: python -m build --wheel --outdir ${{ github.workspace }}\wheelhouse\windows_x86_64_tmp | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
PYTHON_INCLUDE_DIRS: ${{ env.pythonLocation }}\include | |
PYTHON_LIBRARY: ${{ env.pythonLocation }}\libs\${{ matrix.pylib }} | |
Z3_INCLUDE_DIRS: ${{ github.workspace }}\z3-4.12.2-x64-win\include | |
Z3_LIBRARIES: ${{ github.workspace }}\z3-4.12.2-x64-win\bin\libz3.lib | |
CAPSTONE_INCLUDE_DIRS: ${{ github.workspace }}\capstone-5.0.1\include | |
CAPSTONE_LIBRARIES: ${{ github.workspace }}\capstone-5.0.1\build\capstone.lib | |
- name: Repair wheel package | |
run: | | |
python -m pip install delvewheel | |
delvewheel repair --add-path ${{ github.workspace }}\z3-4.12.2-x64-win\bin --wheel-dir ${{ github.workspace }}\wheelhouse\windows_x86_64 -v ${{ github.workspace }}\wheelhouse\windows_x86_64_tmp\triton_library-${{ env.package-version }}-${{ matrix.pycp }}-win_amd64.whl | |
- name: Upload | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-${{ matrix.pycp }}-win_amd64.whl | |
path: ${{ github.workspace }}\wheelhouse\windows_x86_64\triton_library-${{ env.package-version }}-${{ matrix.pycp }}-win_amd64.whl | |
if-no-files-found: warn | |
build-macos: | |
# macos-13 = x86 | |
# macos-14 = arm (M1) | |
runs-on: macos-12 | |
strategy: | |
matrix: | |
python-version: ['3.8', '3.9', '3.10'] | |
include: | |
- python-version: 3.8 | |
pycp: cp38-cp38 | |
- python-version: 3.9 | |
pycp: cp39-cp39 | |
- python-version: 3.10 | |
pycp: cp310-cp310 | |
# - python-version: 3.11 | |
# pycp: cp311-cp311 | |
# - python-version: 3.12 | |
# pycp: cp312-cp312 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v2 | |
with: | |
version: "14.0" | |
directory: ${{ runner.temp }}/llvm | |
- name: Upgrade pip version | |
run: | | |
sudo python -m pip install -U pip | |
- name: Install build package | |
run: | | |
sudo python -m pip install build | |
- name: Install Meson | |
run: | | |
python -m pip install meson | |
- name: Install Bitwuzla | |
run: | | |
git clone https://github.com/bitwuzla/bitwuzla.git | |
cd bitwuzla | |
git checkout -b 0.4.0 0.4.0 | |
python ./configure.py --shared --prefix $(pwd)/install | |
cd build | |
sudo ninja install | |
- name: Download Z3 | |
run: | | |
wget -q https://github.com/Z3Prover/z3/releases/download/z3-4.12.2/z3-4.12.2-x64-osx-10.16.zip -O z3-4.12.2-x64-osx-10.16.zip | |
unzip z3-4.12.2-x64-osx-10.16.zip | |
- name: Install Capstone | |
run: | | |
wget -q https://github.com/capstone-engine/capstone/archive/refs/tags/5.0.1.tar.gz -O capstone-5.0.1.tar.gz | |
tar xf capstone-5.0.1.tar.gz | |
cd ./capstone-5.0.1 | |
./make.sh | |
sudo make install | |
- name: Build Triton Python package | |
run: python -m build --wheel --outdir wheelhouse/default_x86_64 | |
env: | |
Z3_INTERFACE: On | |
Z3_INCLUDE_DIRS: ${{ github.workspace }}/z3-4.12.2-x64-osx-10.16/include | |
Z3_LIBRARIES: ${{ github.workspace }}/z3-4.12.2-x64-osx-10.16/bin/libz3.a | |
BITWUZLA_INTERFACE: On | |
BITWUZLA_INCLUDE_DIRS: ${{ github.workspace }}/bitwuzla/install/include | |
BITWUZLA_LIBRARIES: ${{ github.workspace }}/bitwuzla/install/lib/libbitwuzla.dylib | |
CAPSTONE_INCLUDE_DIRS: /usr/local/include | |
CAPSTONE_LIBRARIES: /usr/local/lib/libcapstone.a | |
LLVM_INTERFACE: On | |
CMAKE_PREFIX_PATH: ${{env.LLVM_PATH}} | |
BOOST_INTERFACE: Off | |
- name: Repair wheel package | |
run: | | |
pip install delocate==0.10.4 | |
python ${{ github.workspace }}/src/scripts/macos/delocate-wheel-custom.py \ | |
--verbose \ | |
--wheel-dir wheelhouse/repaired_x86_64 \ | |
${{ github.workspace }}/wheelhouse/default_x86_64/triton_library-${{ env.package-version }}-${{ matrix.pycp }}-macosx_12_0_x86_64.whl | |
- name: Test wheel package | |
run: | | |
pip install virtualenv | |
virtualenv test-venv | |
source test-venv/bin/activate | |
pip install ${{ github.workspace }}/wheelhouse/repaired_x86_64/triton_library-${{ env.package-version }}-${{ matrix.pycp }}-macosx_12_0_x86_64.whl | |
python -c "import triton" | |
pip install capstone | |
pip install lief | |
pip install unicorn==2.0.0 | |
pip install z3-solver==4.12.2 | |
cd ${{ github.workspace }}/src/testers | |
python -m unittest discover -b -v unittests | |
deactivate | |
- name: Upload wheel package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: triton_library-${{ env.package-version }}-${{ matrix.pycp }}-macosx_12_0_x86_64.whl | |
path: ${{ github.workspace }}/wheelhouse/repaired_x86_64/triton_library-${{ env.package-version }}-${{ matrix.pycp }}-macosx_12_0_x86_64.whl | |
if-no-files-found: warn |