From e789552eb249e9bc6feea7e8ad5ccbd67d5ea746 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 9 Jul 2026 11:47:28 +0200 Subject: [PATCH 1/3] feat(ci): build bindings for ARM linux --- .github/workflows/osrm-backend.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index d5fe84b6f6..02a7871862 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -396,7 +396,8 @@ jobs: CXXCOMPILER: clang++-18 NODE_PACKAGE_TESTS_ONLY: ON - - name: linux-arm64-release + - name: linux-arm64-release-bindings + build_bindings: true continue-on-error: false node: 24 runs-on: ubuntu-24.04-arm From 4ef1edc2e9052e3713c8099c3cb902ee364444db Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 9 Jul 2026 21:33:38 +0200 Subject: [PATCH 2/3] fix(bindings): use arch-appropriate VCPKG_TARGET_TRIPLET for ARM64 manylinux The hard-coded -DVCPKG_TARGET_TRIPLET=x64-linux-release in CMAKE_ARGS forced vcpkg to look for an x86_64 compiler inside the aarch64 manylinux container, where none exists. Replace it with per-architecture overrides that set VCPKG_TARGET_TRIPLET as an environment variable (x64-linux-release for x86_64, arm64-linux-release for aarch64), which the vcpkg CMake toolchain reads. Also switch the linux-arm64-release-bindings runner from ubuntu-24.04-arm to ubuntu-26.04-arm to match the other Linux runners' baseline. --- .github/workflows/osrm-backend.yml | 2 +- pyproject.toml | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 02a7871862..f972911e15 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -400,7 +400,7 @@ jobs: build_bindings: true continue-on-error: false node: 24 - runs-on: ubuntu-24.04-arm + runs-on: ubuntu-26.04-arm BUILD_TYPE: Release CCOMPILER: clang-18 CXXCOMPILER: clang++-18 diff --git a/pyproject.toml b/pyproject.toml index 15fe07ecff..fbdf464752 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,14 +85,26 @@ test-command = [ # The `-release` triplet matches what the image's prewarm used; vcpkg's ABI # hash includes the triplet name, so x64-linux ≠ x64-linux-release in the # cache. +# VCPKG_TARGET_TRIPLET is set per-architecture via [[tool.cibuildwheel.overrides]] +# below so that the correct triplet (x64-linux-release vs arm64-linux-release) +# reaches the aarch64 manylinux container. environment = """\ LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH} \ CCACHE_DIR=/ccache \ -CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux-release"\ +CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"\ """ + before-build = "ccache -s && ccache -M 500M" repair-wheel-command = "auditwheel repair -w {dest_dir} {wheel}" +[[tool.cibuildwheel.overrides]] +select = "*-manylinux_x86_64" +environment = "VCPKG_TARGET_TRIPLET=x64-linux-release" + +[[tool.cibuildwheel.overrides]] +select = "*-manylinux_aarch64" +environment = "VCPKG_TARGET_TRIPLET=arm64-linux-release" + [tool.cibuildwheel.macos] # Build deps come from vcpkg (same pattern as Windows). VCPKG_ROOT is # exported on the runner by lukka/run-vcpkg in the workflow and inherited From 45c0f66b2d8bebf8d6d57552bf3f2b8384ac6caa Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 9 Jul 2026 21:49:49 +0200 Subject: [PATCH 3/3] fix(bindings): override VCPKG_TARGET_TRIPLET for aarch64 manylinux The base environment hard-codes x64-linux-release which forces vcpkg to look for an x86_64 compiler inside the aarch64 manylinux container, where none exists. Append a second CMAKE_ARGS via a cibuildwheel override for *-manylinux_aarch64 that shadows the triplet with arm64-linux-release. The x86_64 build is unchanged since the override selector does not match. --- pyproject.toml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fbdf464752..c0258c1261 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,25 +85,21 @@ test-command = [ # The `-release` triplet matches what the image's prewarm used; vcpkg's ABI # hash includes the triplet name, so x64-linux ≠ x64-linux-release in the # cache. -# VCPKG_TARGET_TRIPLET is set per-architecture via [[tool.cibuildwheel.overrides]] -# below so that the correct triplet (x64-linux-release vs arm64-linux-release) -# reaches the aarch64 manylinux container. environment = """\ LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH} \ CCACHE_DIR=/ccache \ -CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"\ +CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-linux-release"\ """ before-build = "ccache -s && ccache -M 500M" repair-wheel-command = "auditwheel repair -w {dest_dir} {wheel}" -[[tool.cibuildwheel.overrides]] -select = "*-manylinux_x86_64" -environment = "VCPKG_TARGET_TRIPLET=x64-linux-release" - +# Override the triplet for aarch64 — the base environment hard-codes +# x64-linux-release which only works on x86_64. The override appends a +# second CMAKE_ARGS whose value shadows the base one. [[tool.cibuildwheel.overrides]] select = "*-manylinux_aarch64" -environment = "VCPKG_TARGET_TRIPLET=arm64-linux-release" +environment = 'CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=arm64-linux-release"' [tool.cibuildwheel.macos] # Build deps come from vcpkg (same pattern as Windows). VCPKG_ROOT is