diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 094f920f0..b0f67d309 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -15,119 +15,127 @@ jobs: - name: Create Docker image run: bash ./src/scripts/docker/build-docker-image.sh + - name: Install LLVM and Clang + uses: KyleMayes/install-llvm-action@v1 + with: + version: "14.0" + directory: ${{ runner.temp }}/llvm + - name: Build Wheel packages run: | - docker 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@v3 with: - name: triton_library-${{ env.package-version }}-cp38-cp38-manylinux_2_28_x86_64.whl - path: wheelhouse/manylinux_2_28_x86_64/triton_library-${{ env.package-version }}-cp38-cp38-manylinux_2_28_x86_64.whl + 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@v3 with: - name: triton_library-${{ env.package-version }}-cp39-cp39-manylinux_2_28_x86_64.whl - path: wheelhouse/manylinux_2_28_x86_64/triton_library-${{ env.package-version }}-cp39-cp39-manylinux_2_28_x86_64.whl + 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@v3 with: - name: triton_library-${{ env.package-version }}-cp310-cp310-manylinux_2_28_x86_64.whl - path: wheelhouse/manylinux_2_28_x86_64/triton_library-${{ env.package-version }}-cp310-cp310-manylinux_2_28_x86_64.whl + 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@v3 with: - name: triton_library-${{ env.package-version }}-cp311-cp311-manylinux_2_28_x86_64.whl - path: wheelhouse/manylinux_2_28_x86_64/triton_library-${{ env.package-version }}-cp311-cp311-manylinux_2_28_x86_64.whl + 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 - # FIXME - # build-windows: - # runs-on: windows-latest - # strategy: - # matrix: - # python-version: ['3.8', '3.9', '3.10'] - # 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 - # steps: - # - name: Checkout - # uses: actions/checkout@v3 - - # - name: Set up Python ${{ matrix.python-version }} - # uses: actions/setup-python@v4 - # 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.8.17/z3-4.8.17-x64-win.zip -O z3-4.8.17-x64-win.zip - # tar -xf z3-4.8.17-x64-win.zip - # wget -UseBasicParsing https://github.com/Z3Prover/z3/archive/refs/tags/z3-4.8.17.zip -O z3-4.8.17.zip - # tar -xf z3-4.8.17.zip - # cd z3-z3-4.8.17 - # python scripts\mk_make.py --x64 --staticlib - # cd build - # nmake - # shell: powershell - - # - name: Download Capstone - # run: | - # wget -UseBasicParsing https://github.com/capstone-engine/capstone/releases/download/4.0.2/capstone-4.0.2-win64.zip -O capstone-4.0.2-win64.zip - # tar -xf capstone-4.0.2-win64.zip - # shell: powershell - - # - name: Build Triton Python package - # run: python -m build --wheel - # env: - # PYTHON_VERSION: ${{ matrix.python-version }} - # PYTHON_INCLUDE_DIRS: ${{ env.pythonLocation }}\include - # PYTHON_LIBRARIES: ${{ env.pythonLocation }}\libs\${{ matrix.pylib }} - # PYTHON_LIBRARY: ${{ env.pythonLocation }}\libs\${{ matrix.pylib }} - # Z3_INCLUDE_DIRS: ${{ github.workspace }}\z3-4.8.17-x64-win\include - # Z3_LIBRARIES: ${{ github.workspace }}\z3-z3-4.8.17\build\libz3-static.lib - # CAPSTONE_INCLUDE_DIRS: ${{ github.workspace }}\capstone-4.0.2-win64\include - # CAPSTONE_LIBRARIES: ${{ github.workspace }}\capstone-4.0.2-win64\capstone.lib - - # - name: Upload - # uses: actions/upload-artifact@v3 - # with: - # name: triton_library-${{ env.package-version }}-${{ matrix.pycp }}-win_amd64.whl - # path: ${{ github.workspace }}/dist/triton_library-${{ env.package-version }}-${{ matrix.pycp }}-win_amd64.whl - # if-no-files-found: warn + build-windows: + runs-on: windows-latest + strategy: + matrix: + python-version: ['3.8', '3.9', '3.10', '3.11'] + 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 + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + 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 Capstone + run: | + wget -UseBasicParsing https://github.com/capstone-engine/capstone/releases/download/4.0.2/capstone-4.0.2-win64.zip -O capstone-4.0.2-win64.zip + tar -xf capstone-4.0.2-win64.zip + 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-4.0.2-win64\include + CAPSTONE_LIBRARIES: ${{ github.workspace }}\capstone-4.0.2-win64\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@v3 + 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: @@ -193,23 +201,23 @@ jobs: - name: Download Z3 run: | - wget -q https://github.com/Z3Prover/z3/releases/download/z3-4.8.17/z3-4.8.17-x64-osx-10.16.zip - unzip z3-4.8.17-x64-osx-10.16.zip + 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/aquynh/capstone/archive/4.0.2.tar.gz - tar -xf ./4.0.2.tar.gz - cd capstone-4.0.2 - bash ./make.sh + 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.8.17-x64-osx-10.16/include - Z3_LIBRARIES: ${{ github.workspace }}/z3-4.8.17-x64-osx-10.16/bin/libz3.a + 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 @@ -221,7 +229,7 @@ jobs: - name: Repair wheel package run: | - pip install delocate + pip install delocate==0.10.4 python ${{ github.workspace }}/src/scripts/macos/delocate-wheel-custom.py \ --verbose \ @@ -242,7 +250,7 @@ jobs: pip install capstone pip install lief pip install unicorn==2.0.0 - pip install z3-solver + pip install z3-solver==4.12.2 cd ${{ github.workspace }}/src/testers python -m unittest discover -b -v unittests diff --git a/src/scripts/docker/Dockerfile b/src/scripts/docker/Dockerfile index 328c44945..7eff5f68f 100644 --- a/src/scripts/docker/Dockerfile +++ b/src/scripts/docker/Dockerfile @@ -11,6 +11,12 @@ RUN yum install -y \ sudo \ wget +# LLVM dependencies. +RUN yum install -y \ + libxml2-devel \ + libzstd-devel \ + ncurses-devel + RUN python3.10 -m pip install meson ENV DEPENDENCIES_DIR=/tmp/triton-dependencies diff --git a/src/scripts/docker/build-wheel-linux.sh b/src/scripts/docker/build-wheel-linux.sh index 349bb6a7d..fab3e7794 100755 --- a/src/scripts/docker/build-wheel-linux.sh +++ b/src/scripts/docker/build-wheel-linux.sh @@ -19,6 +19,7 @@ set -e # set -x # Debugging DEPENDENCIES_DIR=/tmp/triton-dependencies +LLVM_DIR=/llvm SOURCE_DIR=/src WHEEL_DIR=$SOURCE_DIR/wheelhouse @@ -32,7 +33,7 @@ export BITWUZLA_INTERFACE=On export BITWUZLA_INCLUDE_DIRS=$DEPENDENCIES_DIR/bitwuzla/install/include export BITWUZLA_LIBRARIES=$DEPENDENCIES_DIR/bitwuzla/install/lib64/libbitwuzla.so export LLVM_INTERFACE=ON -export CMAKE_PREFIX_PATH=$($DEPENDENCIES_DIR/clang+llvm-12.0.1-x86_64-linux-gnu-ubuntu-/bin/llvm-config --prefix) +export CMAKE_PREFIX_PATH=$LLVM_DIR # Build Triton Python wheel package for Python 3.8. echo "[+] Build Triton wheel package for Python 3.8"