From 3274fa641c0d5572850a58567be571267f849972 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 05:31:10 -0500 Subject: [PATCH 1/6] ci: add ARM Linux GitHub Actions workflow --- .github/workflows/testing-arm-linux.yml | 120 ++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 .github/workflows/testing-arm-linux.yml diff --git a/.github/workflows/testing-arm-linux.yml b/.github/workflows/testing-arm-linux.yml new file mode 100644 index 000000000000..204fdc599817 --- /dev/null +++ b/.github/workflows/testing-arm-linux.yml @@ -0,0 +1,120 @@ +name: ARM Linux + +on: + pull_request: + types: [ opened, synchronize, reopened ] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + arm-linux: + name: arm-${{ matrix.bits }} / ${{ matrix.uv_group }} + runs-on: ubuntu-24.04-arm + strategy: + fail-fast: false + matrix: + bits: [ "64", "32" ] + uv_group: [ "ci-llvm-main", "ci-llvm-22", "ci-llvm-21", "ci-llvm-20" ] + include: + - bits: 32 + arch: armv7l + python: 3.11-armv7-gnueabihf # needed for piwheels + - bits: 64 + arch: aarch64 + python: linux-aarch64-gnu + + steps: + - uses: actions/checkout@v4 + + - uses: astral-sh/setup-uv@v5 + + - name: Install system dependencies + run: | + if [[ "${{ matrix.bits }}" == "32" ]]; then + sudo dpkg --add-architecture armhf + fi + + apt_update() { + for i in 1 2 3; do + if sudo apt-get update; then return 0; fi + echo "apt-get update failed (attempt $i/3), retrying in 10s..." + sleep 10 + done + return 1 + } + apt_update + + if [[ "${{ matrix.bits }}" == "32" ]]; then + sudo apt-get install -y \ + binutils-arm-linux-gnueabihf \ + g++-arm-linux-gnueabihf \ + gcc-arm-linux-gnueabihf \ + libc6:armhf \ + libstdc++6:armhf \ + libatomic1:armhf \ + libpng-dev:armhf \ + libjpeg-dev:armhf + else + sudo apt-get install -y \ + libpng-dev \ + libjpeg-dev + fi + + - name: Sync CI environment + run: | + setarch ${{ matrix.arch }} bash -ec " + uv sync --python '${{ matrix.python }}' --group '${{ matrix.uv_group }}' --no-install-project + echo '${GITHUB_WORKSPACE}/.venv/bin' >> '$GITHUB_PATH' + echo 'VIRTUAL_ENV=${GITHUB_WORKSPACE}/.venv' >> '$GITHUB_ENV' + " + + - name: Configure LLVM + run: echo "Halide_LLVM_ROOT=$(halide-llvm --prefix)" >> "$GITHUB_ENV" + + - name: Configure CMake + run: | + TOOLCHAIN_ARGS=() + if [[ "${{ matrix.bits }}" == "32" ]]; then + TOOLCHAIN_ARGS+=("-DCMAKE_TOOLCHAIN_FILE=${GITHUB_WORKSPACE}/cmake/toolchain.linux-arm32.cmake") + fi + + cmake -G Ninja -S . -B build \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DHalide_LLVM_ROOT="${Halide_LLVM_ROOT}" \ + -DWITH_PYTHON_BINDINGS=OFF \ + "${TOOLCHAIN_ARGS[@]}" + + - name: Initial build + run: cmake --build build + + - name: Detect host target + run: | + HOST_TARGET=$(./build/src/autoschedulers/common/get_host_target) + echo "HAS_SVE2=$([[ "$HOST_TARGET" == *sve2* ]] && echo true || echo false)" >> "$GITHUB_ENV" + echo "Detected host target: ${HOST_TARGET}" + + - name: Test (host) + if: matrix.bits == '32' || env.HAS_SVE2 == 'true' + run: | + cmake -S . -B build -DHalide_TARGET=host + cmake --build build + ctest --test-dir build --build-config RelWithDebInfo --output-on-failure -j "$(nproc)" + + - name: Test (NEON) + if: matrix.bits == '64' + run: | + cmake -S . -B build -DHalide_TARGET=arm-64-linux-arm_dot_prod-arm_fp16 + cmake --build build + ctest --test-dir build --build-config RelWithDebInfo --output-on-failure -j "$(nproc)" + + - name: Test (no extensions) + run: | + cmake -S . -B build -DHalide_TARGET=cmake + cmake --build build + ctest --test-dir build --build-config RelWithDebInfo --output-on-failure -j "$(nproc)" From 7df60721d2e0c5c08968b1e921c2299245362add Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 05:31:10 -0500 Subject: [PATCH 2/6] python: pin arm32 wheels from piwheels in CI environment --- pyproject.toml | 15 +++- uv.lock | 225 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 202 insertions(+), 38 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e3db597e780d..af862739511d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ readme = "./packaging/pip/README.md" requires-python = ">=3.10" dependencies = [ "imageio>=2", + "pillow; platform_machine == 'armv8l' or platform_machine == 'armv7l'", "numpy>=1.26", ] dynamic = ['version'] @@ -38,7 +39,6 @@ classifiers = [ "Environment :: WebAssembly", "Intended Audience :: Developers", "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", @@ -68,7 +68,8 @@ dev = [ "setuptools-scm>=8.3.1", ] apps = [ - "onnx==1.18.0", # for apps/onnx + "onnx==1.18.0; platform_machine != 'armv8l' and platform_machine != 'armv7l'", # for apps/onnx + "onnx==1.17.0; platform_machine == 'armv8l' or platform_machine == 'armv7l'", # for apps/onnx "pytest", # unspecified onnx dependency ] tools = [ @@ -202,8 +203,18 @@ conflicts = [ [tool.uv.sources] halide-llvm = { index = "halide" } +imageio = { index = "piwheels", marker = "platform_machine == 'armv8l' or platform_machine == 'armv7l'" } +numpy = { index = "piwheels", marker = "platform_machine == 'armv8l' or platform_machine == 'armv7l'" } +onnx = { index = "piwheels", marker = "platform_machine == 'armv8l' or platform_machine == 'armv7l'" } +pillow = { index = "piwheels", marker = "platform_machine == 'armv8l' or platform_machine == 'armv7l'" } +protobuf = { index = "piwheels", marker = "platform_machine == 'armv8l' or platform_machine == 'armv7l'" } [[tool.uv.index]] name = "halide" url = "https://pypi.halide-lang.org/simple" explicit = true + +[[tool.uv.index]] +name = "piwheels" +url = "https://piwheels.org/simple" +explicit = true diff --git a/uv.lock b/uv.lock index ede7c93bd81e..699bfd526f0c 100644 --- a/uv.lock +++ b/uv.lock @@ -2,8 +2,14 @@ version = 1 revision = 3 requires-python = ">=3.10" resolution-markers = [ - "python_full_version >= '3.11'", - "python_full_version < '3.11'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] conflicts = [[ { package = "halide", group = "ci-llvm-20" }, @@ -83,20 +89,26 @@ wheels = [ name = "halide" source = { editable = "." } dependencies = [ - { name = "imageio" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "imageio", version = "2.37.2", source = { registry = "https://piwheels.org/simple" }, marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "imageio", version = "2.37.2", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "pillow", version = "12.1.1", source = { registry = "https://piwheels.org/simple" }, marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, ] [package.dev-dependencies] apps = [ - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pytest" }, ] ci-base = [ { name = "cmake" }, { name = "ninja" }, - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pybind11" }, { name = "pytest" }, { name = "ruff" }, @@ -108,7 +120,8 @@ ci-llvm-20 = [ { name = "cmake" }, { name = "halide-llvm", version = "20.1.8", source = { registry = "https://pypi.halide-lang.org/simple" } }, { name = "ninja" }, - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "(platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra != 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra != 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra != 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pybind11" }, { name = "pytest" }, { name = "ruff" }, @@ -120,7 +133,8 @@ ci-llvm-21 = [ { name = "cmake" }, { name = "halide-llvm", version = "21.1.8", source = { registry = "https://pypi.halide-lang.org/simple" } }, { name = "ninja" }, - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "(platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra != 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pybind11" }, { name = "pytest" }, { name = "ruff" }, @@ -132,7 +146,8 @@ ci-llvm-22 = [ { name = "cmake" }, { name = "halide-llvm", version = "22.1.0", source = { registry = "https://pypi.halide-lang.org/simple" } }, { name = "ninja" }, - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "(platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pybind11" }, { name = "pytest" }, { name = "ruff" }, @@ -144,7 +159,8 @@ ci-llvm-main = [ { name = "cmake" }, { name = "halide-llvm", version = "23.0.0.dev83558+g0b423a5b", source = { registry = "https://pypi.halide-lang.org/simple" } }, { name = "ninja" }, - { name = "onnx" }, + { name = "onnx", version = "1.17.0", source = { registry = "https://piwheels.org/simple" }, marker = "(platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "onnx", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main')" }, { name = "pybind11" }, { name = "pytest" }, { name = "ruff" }, @@ -166,19 +182,24 @@ tools = [ [package.metadata] requires-dist = [ - { name = "imageio", specifier = ">=2" }, - { name = "numpy", specifier = ">=1.26" }, + { name = "imageio", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = ">=2" }, + { name = "imageio", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = ">=2", index = "https://piwheels.org/simple" }, + { name = "numpy", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = ">=1.26" }, + { name = "numpy", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = ">=1.26", index = "https://piwheels.org/simple" }, + { name = "pillow", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", index = "https://piwheels.org/simple" }, ] [package.metadata.requires-dev] apps = [ - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pytest" }, ] ci-base = [ { name = "cmake", specifier = ">=3.28" }, { name = "ninja", specifier = ">=1.11,!=1.13.0" }, - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pybind11", specifier = ">=2.11.1" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.12" }, @@ -190,7 +211,8 @@ ci-llvm-20 = [ { name = "cmake", specifier = ">=3.28" }, { name = "halide-llvm", specifier = "~=20.1.0", index = "https://pypi.halide-lang.org/simple" }, { name = "ninja", specifier = ">=1.11,!=1.13.0" }, - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pybind11", specifier = ">=2.11.1" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.12" }, @@ -202,7 +224,8 @@ ci-llvm-21 = [ { name = "cmake", specifier = ">=3.28" }, { name = "halide-llvm", specifier = "~=21.1.0", index = "https://pypi.halide-lang.org/simple" }, { name = "ninja", specifier = ">=1.11,!=1.13.0" }, - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pybind11", specifier = ">=2.11.1" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.12" }, @@ -214,7 +237,8 @@ ci-llvm-22 = [ { name = "cmake", specifier = ">=3.28" }, { name = "halide-llvm", specifier = "~=22.1.0", index = "https://pypi.halide-lang.org/simple" }, { name = "ninja", specifier = ">=1.11,!=1.13.0" }, - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pybind11", specifier = ">=2.11.1" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.12" }, @@ -226,7 +250,8 @@ ci-llvm-main = [ { name = "cmake", specifier = ">=3.28" }, { name = "halide-llvm", specifier = "~=23.0.0.dev0", index = "https://pypi.halide-lang.org/simple" }, { name = "ninja", specifier = ">=1.11,!=1.13.0" }, - { name = "onnx", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine != 'armv7l' and platform_machine != 'armv8l'", specifier = "==1.18.0" }, + { name = "onnx", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l'", specifier = "==1.17.0", index = "https://piwheels.org/simple" }, { name = "pybind11", specifier = ">=2.11.1" }, { name = "pytest" }, { name = "ruff", specifier = ">=0.12" }, @@ -251,8 +276,14 @@ name = "halide-llvm" version = "20.1.8" source = { registry = "https://pypi.halide-lang.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", - "python_full_version < '3.11'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] wheels = [ { url = "https://pypi.halide-lang.org/packages/halide_llvm-20.1.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8230565dc0458e4f1b60444e9df259a3c66ffed8c2b54444b73dbb2c7e5606b5" }, @@ -270,8 +301,14 @@ name = "halide-llvm" version = "21.1.8" source = { registry = "https://pypi.halide-lang.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", - "python_full_version < '3.11'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] wheels = [ { url = "https://pypi.halide-lang.org/packages/halide_llvm-21.1.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3a5efde3893e1bd5da3729a4dc4697cc38d26d5accae3ff0869f4650a3d5d98b" }, @@ -289,8 +326,14 @@ name = "halide-llvm" version = "22.1.0" source = { registry = "https://pypi.halide-lang.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", - "python_full_version < '3.11'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] wheels = [ { url = "https://pypi.halide-lang.org/packages/halide_llvm-22.1.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2d83b03068467ac89d1120f4d105393e9d1f411141b05590d0794c9389974a56" }, @@ -308,8 +351,14 @@ name = "halide-llvm" version = "23.0.0.dev83558+g0b423a5b" source = { registry = "https://pypi.halide-lang.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", - "python_full_version < '3.11'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] wheels = [ { url = "https://pypi.halide-lang.org/packages/halide_llvm-23.0.0.dev83558+g0b423a5b-py3-none-macosx_11_0_arm64.whl", hash = "sha256:923933305f7b33144bb67921bc62dcabc01e5ce3e449b634a99142a37420e96a" }, @@ -322,14 +371,39 @@ wheels = [ { url = "https://pypi.halide-lang.org/packages/halide_llvm-23.0.0.dev83558+g0b423a5b-py3-none-win_amd64.whl", hash = "sha256:8251733c43cb1c39cf111db0de269e8f934f447dc648b4401b9b5138c7bd257b" }, ] +[[package]] +name = "imageio" +version = "2.37.2" +source = { registry = "https://piwheels.org/simple" } +resolution-markers = [ + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "pillow", version = "12.1.1", source = { registry = "https://piwheels.org/simple" }, marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, +] +wheels = [ + { url = "https://piwheels.org/simple/imageio/imageio-2.37.2-py3-none-any.whl", hash = "sha256:85f2b4d9e29c87955339e7417e54574e335d06d5c180bdbdc03dcdfdb56cd75c" }, +] + [[package]] name = "imageio" version = "2.37.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", +] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, - { name = "pillow" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "pillow", version = "12.1.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a3/6f/606be632e37bf8d05b253e8626c2291d74c691ddc7bcdf7d6aaf33b32f6a/imageio-2.37.2.tar.gz", hash = "sha256:0212ef2727ac9caa5ca4b2c75ae89454312f440a756fcfc8ef1993e718f50f8a", size = 389600, upload-time = "2025-11-04T14:29:39.898Z" } wheels = [ @@ -369,12 +443,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/58/612a17593c2d117f96c7f6b7f1e6570246bddc4b1e808519403a1417f217/ninja-1.11.1.4-py3-none-win_arm64.whl", hash = "sha256:5713cf50c5be50084a8693308a63ecf9e55c3132a78a41ab1363a28b6caaaee1", size = 271441, upload-time = "2025-03-22T06:46:42.147Z" }, ] +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://piwheels.org/simple" } +resolution-markers = [ + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", +] +wheels = [ + { url = "https://piwheels.org/simple/numpy/numpy-2.2.6-cp311-cp311-linux_armv6l.whl", hash = "sha256:9d5168644d4f18fda98839f03a5e6ede9b1b780ac4a187c188971a3dc4b0382e" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.2.6-cp311-cp311-linux_armv7l.whl", hash = "sha256:9d5168644d4f18fda98839f03a5e6ede9b1b780ac4a187c188971a3dc4b0382e" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.2.6-cp313-cp313-linux_armv6l.whl", hash = "sha256:495b42b52f5be434ff56e549d9deac19ac50de272f1f803755408e21c5e5e8cc" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.2.6-cp313-cp313-linux_armv7l.whl", hash = "sha256:495b42b52f5be434ff56e549d9deac19ac50de272f1f803755408e21c5e5e8cc" }, +] + [[package]] name = "numpy" version = "2.2.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.11'", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } wheels = [ @@ -434,12 +524,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, ] +[[package]] +name = "numpy" +version = "2.4.2" +source = { registry = "https://piwheels.org/simple" } +resolution-markers = [ + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", +] +wheels = [ + { url = "https://piwheels.org/simple/numpy/numpy-2.4.2-cp311-cp311-linux_armv6l.whl", hash = "sha256:67750511a0e237521e4c633ead976d0f77d3879f9c078de89c5aca943ee8fc56" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.4.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:67750511a0e237521e4c633ead976d0f77d3879f9c078de89c5aca943ee8fc56" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.4.2-cp313-cp313-linux_armv6l.whl", hash = "sha256:c46cb8ff822299dca11cedfb7c631fa6169dc30764c50764f6a4d7ba6690cd55" }, + { url = "https://piwheels.org/simple/numpy/numpy-2.4.2-cp313-cp313-linux_armv7l.whl", hash = "sha256:c46cb8ff822299dca11cedfb7c631fa6169dc30764c50764f6a4d7ba6690cd55" }, +] + [[package]] name = "numpy" version = "2.4.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.11'", + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", ] sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } wheels = [ @@ -516,15 +622,41 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/e5/b7d20451657664b07986c2f6e3be564433f5dcaf3482d68eaecd79afaf03/numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0", size = 12502577, upload-time = "2026-01-31T23:13:07.08Z" }, ] +[[package]] +name = "onnx" +version = "1.17.0" +source = { registry = "https://piwheels.org/simple" } +resolution-markers = [ + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://piwheels.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine != 'armv7l' and platform_machine != 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "protobuf", marker = "platform_machine == 'armv7l' or platform_machine == 'armv8l' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, +] +wheels = [ + { url = "https://archive1.piwheels.org/simple/onnx/onnx-1.17.0-cp311-cp311-linux_armv6l.whl", hash = "sha256:e0685ef16ae65d2738b31c46928289eb3bd1adabc5917b8d56f778248b6c054f" }, + { url = "https://archive1.piwheels.org/simple/onnx/onnx-1.17.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:e0685ef16ae65d2738b31c46928289eb3bd1adabc5917b8d56f778248b6c054f" }, +] + [[package]] name = "onnx" version = "1.18.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", +] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, - { name = "protobuf" }, - { name = "typing-extensions" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version >= '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (python_full_version < '3.11' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "protobuf", marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, + { name = "typing-extensions", marker = "(platform_machine != 'armv7l' and platform_machine != 'armv8l') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv7l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-21') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-20' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-22') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-21' and extra == 'group-6-halide-ci-llvm-main') or (platform_machine == 'armv8l' and extra == 'group-6-halide-ci-llvm-22' and extra == 'group-6-halide-ci-llvm-main')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3d/60/e56e8ec44ed34006e6d4a73c92a04d9eea6163cc12440e35045aec069175/onnx-1.18.0.tar.gz", hash = "sha256:3d8dbf9e996629131ba3aa1afd1d8239b660d1f830c6688dd7e03157cccd6b9c", size = 12563009, upload-time = "2025-05-12T22:03:09.626Z" } wheels = [ @@ -573,10 +705,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, ] +[[package]] +name = "pillow" +version = "12.1.1" +source = { registry = "https://piwheels.org/simple" } +resolution-markers = [ + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version >= '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform != 'armv7l' and sys_platform != 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l')", + "(python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine == 'armv7l' and sys_platform == 'armv8l') or (python_full_version < '3.11' and platform_machine == 'armv8l' and sys_platform == 'armv8l')", +] +wheels = [ + { url = "https://piwheels.org/simple/pillow/pillow-12.1.1-cp311-cp311-linux_armv6l.whl", hash = "sha256:80e4cc1dfbf1b27cf31d0eacb6397020f21ce3d6ac94f6d989a2f86eb28772b1" }, + { url = "https://piwheels.org/simple/pillow/pillow-12.1.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:80e4cc1dfbf1b27cf31d0eacb6397020f21ce3d6ac94f6d989a2f86eb28772b1" }, +] + [[package]] name = "pillow" version = "12.1.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version >= '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", + "python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform != 'armv7l' and sys_platform != 'armv8l'", + "(python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv7l') or (python_full_version < '3.11' and platform_machine != 'armv7l' and platform_machine != 'armv8l' and sys_platform == 'armv8l')", +] sdist = { url = "https://files.pythonhosted.org/packages/1f/42/5c74462b4fd957fcd7b13b04fb3205ff8349236ea74c7c375766d6c82288/pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4", size = 46980264, upload-time = "2026-02-11T04:23:07.146Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/1d/30/5bd3d794762481f8c8ae9c80e7b76ecea73b916959eb587521358ef0b2f9/pillow-12.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0", size = 5304099, upload-time = "2026-02-11T04:20:06.13Z" }, From 6fd85cb566ac3b1f9334fddc0877e592e5b54049 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 05:31:10 -0500 Subject: [PATCH 3/6] arm32: fix toolchain/runtime compatibility and builtins mapping --- cmake/toolchain.linux-arm32.cmake | 3 + src/JITModule.cpp | 113 +++++++++++++++++++++++++----- src/runtime/HalideRuntime.h | 5 +- 3 files changed, 101 insertions(+), 20 deletions(-) diff --git a/cmake/toolchain.linux-arm32.cmake b/cmake/toolchain.linux-arm32.cmake index d1276645d1ba..8957fde34191 100644 --- a/cmake/toolchain.linux-arm32.cmake +++ b/cmake/toolchain.linux-arm32.cmake @@ -24,6 +24,9 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(CMAKE_C_FLAGS_INIT "-mfp16-format=ieee -Wno-psabi") +set(CMAKE_CXX_FLAGS_INIT "-mfp16-format=ieee -Wno-psabi") + # add_custom_command() will make bad decisions about running the command # when crosscompiling (it won't expand the target into a full path). # Setting CMAKE_CROSSCOMPILING_EMULATOR to /usr/bin/env tricks it into diff --git a/src/JITModule.cpp b/src/JITModule.cpp index 491cddb64bd3..b220f85cc503 100644 --- a/src/JITModule.cpp +++ b/src/JITModule.cpp @@ -29,10 +29,85 @@ namespace Internal { using std::string; +// On 32-bit targets, LLVM JIT code may reference libgcc helper functions +// that dlsym can't always resolve (e.g. under QEMU, or when the host +// compiler inlined them). We provide wrappers and register them in a +// builtins map that getSymbolAddress consults as a fallback. + #if defined(__GNUC__) && defined(__i386__) extern "C" unsigned long __udivdi3(unsigned long a, unsigned long b); + +static const std::map i386_builtins = { + {"__udivdi3", (uintptr_t)&__udivdi3}, +}; +#endif + +// On arm-32, LLVM generates calls to __sync_* libgcc functions for atomic +// operations. We provide wrappers using GCC's __sync_* builtins, guarded +// by the __GCC_HAVE_SYNC_COMPARE_AND_SWAP_N predefined macros. +#if defined(__arm__) + +static void halide__sync_synchronize() { + __sync_synchronize(); +} + +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 +static uint8_t halide__sync_lock_test_and_set_1(volatile uint8_t *ptr, uint8_t val) { + return __sync_lock_test_and_set(ptr, val); +} +#endif + +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 +static uint32_t halide__sync_fetch_and_add_4(volatile uint32_t *ptr, uint32_t val) { + return __sync_fetch_and_add(ptr, val); +} +static uint32_t halide__sync_fetch_and_sub_4(volatile uint32_t *ptr, uint32_t val) { + return __sync_fetch_and_sub(ptr, val); +} +static uint32_t halide__sync_fetch_and_or_4(volatile uint32_t *ptr, uint32_t val) { + return __sync_fetch_and_or(ptr, val); +} +static uint32_t halide__sync_fetch_and_and_4(volatile uint32_t *ptr, uint32_t val) { + return __sync_fetch_and_and(ptr, val); +} +static uint32_t halide__sync_val_compare_and_swap_4(volatile uint32_t *ptr, uint32_t oldval, uint32_t newval) { + return __sync_val_compare_and_swap(ptr, oldval, newval); +} #endif +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 +static uint64_t halide__sync_fetch_and_add_8(volatile uint64_t *ptr, uint64_t val) { + return __sync_fetch_and_add(ptr, val); +} +static uint64_t halide__sync_fetch_and_sub_8(volatile uint64_t *ptr, uint64_t val) { + return __sync_fetch_and_sub(ptr, val); +} +static uint64_t halide__sync_val_compare_and_swap_8(volatile uint64_t *ptr, uint64_t oldval, uint64_t newval) { + return __sync_val_compare_and_swap(ptr, oldval, newval); +} +#endif + +static const std::map arm32_sync_builtins = { + {"__sync_synchronize", (uintptr_t)&halide__sync_synchronize}, +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 + {"__sync_lock_test_and_set_1", (uintptr_t)&halide__sync_lock_test_and_set_1}, +#endif +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 + {"__sync_fetch_and_add_4", (uintptr_t)&halide__sync_fetch_and_add_4}, + {"__sync_fetch_and_sub_4", (uintptr_t)&halide__sync_fetch_and_sub_4}, + {"__sync_fetch_and_or_4", (uintptr_t)&halide__sync_fetch_and_or_4}, + {"__sync_fetch_and_and_4", (uintptr_t)&halide__sync_fetch_and_and_4}, + {"__sync_val_compare_and_swap_4", (uintptr_t)&halide__sync_val_compare_and_swap_4}, +#endif +#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 + {"__sync_fetch_and_add_8", (uintptr_t)&halide__sync_fetch_and_add_8}, + {"__sync_fetch_and_sub_8", (uintptr_t)&halide__sync_fetch_and_sub_8}, + {"__sync_val_compare_and_swap_8", (uintptr_t)&halide__sync_val_compare_and_swap_8}, +#endif +}; + +#endif // defined(__arm__) + #ifdef _WIN32 void *get_symbol_address(const char *s) { return (void *)GetProcAddress(GetModuleHandle(nullptr), s); @@ -247,25 +322,6 @@ class HalideJITMemoryManager : public SectionMemoryManager { } } uint64_t result = SectionMemoryManager::getSymbolAddress(name); -#if defined(__GNUC__) && defined(__i386__) - // This is a workaround for an odd corner case (cross-compiling + testing - // Python bindings x86-32 on an x86-64 system): __udivdi3 is a helper function - // that GCC uses to do u64/u64 division on 32-bit systems; it's usually included - // by the linker on these systems as needed. When we JIT, LLVM will include references - // to this call; MCJIT fixes up these references by doing (roughly) dlopen(NULL) - // to look up the symbol. For normal JIT tests, this works fine, as dlopen(NULL) - // finds the test executable, which has the right lookups to locate it inside libHalide.so. - // If, however, we are running a JIT-via-Python test, dlopen(NULL) returns the - // CPython executable... which apparently *doesn't* include this as an exported - // function, so the lookup fails and crashiness ensues. So our workaround here is - // a bit icky, but expedient: check for this name if we can't find it elsewhere, - // and if so, return the one we know should be present. (Obviously, if other runtime - // helper functions of this sort crop up in the future, this should be expanded - // into a "builtins map".) - if (result == 0 && name == "__udivdi3") { - result = (uint64_t)&__udivdi3; - } -#endif internal_assert(result != 0) << "HalideJITMemoryManager: unable to find address for " << name << "\n"; return result; @@ -420,6 +476,25 @@ void compile_module_impl( } } } + + // On 32-bit targets, add libgcc builtins that dlsym can't find. +#if defined(__GNUC__) && defined(__i386__) + for (const auto &[sym_name, sym_addr] : i386_builtins) { + auto name = symbolStringPool->intern(sym_name); + if (!newSymbols.count(name)) { + newSymbols.insert({name, {llvm::orc::ExecutorAddr(sym_addr), JITSymbolFlags::Exported}}); + } + } +#endif +#if defined(__arm__) + for (const auto &[sym_name, sym_addr] : arm32_sync_builtins) { + auto name = symbolStringPool->intern(sym_name); + if (!newSymbols.count(name)) { + newSymbols.insert({name, {llvm::orc::ExecutorAddr(sym_addr), JITSymbolFlags::Exported}}); + } + } +#endif + err = JIT->getMainJITDylib().define(orc::absoluteSymbols(std::move(newSymbols))); internal_assert(!err) << llvm::toString(std::move(err)) << "\n"; diff --git a/src/runtime/HalideRuntime.h b/src/runtime/HalideRuntime.h index 4917f84a3814..6237225685d0 100644 --- a/src/runtime/HalideRuntime.h +++ b/src/runtime/HalideRuntime.h @@ -117,7 +117,10 @@ extern "C" { // For now, we say that if >= v12, and compiling on x86 or arm, // we assume support. This may need revision. #if defined(__GNUC__) && (__GNUC__ >= 12) -#if defined(__x86_64__) || (defined(__i386__) && (__GNUC__ >= 14) && defined(__SSE2__)) || ((defined(__arm__) || defined(__aarch64__)) && (__GNUC__ >= 13)) +#if defined(__x86_64__) || \ + (defined(__i386__) && (__GNUC__ >= 14) && defined(__SSE2__)) || \ + (defined(__arm__) && (__GNUC__ >= 13) && __ARM_FP16_FORMAT_IEEE) || \ + (defined(__aarch64__) && (__GNUC__ >= 13)) #define HALIDE_CPP_COMPILER_HAS_FLOAT16 #endif #endif From 974f13efcd7f4393f50a530f3e5c9672fdf60eb5 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 05:31:10 -0500 Subject: [PATCH 4/6] codegen: fix ARM SVE2 lowering and bool vector handling --- src/CodeGen_ARM.cpp | 27 ++++++++- src/CodeGen_LLVM.cpp | 60 +++++++++++++++++++- src/CodeGen_LLVM.h | 10 ++++ test/correctness/CMakeLists.txt | 2 + test/correctness/sve_codegen_predicated.cpp | 26 +++++++++ test/correctness/sve_codegen_reinterpret.cpp | 32 +++++++++++ 6 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 test/correctness/sve_codegen_predicated.cpp create mode 100644 test/correctness/sve_codegen_reinterpret.cpp diff --git a/src/CodeGen_ARM.cpp b/src/CodeGen_ARM.cpp index 43372183aeb4..d5c3879d36af 100644 --- a/src/CodeGen_ARM.cpp +++ b/src/CodeGen_ARM.cpp @@ -56,6 +56,10 @@ Target complete_arm_target(Target t) { } }; + // ARMFp16 implies ARMv8.2-A; we don't know of any devices where + // that doesn't hold. The cascade loop below will set ARMv81a and ARMv8a. + add_implied_feature_if_supported(t, Target::ARMFp16, Target::ARMv82a); + constexpr int num_arm_v8_features = 10; static const Target::Feature arm_v8_features[num_arm_v8_features] = { Target::ARMv89a, @@ -1681,6 +1685,7 @@ void CodeGen_ARM::visit(const Store *op) { vpred_val = convert_fixed_or_scalable_vector_type(vpred_val, pred_type); if (is_predicated_store) { Value *sliced_store_vpred_val = slice_vector(store_pred_val, i, natural_lanes); + sliced_store_vpred_val = convert_fixed_or_scalable_vector_type(sliced_store_vpred_val, pred_type); vpred_val = builder->CreateAnd(vpred_val, sliced_store_vpred_val); } @@ -1854,6 +1859,7 @@ void CodeGen_ARM::visit(const Load *op) { Value *vpred_val = codegen(vpred); if (is_predicated_load) { Value *sliced_load_vpred_val = slice_vector(load_pred_val, i, natural_lanes); + sliced_load_vpred_val = convert_fixed_or_scalable_vector_type(sliced_load_vpred_val, vpred_val->getType()); vpred_val = builder->CreateAnd(vpred_val, sliced_load_vpred_val); } @@ -1904,8 +1910,14 @@ Value *CodeGen_ARM::interleave_vectors(const std::vector &vecs) { return CodeGen_Posix::interleave_vectors(vecs); } - // Lower into llvm.vector.interleave intrinsic + // Lower into llvm.vector.interleave intrinsic. + // LLVM only supports non-power-of-2 strides (e.g. 3) for scalable + // vectors starting in LLVM 22. +#if LLVM_VERSION >= 220 const std::set supported_strides{2, 3, 4, 8}; +#else + const std::set supported_strides{2, 4, 8}; +#endif const int stride = vecs.size(); const int src_lanes = get_vector_num_elements(vecs[0]->getType()); @@ -1957,7 +1969,11 @@ Value *CodeGen_ARM::shuffle_vectors(Value *a, Value *b, const std::vector & } // Lower slice with stride into llvm.vector.deinterleave intrinsic +#if LLVM_VERSION >= 220 const std::set supported_strides{2, 3, 4, 8}; +#else + const std::set supported_strides{2, 4, 8}; +#endif if (supported_strides.find(slice_stride) != supported_strides.end() && dst_lanes * slice_stride == src_lanes && indices.front() < slice_stride && // Start position cannot be larger than stride @@ -2410,6 +2426,10 @@ string CodeGen_ARM::mcpu_target() const { if (target.bits == 32) { if (target.has_feature(Target::ARMv7s)) { return "swift"; + } else if (target.has_feature(Target::ARMv82a)) { + return "cortex-a55"; + } else if (target.has_feature(Target::ARMv8a)) { + return "cortex-a32"; } else { return "cortex-a9"; } @@ -2436,7 +2456,10 @@ string CodeGen_ARM::mattrs() const { attrs.emplace_back("+fullfp16"); } if (target.has_feature(Target::ARMv8a)) { - attrs.emplace_back("+v8a"); + // The ARM (32-bit) backend calls this feature "v8"; the AArch64 + // backend calls it "v8a". The dotted sub-versions (v8.1a, v8.2a, + // etc.) use the same names in both backends. + attrs.emplace_back(target.bits == 32 ? "+v8" : "+v8a"); } if (target.has_feature(Target::ARMv81a)) { attrs.emplace_back("+v8.1a"); diff --git a/src/CodeGen_LLVM.cpp b/src/CodeGen_LLVM.cpp index 20d0ad5f1ffe..beb42b0fcd60 100644 --- a/src/CodeGen_LLVM.cpp +++ b/src/CodeGen_LLVM.cpp @@ -1515,6 +1515,17 @@ void CodeGen_LLVM::visit(const Reinterpret *op) { llvm::Type *llvm_dst_fixed = get_vector_type(llvm_type_of(dst.element_of()), dst.lanes(), VectorTypeConstraint::Fixed); value = builder->CreateBitOrPointerCast(value, llvm_dst_fixed); value = fixed_to_scalable_vector_type(value); + } else if (isa(value->getType()) && isa(llvm_dst)) { + // Cannot bitcast/ptrtoint directly between fixed and scalable vectors. + // First cast to a fixed vector of the destination element type, then convert to scalable. + llvm::Type *llvm_dst_fixed = get_vector_type(llvm_dst->getScalarType(), dst.lanes(), VectorTypeConstraint::Fixed); + value = builder->CreateBitOrPointerCast(value, llvm_dst_fixed); + value = fixed_to_scalable_vector_type(value); + } else if (isa(value->getType()) && isa(llvm_dst)) { + // Cannot bitcast/ptrtoint directly between scalable and fixed vectors. + // First convert to a fixed vector of the source element type, then cast. + value = scalable_to_fixed_vector_type(value); + value = builder->CreateBitOrPointerCast(value, llvm_dst); } else { // Our `Reinterpret` expr directly maps to LLVM IR bitcast/ptrtoint/inttoptr // instructions with no additional handling required: @@ -4314,10 +4325,12 @@ void CodeGen_LLVM::codegen_vector_reduce(const VectorReduce *op, const Expr &ini const int input_lanes = val.type().lanes(); const int input_bytes = input_lanes * val.type().bytes(); const int vscale = std::max(effective_vscale, 1); + // LLVM added VECREDUCE_MUL/FMUL lowering for SVE in LLVM 22. + const bool mul_ok = LLVM_VERSION >= 220 || effective_vscale == 0; const bool llvm_has_intrinsic = // Must be one of these ops ((op->op == VectorReduce::Add || - op->op == VectorReduce::Mul || + (op->op == VectorReduce::Mul && mul_ok) || op->op == VectorReduce::Min || op->op == VectorReduce::Max) && (use_llvm_vp_intrinsics || @@ -4920,6 +4933,13 @@ Value *CodeGen_LLVM::slice_vector(Value *vec, int start, int size) { // otherwise. llvm::Type *scalar_type = vec->getType()->getScalarType(); + if (scalar_type->isIntegerTy(1)) { + auto *result_type = cast(get_vector_type(scalar_type, size / effective_vscale, VectorTypeConstraint::VScale)); + return handle_bool_as_i8(vec, result_type, [&](Value *v) { + return slice_vector(v, start, size); + }); + } + int intermediate_lanes = std::min(size, vec_lanes - start); llvm::Type *intermediate_type = get_vector_type(scalar_type, intermediate_lanes, VectorTypeConstraint::Fixed); @@ -5190,6 +5210,18 @@ llvm::Value *CodeGen_LLVM::match_vector_type_scalable(llvm::Value *value, llvm:: return match_vector_type_scalable(value, guide->getType()); } +llvm::Value *CodeGen_LLVM::handle_bool_as_i8(llvm::Value *arg, llvm::VectorType *result_i1_type, + const std::function &fn) { + auto *arg_vty = cast(arg->getType()); + bool scalable = isa(arg_vty); + int min_elts = scalable ? cast(arg_vty)->getMinNumElements() : cast(arg_vty)->getNumElements(); + auto constraint = scalable ? VectorTypeConstraint::VScale : VectorTypeConstraint::Fixed; + llvm::Type *arg_i8 = get_vector_type(i8_t, min_elts, constraint); + llvm::Value *widened = builder->CreateZExt(arg, arg_i8); + llvm::Value *result = fn(widened); + return builder->CreateTrunc(result, result_i1_type); +} + llvm::Value *CodeGen_LLVM::convert_fixed_or_scalable_vector_type(llvm::Value *arg, llvm::Type *desired_type) { llvm::Type *arg_type = arg->getType(); @@ -5199,6 +5231,18 @@ llvm::Value *CodeGen_LLVM::convert_fixed_or_scalable_vector_type(llvm::Value *ar } internal_assert(arg_type->getScalarType() == desired_type->getScalarType()); + + if (arg_type->isVectorTy() && desired_type->isVectorTy() && + arg_type->getScalarType()->isIntegerTy(1)) { + bool dst_scalable = isa(desired_type); + int dst_elts = get_vector_num_elements(desired_type); + llvm::Type *dst_i8 = get_vector_type(i8_t, dst_scalable ? dst_elts / effective_vscale : dst_elts, + dst_scalable ? VectorTypeConstraint::VScale : VectorTypeConstraint::Fixed); + return handle_bool_as_i8(arg, cast(desired_type), [&](Value *v) { + return convert_fixed_or_scalable_vector_type(v, dst_i8); + }); + } + if (!arg_type->isVectorTy()) { arg = create_broadcast(arg, 1); arg_type = arg->getType(); @@ -5280,6 +5324,12 @@ llvm::Value *CodeGen_LLVM::fixed_to_scalable_vector_type(llvm::Value *fixed_arg) internal_assert(fixed_type->getElementType() == scalable_type->getElementType()); internal_assert(lanes == (scalable_type->getMinNumElements() * effective_vscale)); + if (fixed_type->getElementType()->isIntegerTy(1)) { + return handle_bool_as_i8(fixed_arg, scalable_type, [&](Value *v) { + return fixed_to_scalable_vector_type(v); + }); + } + // E.g. llvm.vector.insert.nxv2i64.v4i64(, <4 x i64>, i64) const char *type_designator; if (fixed_type->getElementType()->isIntegerTy()) { @@ -5297,7 +5347,7 @@ llvm::Value *CodeGen_LLVM::fixed_to_scalable_vector_type(llvm::Value *fixed_arg) std::vector args; args.push_back(result_vec); - args.push_back(value); + args.push_back(fixed_arg); args.push_back(ConstantInt::get(i64_t, 0)); return simple_call_intrin(intrin, args, scalable_type); @@ -5316,6 +5366,12 @@ llvm::Value *CodeGen_LLVM::scalable_to_fixed_vector_type(llvm::Value *scalable_a internal_assert(fixed_type->getElementType() == scalable_type->getElementType()); internal_assert(fixed_type->getNumElements() == (scalable_type->getMinNumElements() * effective_vscale)); + if (scalable_type->getElementType()->isIntegerTy(1)) { + return handle_bool_as_i8(scalable_arg, fixed_type, [&](Value *v) { + return scalable_to_fixed_vector_type(v); + }); + } + // E.g. <64 x i8> @llvm.vector.extract.v64i8.nxv8i8( %vresult, i64 0) const char *type_designator; if (scalable_type->getElementType()->isIntegerTy()) { diff --git a/src/CodeGen_LLVM.h b/src/CodeGen_LLVM.h index 183463d5fdb6..d54c78a3df06 100644 --- a/src/CodeGen_LLVM.h +++ b/src/CodeGen_LLVM.h @@ -31,8 +31,10 @@ class NamedMDNode; class DataLayout; class BasicBlock; class GlobalVariable; +class VectorType; } // namespace llvm +#include #include #include #include @@ -589,6 +591,14 @@ class CodeGen_LLVM : public IRVisitor { /** Convert an LLVM vscale vector value to the corresponding fixed vector value. */ llvm::Value *scalable_to_fixed_vector_type(llvm::Value *scalable); + /** Work around LLVM's inability to lower vector insert/extract for i1 + * element types (getVectorSubVecPointer computes byte offsets via integer + * division, truncating for i1: 1/8=0). Widens the i1 vector arg to i8, + * applies fn to the widened value, and truncates the result back to + * result_i1_type. */ + llvm::Value *handle_bool_as_i8(llvm::Value *arg, llvm::VectorType *result_i1_type, + const std::function &fn); + /** Get number of vector elements, taking into account scalable vectors. Returns 1 for scalars. */ int get_vector_num_elements(const llvm::Type *t); diff --git a/test/correctness/CMakeLists.txt b/test/correctness/CMakeLists.txt index 77066a8392bd..edb5dcd7b22c 100644 --- a/test/correctness/CMakeLists.txt +++ b/test/correctness/CMakeLists.txt @@ -319,6 +319,8 @@ tests(GROUPS correctness strict_float.cpp strict_float_bounds.cpp strided_load.cpp + sve_codegen_predicated.cpp + sve_codegen_reinterpret.cpp target.cpp target_query.cpp tiled_matmul.cpp diff --git a/test/correctness/sve_codegen_predicated.cpp b/test/correctness/sve_codegen_predicated.cpp new file mode 100644 index 000000000000..8a5ae117387c --- /dev/null +++ b/test/correctness/sve_codegen_predicated.cpp @@ -0,0 +1,26 @@ +#include "Halide.h" +#include "halide_test_dirs.h" + +#include +#include + +using namespace Halide; + +int main(int argc, char **argv) { + const Target sve2("arm-64-linux-arm_dot_prod-arm_fp16-sve2-vector_bits_128"); + std::string tmpdir = Internal::get_test_tmp_dir(); + + // Dense stores with non-natural lane counts force predicate tail masking. + // The predicate is a boolean (i1) vector that must be converted from fixed + // to scalable, which previously triggered an LLVM assertion in + // getVectorSubVecPointer ("Converting bits to bytes lost precision") + // because the byte offset computation truncates for i1 (1/8=0). + Func f("dense_pred_store"); + Var x("x"); + f(x) = cast(x * 2); + f.vectorize(x, 24); // 24 is not a multiple of 16 (natural for uint8 @ 128-bit SVE) + f.compile_to_object(tmpdir + "sve_dense_pred_store.o", {}, "dense_pred_store", sve2); + + printf("Success!\n"); + return 0; +} diff --git a/test/correctness/sve_codegen_reinterpret.cpp b/test/correctness/sve_codegen_reinterpret.cpp new file mode 100644 index 000000000000..049423d9d9b0 --- /dev/null +++ b/test/correctness/sve_codegen_reinterpret.cpp @@ -0,0 +1,32 @@ +#include "Halide.h" +#include "halide_test_dirs.h" + +#include +#include + +using namespace Halide; + +int main(int argc, char **argv) { + const Target sve2("arm-64-linux-arm_dot_prod-arm_fp16-sve2-vector_bits_128"); + std::string tmpdir = Internal::get_test_tmp_dir(); + + // Reinterpret between Handle (pointer) and integer types with vectorization. + // Pointers produce fixed vectors (<4 x ptr>) while the integer destination + // may be scalable (), requiring conversion before the + // cast. Previously triggered ConstantExpr::getCast ("Invalid constantexpr + // cast!") because CreateBitOrPointerCast cannot operate across fixed and + // scalable vector types, and fixed_to_scalable_vector_type passed the wrong + // value to the llvm.vector.insert intrinsic. + std::string msg = "hello!\n"; + Func f("handle_cast"), g("copy"), h("out"); + Var x("x"); + f(x) = cast(msg); + f.compute_root().vectorize(x, 4); + g(x) = f(x); + g.compute_root(); + h(x) = g(x); + h.compile_to_object(tmpdir + "sve_handle_cast.o", {}, "handle_cast", sve2); + + printf("Success!\n"); + return 0; +} From c41d194055e410f1a55b2ac073857821441dcd60 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 05:31:11 -0500 Subject: [PATCH 5/6] tests: update ARM/SVE2 coverage and LLVM-version-specific skips --- cmake/HalideTestHelpers.cmake | 5 ++++- .../autoschedulers/mullapudi2016/histogram.cpp | 9 +++++++++ .../mullapudi2016/max_filter.cpp | 10 ++++++++++ test/correctness/align_bounds.cpp | 10 ++++++++++ test/correctness/bound_small_allocations.cpp | 10 ++++++++++ test/correctness/fit_function.cpp | 10 ++++++++++ test/correctness/float16_t.cpp | 9 +++++++++ test/correctness/interleave_rgb.cpp | 10 ++++++++++ test/correctness/logical.cpp | 9 +++++++++ test/correctness/mul_div_mod.cpp | 12 ++++++++++++ test/correctness/predicated_store_load.cpp | 10 ++++++++++ test/correctness/stage_strided_loads.cpp | 10 ++++++++++ test/correctness/truncated_pyramid.cpp | 10 ++++++++++ test/correctness/vector_reductions.cpp | 18 ++++++++++++++++++ test/correctness/vectorize_nested.cpp | 10 ++++++++++ test/performance/block_transpose.cpp | 8 ++++++++ test/performance/const_division.cpp | 10 ++++++++++ test/performance/fast_inverse.cpp | 11 +++++++++++ test/performance/nested_vectorization_gemm.cpp | 8 ++++++++ tutorial/CMakeLists.txt | 7 ++++++- 20 files changed, 194 insertions(+), 2 deletions(-) diff --git a/cmake/HalideTestHelpers.cmake b/cmake/HalideTestHelpers.cmake index 3e5c64f47f28..6f268aa0abc3 100644 --- a/cmake/HalideTestHelpers.cmake +++ b/cmake/HalideTestHelpers.cmake @@ -69,9 +69,12 @@ function(add_halide_test TARGET) # # target_link_libraries("${TARGET}" PRIVATE Halide::TerminateHandler) + # Resolve the "cmake" meta-target + string(REGEX REPLACE "^cmake" "${Halide_CMAKE_TARGET}" _resolved_target "${Halide_TARGET}") + set_tests_properties(${TARGET} PROPERTIES LABELS "${args_GROUPS}" - ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" + ENVIRONMENT "HL_TARGET=${_resolved_target};HL_JIT_TARGET=${_resolved_target}" SKIP_REGULAR_EXPRESSION "\\[SKIP\\]" WILL_FAIL ${args_EXPECT_FAILURE}) diff --git a/test/autoschedulers/mullapudi2016/histogram.cpp b/test/autoschedulers/mullapudi2016/histogram.cpp index 8d7060f3090c..0e5e55ac8492 100644 --- a/test/autoschedulers/mullapudi2016/histogram.cpp +++ b/test/autoschedulers/mullapudi2016/histogram.cpp @@ -126,6 +126,15 @@ int main(int argc, char **argv) { return 0; } + // LLVM 20 generates poor SVE2 code for the histogram autoscheduler test, + // causing it to exceed the performance threshold. Fixed in LLVM 21+. + if (Internal::get_llvm_version() < 210 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d generates suboptimal SVE2 code for this test.\n", + Internal::get_llvm_version()); + return 0; + } + if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; diff --git a/test/autoschedulers/mullapudi2016/max_filter.cpp b/test/autoschedulers/mullapudi2016/max_filter.cpp index c745c277acf6..0731e5960e68 100644 --- a/test/autoschedulers/mullapudi2016/max_filter.cpp +++ b/test/autoschedulers/mullapudi2016/max_filter.cpp @@ -128,6 +128,16 @@ int main(int argc, char **argv) { return 0; } + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; diff --git a/test/correctness/align_bounds.cpp b/test/correctness/align_bounds.cpp index 89a1000df3eb..f8a14424d240 100644 --- a/test/correctness/align_bounds.cpp +++ b/test/correctness/align_bounds.cpp @@ -23,6 +23,16 @@ int my_trace(JITUserContext *user_context, const halide_trace_event_t *e) { } int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + // Force the bounds of an intermediate pipeline stage to be even to remove a select { Func f, g, h; diff --git a/test/correctness/bound_small_allocations.cpp b/test/correctness/bound_small_allocations.cpp index 480750d08c90..7216360c8d1d 100644 --- a/test/correctness/bound_small_allocations.cpp +++ b/test/correctness/bound_small_allocations.cpp @@ -10,6 +10,16 @@ Expr calc(Expr a) { } int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + Var x, y; Func f, g, h; diff --git a/test/correctness/fit_function.cpp b/test/correctness/fit_function.cpp index 7b6abc4fa5cb..e9c38df324ce 100644 --- a/test/correctness/fit_function.cpp +++ b/test/correctness/fit_function.cpp @@ -7,6 +7,16 @@ using namespace Halide; int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + // Fit an odd polynomial to sin from 0 to pi/2 using Halide's derivative support ImageParam coeffs(Float(64), 1); Param learning_rate; diff --git a/test/correctness/float16_t.cpp b/test/correctness/float16_t.cpp index 120682cd86d8..8694c8c969f5 100644 --- a/test/correctness/float16_t.cpp +++ b/test/correctness/float16_t.cpp @@ -465,6 +465,15 @@ int run_test() { } // namespace int main(int argc, char **argv) { + // TODO(https://github.com/halide/Halide/issues/8985): LLVM's JIT emits + // misaligned jump tables on arm-32 with arm_fp16, causing SIGILL. + Target target = get_jit_target_from_environment(); + if (target.arch == Target::ARM && target.bits == 32 && + target.has_feature(Target::ARMFp16)) { + printf("[SKIP] arm-32 JIT with arm_fp16 hits LLVM jump table misalignment bug.\n"); + return 0; + } + MyCustomErrorReporter reporter; set_custom_compile_time_error_reporter(&reporter); diff --git a/test/correctness/interleave_rgb.cpp b/test/correctness/interleave_rgb.cpp index 3a679a239035..092b54eb569a 100644 --- a/test/correctness/interleave_rgb.cpp +++ b/test/correctness/interleave_rgb.cpp @@ -103,6 +103,16 @@ bool test_deinterleave(int x_stride) { } int main(int argc, char **argv) { + // LLVM 20 is missing llvm.vector.deinterleave4 for SVE and LLVM 21 + // asserts (getFixedValue on scalable TypeSize). Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d has known SVE backend bugs for this test.\n", + Internal::get_llvm_version()); + return 0; + } + for (int x_stride : {3, 4}) { if (!test_interleave(x_stride)) return 1; if (!test_interleave(x_stride)) return 1; diff --git a/test/correctness/logical.cpp b/test/correctness/logical.cpp index 1bd134bc37f4..c94b01b534f9 100644 --- a/test/correctness/logical.cpp +++ b/test/correctness/logical.cpp @@ -12,6 +12,15 @@ Expr u16(Expr a) { } int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } Buffer input(128, 64); diff --git a/test/correctness/mul_div_mod.cpp b/test/correctness/mul_div_mod.cpp index b68697008572..6c5561731e10 100644 --- a/test/correctness/mul_div_mod.cpp +++ b/test/correctness/mul_div_mod.cpp @@ -541,6 +541,18 @@ void add_test_div_mod(int vector_width, ScheduleVariant scheduling, Target targe int main(int argc, char **argv) { Target target = get_jit_target_from_environment(); + // LLVM's performSignExtendInRegCombine in the AArch64 backend asserts + // when it encounters SIGN_EXTEND_INREG from i1 on SVE vectors. Halide's + // division lowering produces select(cond, -1, 0) which LLVM canonicalizes + // to sext i1, triggering the assertion. Fixed on LLVM main by: + // https://github.com/llvm/llvm-project/commit/ffb7a9f0ec80 (PR #177976) + if (target.has_feature(Target::SVE2) && + Internal::get_llvm_version() < 230) { + printf("[SKIP] LLVM %d has a known SVE bug in performSignExtendInRegCombine (PR #177976).\n", + Internal::get_llvm_version()); + return 0; + } + ScheduleVariant scheduling = CPU; if (target.has_gpu_feature()) { scheduling = TiledGPU; diff --git a/test/correctness/predicated_store_load.cpp b/test/correctness/predicated_store_load.cpp index 3e21e0f9a3d7..3a51b3440d87 100644 --- a/test/correctness/predicated_store_load.cpp +++ b/test/correctness/predicated_store_load.cpp @@ -487,6 +487,16 @@ int predicated_atomic_store_test(const Target &t) { int main(int argc, char **argv) { Target t = get_jit_target_from_environment(); + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + t.has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + printf("Running vectorized dense load test\n"); if (predicated_tail_test(t) != 0) { return 1; diff --git a/test/correctness/stage_strided_loads.cpp b/test/correctness/stage_strided_loads.cpp index 757f71acd487..8a82f5ca33d1 100644 --- a/test/correctness/stage_strided_loads.cpp +++ b/test/correctness/stage_strided_loads.cpp @@ -56,6 +56,16 @@ class CheckForStridedLoads : public IRMutator { } checker; int main(int argc, char **argv) { + // LLVM 20 is missing llvm.vector.deinterleave4 for SVE and LLVM 21 + // asserts (getFixedValue on scalable TypeSize). Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d has known SVE backend bugs for this test.\n", + Internal::get_llvm_version()); + return 0; + } + ImageParam buf(Float(32), 1, "buf"); { diff --git a/test/correctness/truncated_pyramid.cpp b/test/correctness/truncated_pyramid.cpp index 081c46b4d1ea..2bc53aca5aae 100644 --- a/test/correctness/truncated_pyramid.cpp +++ b/test/correctness/truncated_pyramid.cpp @@ -6,6 +6,16 @@ using std::pair; using std::vector; int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + Func input; Var x, y; input(x, y) = random_float(); diff --git a/test/correctness/vector_reductions.cpp b/test/correctness/vector_reductions.cpp index 9db9475e7fca..e2fa21278fb3 100644 --- a/test/correctness/vector_reductions.cpp +++ b/test/correctness/vector_reductions.cpp @@ -160,6 +160,24 @@ void add_tasks(const Target &target, std::vector &tasks) { int main(int argc, char **argv) { Target target = get_jit_target_from_environment(); + // LLVM 20 hangs and LLVM 21 asserts (getFixedValue on scalable TypeSize) + // in the AArch64 backend for SVE. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() < 220 && + target.has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d has known SVE backend bugs for this test.\n", + Internal::get_llvm_version()); + return 0; + } + + // TODO(https://github.com/halide/Halide/issues/8985): LLVM's JIT emits + // misaligned jump tables on arm-32 with arm_fp16, causing SIGILL. + if (target.arch == Target::ARM && target.bits == 32 && + target.has_feature(Target::ARMFp16)) { + printf("[SKIP] arm-32 JIT with arm_fp16 hits LLVM jump table misalignment bug.\n"); + return 0; + } + std::vector tasks; add_tasks(target, tasks); diff --git a/test/correctness/vectorize_nested.cpp b/test/correctness/vectorize_nested.cpp index e9800ef8f034..d7d4336bb03f 100644 --- a/test/correctness/vectorize_nested.cpp +++ b/test/correctness/vectorize_nested.cpp @@ -277,6 +277,16 @@ int vectorize_inner_of_scalarization() { } int main(int argc, char **argv) { + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + get_jit_target_from_environment().has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + if (vectorize_2d_round_up()) { printf("vectorize_2d_round_up failed\n"); return 1; diff --git a/test/performance/block_transpose.cpp b/test/performance/block_transpose.cpp index 740908358443..230296161db0 100644 --- a/test/performance/block_transpose.cpp +++ b/test/performance/block_transpose.cpp @@ -118,6 +118,14 @@ int main(int argc, char **argv) { return 0; } + // LLVM 20 is missing llvm.vector.interleave4/deinterleave4 for SVE. + if (Internal::get_llvm_version() < 210 && + target.has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d is missing SVE vector interleave/deinterleave intrinsics.\n", + Internal::get_llvm_version()); + return 0; + } + test_transpose(scalar_trans); test_transpose_wrap(scalar_trans); test_transpose(vec_y_trans); diff --git a/test/performance/const_division.cpp b/test/performance/const_division.cpp index a84e70d6393d..b036931feb2a 100644 --- a/test/performance/const_division.cpp +++ b/test/performance/const_division.cpp @@ -125,6 +125,16 @@ int main(int argc, char **argv) { return 0; } + // LLVM 21 calls getFixedValue() on scalable TypeSize objects in the + // AArch64 backend, triggering an assertion. Fixed in LLVM 22 by: + // https://github.com/llvm/llvm-project/commit/d1500d12be60 (PR #169764) + if (Internal::get_llvm_version() >= 210 && + Internal::get_llvm_version() < 220 && + target.has_feature(Target::SVE2)) { + printf("[SKIP] LLVM 21 has known getFixedValue() assertions on SVE scalable types.\n"); + return 0; + } + int seed = argc > 1 ? atoi(argv[1]) : time(nullptr); rng.seed(seed); std::cout << "const_division test seed: " << seed << std::endl; diff --git a/test/performance/fast_inverse.cpp b/test/performance/fast_inverse.cpp index cfd9b7c796c2..81170f8457d2 100644 --- a/test/performance/fast_inverse.cpp +++ b/test/performance/fast_inverse.cpp @@ -20,6 +20,17 @@ int main(int argc, char **argv) { return 0; } + // SVE2-capable cores (e.g. Neoverse V1/V2, Ampere Altra) have fast + // enough fdiv that the frecpe+frecps approximation used by fast_inverse + // is not reliably faster. Additionally, Halide generates wide scalable + // vectors (e.g. ) that LLVM (at time of writing) + // cannot optimize through llvm.vector.insert/extract, causing register + // spilling and overhead that does not occur with fixed NEON vectors. + if (target.has_feature(Target::SVE2)) { + printf("[SKIP] SVE2-capable cores typically have fast division; fast_inverse is not expected to win.\n"); + return 0; + } + Func slow, fast; Var x; Param p(1.0f); diff --git a/test/performance/nested_vectorization_gemm.cpp b/test/performance/nested_vectorization_gemm.cpp index 660d3d7bbdf8..aa3be997f49e 100644 --- a/test/performance/nested_vectorization_gemm.cpp +++ b/test/performance/nested_vectorization_gemm.cpp @@ -11,6 +11,14 @@ int main(int argc, char **argv) { return 0; } + // LLVM 20 is missing llvm.vector.interleave4/deinterleave4 for SVE. + if (Internal::get_llvm_version() < 210 && + target.has_feature(Target::SVE2)) { + printf("[SKIP] LLVM %d is missing SVE vector interleave/deinterleave intrinsics.\n", + Internal::get_llvm_version()); + return 0; + } + // 8-bit mat-mul into 32-bit accumulator { diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 6f8c624a4617..373f7730c358 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -13,12 +13,17 @@ function(add_tutorial source_file) add_executable("${name}" "${source_file}") target_link_libraries("${name}" PRIVATE Halide::Halide Halide::Tools) + if (TARGET Halide::TerminateHandler) + target_link_libraries("${name}" PRIVATE Halide::TerminateHandler) + endif () target_compile_options(${name} PRIVATE "$<$:-Wno-unused-but-set-variable>") + string(REGEX REPLACE "^cmake" "${Halide_CMAKE_TARGET}" _resolved_target "${Halide_TARGET}") + add_test(NAME tutorial_${name} COMMAND ${name}) set_tests_properties(tutorial_${name} PROPERTIES - ENVIRONMENT "HL_TARGET=${Halide_TARGET};HL_JIT_TARGET=${Halide_TARGET}" + ENVIRONMENT "HL_TARGET=${_resolved_target};HL_JIT_TARGET=${_resolved_target}" LABELS "tutorial;${args_GROUPS}") if (args_WITH_IMAGE_IO) From a570c12a364222f4601e20d512c4ed6aa0eb34f8 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 5 Mar 2026 10:04:13 -0500 Subject: [PATCH 6/6] tests: run autoschedulers_cpu serially --- cmake/HalideTestHelpers.cmake | 16 +++++++++++----- src/autoschedulers/adams2019/CMakeLists.txt | 9 +++++++-- src/autoschedulers/common/CMakeLists.txt | 9 +++++++-- test/autoschedulers/adams2019/CMakeLists.txt | 8 +++++--- test/autoschedulers/li2018/CMakeLists.txt | 15 +++++++++------ 5 files changed, 39 insertions(+), 18 deletions(-) diff --git a/cmake/HalideTestHelpers.cmake b/cmake/HalideTestHelpers.cmake index 6f268aa0abc3..d1d01748dcff 100644 --- a/cmake/HalideTestHelpers.cmake +++ b/cmake/HalideTestHelpers.cmake @@ -72,11 +72,17 @@ function(add_halide_test TARGET) # Resolve the "cmake" meta-target string(REGEX REPLACE "^cmake" "${Halide_CMAKE_TARGET}" _resolved_target "${Halide_TARGET}") - set_tests_properties(${TARGET} PROPERTIES - LABELS "${args_GROUPS}" - ENVIRONMENT "HL_TARGET=${_resolved_target};HL_JIT_TARGET=${_resolved_target}" - SKIP_REGULAR_EXPRESSION "\\[SKIP\\]" - WILL_FAIL ${args_EXPECT_FAILURE}) + set_tests_properties( + ${TARGET} + PROPERTIES + LABELS "${args_GROUPS}" + ENVIRONMENT "HL_TARGET=${_resolved_target};HL_JIT_TARGET=${_resolved_target}" + SKIP_REGULAR_EXPRESSION "\\[SKIP\\]" + WILL_FAIL ${args_EXPECT_FAILURE} + ) + if ("autoschedulers_cpu" IN_LIST args_GROUPS) + set_tests_properties(${TARGET} PROPERTIES RUN_SERIAL TRUE) + endif () if (NOT args_USE_EXIT_CODE_ONLY) set_tests_properties(${TARGET} PROPERTIES diff --git a/src/autoschedulers/adams2019/CMakeLists.txt b/src/autoschedulers/adams2019/CMakeLists.txt index 0d4ae2a8564f..23b53abf5815 100644 --- a/src/autoschedulers/adams2019/CMakeLists.txt +++ b/src/autoschedulers/adams2019/CMakeLists.txt @@ -82,5 +82,10 @@ if (WITH_TESTS) target_link_libraries(adams2019_test_function_dag PRIVATE Halide::Plugin) add_test(NAME adams2019_test_function_dag COMMAND adams2019_test_function_dag) - set_tests_properties(adams2019_test_function_dag PROPERTIES LABELS "adams2019;autoschedulers_cpu") -endif() + set_tests_properties( + adams2019_test_function_dag + PROPERTIES + LABELS "adams2019;autoschedulers_cpu" + RUN_SERIAL TRUE + ) +endif () diff --git a/src/autoschedulers/common/CMakeLists.txt b/src/autoschedulers/common/CMakeLists.txt index 13c8860cf92b..6c1458274b30 100644 --- a/src/autoschedulers/common/CMakeLists.txt +++ b/src/autoschedulers/common/CMakeLists.txt @@ -39,5 +39,10 @@ endif () if (WITH_TESTS) add_executable(test_perfect_hash_map test_perfect_hash_map.cpp) add_test(NAME test_perfect_hash_map COMMAND test_perfect_hash_map) - set_tests_properties(test_perfect_hash_map PROPERTIES LABELS "autoschedulers_cpu") -endif() + set_tests_properties( + test_perfect_hash_map + PROPERTIES + LABELS "autoschedulers_cpu" + RUN_SERIAL TRUE + ) +endif () diff --git a/test/autoschedulers/adams2019/CMakeLists.txt b/test/autoschedulers/adams2019/CMakeLists.txt index 50fb103a3f28..79f27d33f1af 100644 --- a/test/autoschedulers/adams2019/CMakeLists.txt +++ b/test/autoschedulers/adams2019/CMakeLists.txt @@ -10,11 +10,11 @@ function(add_adams2019_test NAME) if (NOT ARGS_COMMAND) set(ARGS_COMMAND ${NAME}) - endif() + endif () if (NOT ARGS_LABELS) set(ARGS_LABELS "") - endif() + endif () list(APPEND ARGS_LABELS adams2019) list(APPEND ARGS_LABELS autoschedulers_cpu) @@ -24,6 +24,9 @@ function(add_adams2019_test NAME) PROPERTIES LABELS "${ARGS_LABELS}" ENVIRONMENT "${ENVIRONMENT}") + if ("autoschedulers_cpu" IN_LIST ARGS_LABELS) + set_tests_properties(${NAME} PROPERTIES RUN_SERIAL TRUE) + endif () endfunction() @@ -80,4 +83,3 @@ add_adams2019_test(adams2019_test_apps_autoscheduler COMMAND adams2019_test_apps_autoscheduler $ $/baseline.weights LABELS multithreaded ENVIRONMENT "LD_LIBRARY_PATH=$:$ENV{LD_LIBRARY_PATH}") - diff --git a/test/autoschedulers/li2018/CMakeLists.txt b/test/autoschedulers/li2018/CMakeLists.txt index f4c8c542a922..1b9044a2558a 100644 --- a/test/autoschedulers/li2018/CMakeLists.txt +++ b/test/autoschedulers/li2018/CMakeLists.txt @@ -25,7 +25,7 @@ add_dependencies(li2018_test Halide::Li2018) if (WITH_PYTHON_BINDINGS) if (Halide_TARGET MATCHES "webgpu") message(WARNING "li2018_gradient_autoscheduler_test_py is not supported with WebGPU.") - else() + else () find_package(Python 3.10 REQUIRED COMPONENTS Interpreter Development.Module) add_test( @@ -36,9 +36,12 @@ if (WITH_PYTHON_BINDINGS) set(PYTHONPATH "$/..>") list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") - set_tests_properties(li2018_gradient_autoscheduler_test_py PROPERTIES - DEPENDS li2018_test - LABELS "li2018;autoschedulers_cpu;autoschedulers_gpu" - ENVIRONMENT_MODIFICATION "${PYTHONPATH}") - endif() + set_tests_properties( + li2018_gradient_autoscheduler_test_py PROPERTIES + DEPENDS li2018_test + LABELS "li2018;autoschedulers_cpu;autoschedulers_gpu" + RUN_SERIAL TRUE + ENVIRONMENT_MODIFICATION "${PYTHONPATH}" + ) + endif () endif ()