diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e7a294d4a..ecdaf0be4 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -435,6 +435,59 @@ jobs: path: src/api/python/wheelhouse/*.whl retention-days: 2 + pyodide-python: + name: "Python bindings (Pyodide)" + runs-on: ubuntu-24.04 + timeout-minutes: 90 + steps: + - name: Checkout code + uses: actions/checkout@v6.0.2 + + - name: Setup packages + run: sudo apt-get update && sudo apt-get install -y python3-dev python3-pip python3-venv + + - name: Create venv + run: python3 -m venv ~/env + + - name: Install pyodide + run: ~/env/bin/pip install pyodide-build pyodide-cli + + - name: Configure Emscripten + run: | + git clone https://github.com/emscripten-core/emsdk.git ~/emsdk + cd ~/emsdk + PYODIDE_EMSCRIPTEN_VERSION=$(~/env/bin/pyodide config get emscripten_version) + ./emsdk install ${PYODIDE_EMSCRIPTEN_VERSION} + ./emsdk activate ${PYODIDE_EMSCRIPTEN_VERSION} + + - name: Build wheel + run: | + source ~/emsdk/emsdk_env.sh + cd src/api/python + CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" CXXFLAGS="${CXXFLAGS}" ~/env/bin/pyodide build --exports whole_archive + env: + CFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0 -g2" + LDFLAGS: "-fexceptions -s WASM_BIGINT" + CXXFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0" + + - name: Setup env-pyodide + run: | + source ~/env/bin/activate + source ~/emsdk/emsdk_env.sh + pyodide venv ~/env-pyodide + + - name: Test wheel + run: | + ~/env-pyodide/bin/pip install src/api/python/dist/*.whl + ~/env-pyodide/bin/python src/api/python/z3test.py z3 + + - name: Upload artifact + uses: actions/upload-artifact@v7.0.1 + with: + name: PyodidePythonBuild + path: src/api/python/dist/*.whl + retention-days: 2 + windows-build-x64: name: "Windows x64 build" runs-on: windows-latest @@ -639,7 +692,7 @@ jobs: python-package: name: "Python packaging" - needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64] + needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64, pyodide-python] runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -697,7 +750,13 @@ jobs: with: name: ManyLinuxPythonBuildRiscv64 path: artifacts - + + - name: Download Pyodide Build + uses: actions/download-artifact@v8.0.1 + with: + name: PyodidePythonBuild + path: artifacts + - name: Extract builds run: | cd artifacts @@ -836,4 +895,3 @@ jobs: with: packages-dir: dist repository-url: https://test.pypi.org/legacy/ - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a62bbba4..4f095e9e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -445,6 +445,59 @@ jobs: path: src/api/python/wheelhouse/*.whl retention-days: 7 + pyodide-python: + name: "Python bindings (Pyodide)" + runs-on: ubuntu-24.04 + timeout-minutes: 90 + steps: + - name: Checkout code + uses: actions/checkout@v6.0.2 + + - name: Setup packages + run: sudo apt-get update && sudo apt-get install -y python3-dev python3-pip python3-venv + + - name: Create venv + run: python3 -m venv ~/env + + - name: Install pyodide + run: ~/env/bin/pip install pyodide-build pyodide-cli + + - name: Configure Emscripten + run: | + git clone https://github.com/emscripten-core/emsdk.git ~/emsdk + cd ~/emsdk + PYODIDE_EMSCRIPTEN_VERSION=$(~/env/bin/pyodide config get emscripten_version) + ./emsdk install ${PYODIDE_EMSCRIPTEN_VERSION} + ./emsdk activate ${PYODIDE_EMSCRIPTEN_VERSION} + + - name: Build wheel + run: | + source ~/emsdk/emsdk_env.sh + cd src/api/python + CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" CXXFLAGS="${CXXFLAGS}" ~/env/bin/pyodide build --exports whole_archive + env: + CFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0 -g2" + LDFLAGS: "-fexceptions -s WASM_BIGINT" + CXXFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0" + + - name: Setup env-pyodide + run: | + source ~/env/bin/activate + source ~/emsdk/emsdk_env.sh + pyodide venv ~/env-pyodide + + - name: Test wheel + run: | + ~/env-pyodide/bin/pip install src/api/python/dist/*.whl + ~/env-pyodide/bin/python src/api/python/z3test.py z3 + + - name: Upload artifact + uses: actions/upload-artifact@v7.0.1 + with: + name: PyodidePythonBuild + path: src/api/python/dist/*.whl + retention-days: 7 + windows-build-x64: name: "Windows x64 build" runs-on: windows-latest @@ -649,7 +702,7 @@ jobs: python-package: name: "Python packaging" - needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64] + needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64, pyodide-python] runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -707,7 +760,13 @@ jobs: with: name: ManyLinuxPythonBuildRiscv64 path: artifacts - + + - name: Download Pyodide Build + uses: actions/download-artifact@v8.0.1 + with: + name: PyodidePythonBuild + path: artifacts + - name: Extract builds run: | cd artifacts