Skip to content

Ship a linkable shared runtime and make the Python bindings use it - #21514

Open
shoumikhin wants to merge 13 commits into
mainfrom
gh/shoumikhin/78/head
Open

Ship a linkable shared runtime and make the Python bindings use it#21514
shoumikhin wants to merge 13 commits into
mainfrom
gh/shoumikhin/78/head

Conversation

@shoumikhin

Copy link
Copy Markdown
Contributor

Today pip install executorch gives you the Python half of ExecuTorch but
nothing a C++ application can link. The wheel installs a header subset and an
executorch-config.cmake, but that config only locates the Python extension so
custom-op builds can compile against it: it defines no runtime library and no
CMake targets. Writing a small C++ program that loads and runs a .pte means
cloning the repo, syncing submodules, and building from source.

This change ships the runtime as a real library and exposes it through
find_package, so a standalone application needs nothing but the wheel:

find_package(executorch REQUIRED)
target_link_libraries(my_app PRIVATE executorch::runtime)

executorch::runtime is an imported target whose location is resolved relative
to the config file itself, so the package stays relocatable and no path from the
machine that built the wheel is baked into it. A consumer picks up the wheel's
library directory in its RUNPATH, plus $ORIGIN-relative entries so an
application deployed next to a copy of the runtime keeps working without
LD_LIBRARY_PATH.

The Python extensions have to move to the shared runtime in the same change.
Backends register themselves into a single process-wide table owned by the
runtime, and that table is only process-wide if exactly one loaded library
defines it. The Python extension statically embeds the runtime today, so adding a
shared library beside it would give a process two independent registries, and a
backend could register into the one nobody reads. The extensions therefore link
the shared runtime instead of whole-archiving the static libraries, leaving
exactly one registry owner for both the Python and C++ paths.

Getting that right needs two linker details. The shared runtime is named through
a link option rather than an ordinary dependency, because CMake orders link
libraries so a static archive precedes what it depends on, which would let the
archive satisfy the runtime symbols first. It is also wrapped in
--no-as-needed, because a shared library with no already-referenced symbol at
the point it appears on the link line can be dropped, and a later static archive
would then supply the registry after all.

Registration still happens through static initializers exactly as before. No new
plugin or loader ABI is introduced.

The shared runtime is Linux-only for the wheel. macOS C++ consumers are served by
the existing Swift package distribution, and the runtime has no export
annotations for a Windows DLL. Every other build keeps linking the static
libraries, because the new behavior is gated on the existing
EXECUTORCH_BUILD_SHARED option, so iOS, Android, and embedded builds are
unaffected.

Test plan:

The wheel smoke test now covers this on Linux, so it is checked in CI rather than
only by hand. It asserts that exactly one shipped library defines the backend
registry, builds a standalone C++ program that only calls
find_package(executorch) and links executorch::runtime, runs it without
LD_LIBRARY_PATH, and checks the resulting binary depends on the shipped runtime
with a relocatable RUNPATH. The check was confirmed to fail when a second
registry definition is introduced deliberately. The wheel workflows now also run
when any CMakeLists.txt or anything under tools/cmake changes, since those
files decide what the wheel contains.

Built the wheel from a clean checkout on Linux x86_64 and on Linux aarch64, then
verified each against a fresh virtual environment with a normal
dependency-resolving install:

  • nm -DC across every shipped shared object shows exactly one definition of the
    registry entry points; the Python extensions import them rather than defining
    their own.
  • A C++ program whose CMake only calls find_package(executorch) and links
    executorch::runtime compiles against the installed wheel with no source
    checkout, then loads a .pte and lists its methods.
  • readelf -d on that program lists the versioned runtime in DT_NEEDED with
    $ORIGIN-relative RUNPATH entries, and it runs without LD_LIBRARY_PATH.
  • A C++ binary that links only executorch::runtime and loads the Python
    extension sees the backends that extension registered, which is the
    one-registry property stated above.
  • import executorch, the registered backend list, and .pte execution through
    the Python bindings are unchanged, with outputs matching eager PyTorch.
  • With EXECUTORCH_BUILD_SHARED off, the Python extension still builds
    self-contained and no shared runtime is produced, so the previous behavior is
    intact.
  • Configured with CMake 3.28 as well as 3.31, since the project supports 3.24 and
    up and the two differ in how strictly they treat link features.

[ghstack-poisoned]
@shoumikhin
shoumikhin requested a review from larryliu0820 as a code owner July 31, 2026 06:23
Copilot AI review requested due to automatic review settings July 31, 2026 06:23
@shoumikhin
shoumikhin requested a review from kirklandsign as a code owner July 31, 2026 06:23
@pytorch-bot

pytorch-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/21514

Note: Links to docs will display an error until the docs builds have been completed.

❌ 119 New Failures, 10 Pending, 2 Unrelated Failures, 51 Unclassified Failures

As of commit c076daa with merge base d632341 (image):

NEW FAILURES - The following jobs have failed:

  • Build Presets / windows (pybind) / build (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D2:4A772:1EF9F1:6D6471:6A6D9B01 and timestamp 2026-08-01 07:06:41 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Build Presets / windows (windows) / build (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2CC:1D5E97:FB1EA:38105D:6A6D9AE7 and timestamp 2026-08-01 07:06:15 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Cadence Build & Test / cpu-build / build (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CB76:28982C:22ADFF:7A2787:6A6D9B6A and timestamp 2026-08-01 07:08:27 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • nightly / link-check / lint-urls (gh)
  • nightly / link-check / lint-xrefs (gh)
  • periodic / test-models-linux (cmake, ds_cnn, portable, linux.2xlarge, 90) / linux-job (gh)
    RuntimeError: Command docker exec -t 0eb0e815da7764463c563cf0d985f9401c624d09979ec7702deba46a0a25c1cb /exec failed with exit code 134
  • periodic / test-models-linux (cmake, yolo26, portable, linux.2xlarge, 90) / linux-job (gh)
    RuntimeError: Command docker exec -t c40344eef3ff9bfaca8307fa77b1bf0c6e3e8d38201be553f8d2c2d44753f806 /exec failed with exit code 1
  • pull / test-arm-backend-no-driver (test_pytest_models_tosa) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 989C:3AF5D3:190DD7:58F599:6A6D9A3C and timestamp 2026-08-01 07:03:24 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-arm-backend-no-driver (test_pytest_ops_no_target) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D81C:1C28D4:C7334F:2B8611E:6A6D9A35 and timestamp 2026-08-01 07:03:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-arm-backend-no-driver (test_pytest_ops_tosa) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID A572:165F90:DBEFE:318509:6A6D9A44 and timestamp 2026-08-01 07:03:32 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-arm-backend-no-driver (test_run_tosa) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E998:4CCDE:C310D2:2AFE8D6:6A6D9A40 and timestamp 2026-08-01 07:03:28 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-arm-backend-public-api-backward-compatibility / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D214:2242D0:E369E:3288FE:6A6D9A7C and timestamp 2026-08-01 07:04:28 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-arm-cortex-m-size-test (zephyr-preset) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-binary-size-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DA1C:FDA89:CC345:2D9752:6A6D9A3C and timestamp 2026-08-01 07:03:24 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-binary-size-linux-gcc / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID EAF4:F43DF:CCC72:2D849B:6A6D9A43 and timestamp 2026-08-01 07:03:31 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-build-wasm-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8AF0:10DE55:BE4755:29B573E:6A6D9A2A and timestamp 2026-08-01 07:03:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-eval_llama-wikitext-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E61A:127D59:1A74EF:5DE446:6A6D9A96 and timestamp 2026-08-01 07:04:54 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-llama_runner_eager-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 87EC:6FC35:1C1FAA:638CB8:6A6D9A66 and timestamp 2026-08-01 07:04:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-llama-runner-qnn-linux (fp32, qnn_8a8w, qnn) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D504:3E30BF:C04367:2A5F594:6A6D9A48 and timestamp 2026-08-01 07:03:36 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-lora-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E78E:FDA89:CB0AA:2D546E:6A6D9A37 and timestamp 2026-08-01 07:03:19 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-lora-multimethod-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E1FE:35B9DC:1A75F8:5DFD81:6A6D9A62 and timestamp 2026-08-01 07:04:02 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-mcu-cortex-m-backend / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-mediatek-models-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E9C2:FDA89:D9064:3073B8:6A6D9A70 and timestamp 2026-08-01 07:04:16 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-minimal-wheel-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 826A:E53B9:11A48C:3F1204:6A6D9B68 and timestamp 2026-08-01 07:08:24 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-moshi-linux / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-openvino-linux / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-phi-3-mini-runner-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID BED6:1CDDEB:18FF8E:592512:6A6D9A8A and timestamp 2026-08-01 07:04:42 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-buck-build-linux / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-qnn-models-linux (dl3) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8B4A:108F79:BBAA9A:2961809:6A6D9A39 and timestamp 2026-08-01 07:03:21 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-models-linux (mv2) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C1E2:BEACC:CA64B:2D1018:6A6D9A41 and timestamp 2026-08-01 07:03:29 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-models-linux (mv3) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E50C:3E0322:B5ECB0:286AB6D:6A6D9A38 and timestamp 2026-08-01 07:03:20 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-passes-linux / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-qnn-python-imports-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DA50:155E0B:D766C:303E2D:6A6D9A35 and timestamp 2026-08-01 07:03:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-testsuite-linux / test-backend-linux (qnn, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DDBE:3ABD70:D720D:2FCD83:6A6D9A57 and timestamp 2026-08-01 07:03:51 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-qnn-testsuite-linux / test-backend-linux (qnn, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 98DA:35B9DC:1A9875:5E777A:6A6D9A69 and timestamp 2026-08-01 07:04:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-quantized-aot-lib-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8798:36EDCD:BCD38:2A12C5:6A6D9A2C and timestamp 2026-08-01 07:03:08 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-selective-build-linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DF90:38B2B7:B9C35B:28D8127:6A6D9A2F and timestamp 2026-08-01 07:03:11 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / test-sqnr-static-llm-qnn-linux (smollm2_135m) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-static-llama-qnn-linux (stories_110m) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • pull / test-static-llama-qnn-linux (stories_260k_bc) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D9F2:59C85:B95F24:28D43AE:6A6D9A4A and timestamp 2026-08-01 07:03:38 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest / linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8B0C:77828:C0C173:2A76DA4:6A6D9AB8 and timestamp 2026-08-01 07:05:28 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest / windows / windows-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D4:244B12:104E03:39FC6E:6A6D9B30 and timestamp 2026-08-01 07:07:29 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest-buck / linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 84AC:1D9CF2:AF3368:26A2BEF:6A6D9AB1 and timestamp 2026-08-01 07:05:21 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest-editable / linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B0E2:E57E6:1C08FE:63745D:6A6D9AB4 and timestamp 2026-08-01 07:05:24 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest-editable / windows / windows-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D0:2242D0:10CC2E:3BB8BB:6A6D9B13 and timestamp 2026-08-01 07:06:59 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest-wasm-bindings (--enable-etdump) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 847E:30A6B6:C2FBA:2B99C2:6A6D9A56 and timestamp 2026-08-01 07:03:51 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • pull / unittest-wasm-bindings / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID AAC0:2D1E8:B8A5DC:28C2F90:6A6D9A4E and timestamp 2026-08-01 07:03:42 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_ethos_u55, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B27A:1A110C:B201BD:273461C:6A6D9A30 and timestamp 2026-08-01 07:03:12 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_ethos_u55, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B5BC:2491A4:ABED01:25E1EBB:6A6D9A31 and timestamp 2026-08-01 07:03:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_ethos_u85, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D618:1B23C7:B8BA3C:288EF59:6A6D9A29 and timestamp 2026-08-01 07:03:05 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_ethos_u85, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C694:38B2B7:B987F9:28CB2BA:6A6D9A26 and timestamp 2026-08-01 07:03:02 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_tosa_fp, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E3E6:26500B:B8FD4A:28A134B:6A6D9A29 and timestamp 2026-08-01 07:03:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_tosa_fp, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9042:1D5E97:CA7AD:2D2733:6A6D9A2F and timestamp 2026-08-01 07:03:12 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_tosa_int, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C42C:3F8531:195F97:5A5B0E:6A6D9A2D and timestamp 2026-08-01 07:03:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_tosa_int, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 831E:3BD7F2:18B7AE:580DC4:6A6D9A27 and timestamp 2026-08-01 07:03:03 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_vgf_fp, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID A9DE:70FA6:C546F3:2BB96F1:6A6D9A2D and timestamp 2026-08-01 07:03:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_vgf_fp, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CD4A:1C28D4:C71210:2B7ED54:6A6D9A31 and timestamp 2026-08-01 07:03:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_vgf_int, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DB90:3C802E:18984D:578BD3:6A6D9A24 and timestamp 2026-08-01 07:03:00 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test ARM Backend / test-arm / test-backend-linux (arm_vgf_int, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID AA0A:20C7CA:B55AE6:2806C12:6A6D9A38 and timestamp 2026-08-01 07:03:20 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test QNN Windows MSVC build / build-qnn-windows-msvc / windows-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2CC:E57E6:1E72AD:6C0153:6A6D9B30 and timestamp 2026-08-01 07:07:28 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend / test-vulkan / test-backend-linux (vulkan_static_int8_per_channel, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D4F6:1B23C7:B9087E:28A0119:6A6D9A35 and timestamp 2026-08-01 07:03:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend / test-vulkan / test-backend-linux (vulkan_static_int8_per_channel, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E77A:5E99A:C945C7:2BA8419:6A6D9A34 and timestamp 2026-08-01 07:03:16 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend / test-vulkan / test-backend-linux (vulkan, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E0A8:21A0CF:B9172F:28D4E06:6A6D9A2C and timestamp 2026-08-01 07:03:08 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend / test-vulkan / test-backend-linux (vulkan, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9604:6B1A7:BDE3D5:29C0EE9:6A6D9A31 and timestamp 2026-08-01 07:03:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test WebGPU Backend / test-webgpu / test-backend-linux (webgpu, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DD06:11682E:1B7A33:618D46:6A6D9A2D and timestamp 2026-08-01 07:03:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test WebGPU Backend / test-webgpu / test-backend-linux (webgpu, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DE04:3AD6BD:CF706:2E1DD1:6A6D9A35 and timestamp 2026-08-01 07:03:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test WebGPU Native (Dawn) / test-webgpu-native / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_dynamic_int8_per_channel, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D5A2:3D7B5B:BCCE8C:2992581:6A6D9A2D and timestamp 2026-08-01 07:03:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_dynamic_int8_per_channel, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9556:244B12:C59CF:2BDC7C:6A6D9A2F and timestamp 2026-08-01 07:03:11 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_static_int8_per_channel, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D440:1A110C:B2045B:2734F28:6A6D9A30 and timestamp 2026-08-01 07:03:12 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_static_int8_per_channel, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8800:3C802E:18AD52:57D54D:6A6D9A28 and timestamp 2026-08-01 07:03:04 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_static_int8_per_tensor, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID BF9E:1646A:B6DF84:28363A7:6A6D9A33 and timestamp 2026-08-01 07:03:15 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack_static_int8_per_tensor, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 95AC:3EED4F:BA0EAA:28E437A:6A6D9A33 and timestamp 2026-08-01 07:03:15 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack, models) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8ADA:1CDDEB:17543D:53377D:6A6D9A30 and timestamp 2026-08-01 07:03:12 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test XNNPACK Backend / test-xnnpack / test-backend-linux (xnnpack, operators) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D312:87CF:D6B90:2FA91A:6A6D9A23 and timestamp 2026-08-01 07:02:59 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_deit_e2e_ethos_u) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C9C8:C04D4:B5F645:2827138:6A6D9A54 and timestamp 2026-08-01 07:03:48 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_memory_allocation) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-ethos-u (test_model_smollm2_135M_ethos_u85) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-ethos-u (test_ootb_tests_ethos_u) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-ethos-u (test_ootb_tests_tosa) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8ABC:21ADCE:199910:5AB1B8:6A6D9A7C and timestamp 2026-08-01 07:04:28 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_pytest_models_ethos_u55) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D556:3171CF:19EED8:5C1EA2:6A6D9A64 and timestamp 2026-08-01 07:04:04 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_pytest_models_ethos_u85) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-ethos-u (test_pytest_ops_ethos_u55) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-ethos-u (test_pytest_ops_ethos_u85) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 917A:1C2B05:E8DCC:3407D8:6A6D9A69 and timestamp 2026-08-01 07:04:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_run_ethos_u55) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E106:26500B:BAAE86:2900486:6A6D9A6E and timestamp 2026-08-01 07:04:14 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_run_ethos_u85) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CC34:1C28D4:C8FD05:2BEA541:6A6D9A77 and timestamp 2026-08-01 07:04:23 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-ethos-u (test_smaller_stories_llama_tosa) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E5F2:288241:C31C1C:2AF2D6E:6A6D9A67 and timestamp 2026-08-01 07:04:08 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-arm-backend-vkml (test_ootb_tests_vgf) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-vkml (test_pytest_models_vkml) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-vkml (test_pytest_ops_vkml) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-arm-backend-vkml (test_smaller_stories_llama_vkml) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-cortex-m-e2e / run (mv2, cortex-m0plus) / mv2-cortex-m0plus (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DB08:26FAF4:BEDD65:2989CB5:6A6D9A93 and timestamp 2026-08-01 07:04:51 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-e2e / run (mv2, cortex-m55) / mv2-cortex-m55 (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9B58:3BA0B5:1B29C3:60F510:6A6D9AA2 and timestamp 2026-08-01 07:05:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-e2e / run (mv2, cortex-m7) / mv2-cortex-m7 (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-cortex-m-e2e / run (mv3, cortex-m0plus) / mv3-cortex-m0plus (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B8CE:1CDDEB:199BFF:5B5323:6A6D9AAA and timestamp 2026-08-01 07:05:14 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-e2e / run (mv3, cortex-m55) / mv3-cortex-m55 (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E57E:70FA6:C828AC:2C5DB39:6A6D9A9B and timestamp 2026-08-01 07:04:59 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-e2e / run (mv3, cortex-m7) / mv3-cortex-m7 (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9B14:35B9DC:1BBB76:6274F5:6A6D9AA4 and timestamp 2026-08-01 07:05:08 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-ops / run (cortex-m0plus) / cortex-m-ops-cortex-m0plus (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID DD4C:3AF5D3:1C4B7F:647131:6A6D9AE7 and timestamp 2026-08-01 07:06:15 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-cortex-m-ops / run (cortex-m7) / cortex-m-ops-cortex-m7 (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8BE4:3E8D7A:BBA960:293C5A1:6A6D9AC5 and timestamp 2026-08-01 07:05:41 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-huggingface-transformers-xnnpack (gemma3-1b|xnnpack|--quantize) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID A214:C04D4:B7440A:287193F:6A6D9A8B and timestamp 2026-08-01 07:04:43 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-huggingface-transformers-xnnpack (llama3.2-1b|xnnpack|--quantize) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-huggingface-transformers-xnnpack (qwen3-0.6b|xnnpack|--quantize) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 992E:36FBE5:DD390:312980:6A6D9A8C and timestamp 2026-08-01 07:04:44 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-huggingface-transformers-xnnpack (qwen3-1.7b|xnnpack|--quantize) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9A64:21ADCE:19BC5B:5B2DD2:6A6D9A83 and timestamp 2026-08-01 07:04:35 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-huggingface-transformers-xnnpack (smollm2-135m|xnnpack|--quantize) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 90B8:244B12:DDE18:314457:6A6D9A93 and timestamp 2026-08-01 07:04:51 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-huggingface-transformers-xnnpack (smollm3-3b|xnnpack|--quantize) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 88D2:28982C:1E50E1:6A95FA:6A6D9A8D and timestamp 2026-08-01 07:04:45 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-llama-runner-linux (bf16, custom, linux.arm64.2xlarge, executorch-ubuntu-22.04-gcc11-aarch64) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-llama-runner-linux (bf16, portable, linux.arm64.2xlarge, executorch-ubuntu-22.04-gcc11-aarch64) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-llama-runner-linux (fp32, portable, linux.arm64.2xlarge, executorch-ubuntu-22.04-gcc11-aarch64) / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-llama-runner-linux (fp32, xnnpack+custom, linux.arm64.2xlarge, executorch-ubuntu-22.04-gcc11... / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E94E:3E30BF:BFF649:2A4E190:6A6D9A3C and timestamp 2026-08-01 07:03:24 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-qnn-model (fp32, conv_former) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CD48:45182:B39615:2762C77:6A6D9A21 and timestamp 2026-08-01 07:02:58 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-qnn-model (fp32, ic3) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID BE06:1C61EB:B9FDD4:290C0A2:6A6D9A2A and timestamp 2026-08-01 07:03:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-qnn-model (fp32, ic4) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CE78:165F90:D3F94:2FC4AE:6A6D9A26 and timestamp 2026-08-01 07:03:02 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-qnn-model (fp32, mb) / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9E86:3ABD70:CB8A7:2D392A:6A6D9A2D and timestamp 2026-08-01 07:03:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-qnn-model (fp32, mv3) / linux-job (gh)
    Error: Input required and not supplied: path
  • trunk / test-torchao-huggingface-checkpoints (lfm2_5_1_2b, linux.arm64.2xlarge, executorch-ubuntu-22.04-g... / linux-job (gh)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / test-torchao-huggingface-checkpoints (phi_4_mini, linux.arm64.2xlarge, executorch-ubuntu-22.04-gc... / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D4A0:3F8531:19D729:5BFF4D:6A6D9A46 and timestamp 2026-08-01 07:03:34 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-torchao-huggingface-checkpoints (qwen3_4b, linux.arm64.2xlarge, executorch-ubuntu-22.04-gcc1... / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID ECA8:3B7876:D9357:3071F9:6A6D9A4F and timestamp 2026-08-01 07:03:43 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / unittest-release / linux / linux-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9A12:1C61EB:BCB126:29A5F6B:6A6D9A98 and timestamp 2026-08-01 07:04:56 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / unittest-release / windows / windows-job (gh)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D1:28982C:224428:78AB38:6A6D9B55 and timestamp 2026-08-01 07:08:05 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting

UNCLASSIFIED FAILURES - DrCI could not classify the following jobs because the workflow did not run on the merge base. The failures may be pre-existing on trunk or introduced by this PR:

  • Build Aarch64 Linux Wheels / pytorch/executorch / build-wheel-py3_14-cpu-aarch64 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    pyarrow
  • Build Aarch64 Linux Wheels / pytorch/executorch / upload / upload-wheel-py3_14-cpu-aarch64 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    Unable to download artifact(s): Artifact not found
  • Build Linux Wheels / pytorch/executorch / build-manywheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    pyarrow
  • Build Linux Wheels / pytorch/executorch / upload / upload-manywheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    Unable to download artifact(s): Artifact not found
  • Build macOS Wheels / pytorch/executorch / build-wheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    pyarrow
  • Build macOS Wheels / pytorch/executorch / upload / upload-wheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    Unable to download artifact(s): Artifact not found
  • Build Windows Wheels / pytorch/executorch / build-wheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    pyarrow
  • Build Windows Wheels / pytorch/executorch / upload / upload-wheel-py3_14-cpu (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    Unable to download artifact(s): Artifact not found
  • nightly / test-cortex-m-e2e-nightly / run (deep_autoencoder, cortex-m55) / deep_autoencoder-cortex-m55 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 80F0:F33B6:1287D2:41FE34:6A6D9BA7 and timestamp 2026-08-01 07:09:27 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • nightly / test-cortex-m-e2e-nightly / run (ds_cnn, cortex-m55) / ds_cnn-cortex-m55 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B850:30A6B6:117EAD:3EC2D8:6A6D9BA2 and timestamp 2026-08-01 07:09:22 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • nightly / test-cortex-m-e2e-nightly / run (mobilenet_v1_025, cortex-m55) / mobilenet_v1_025-cortex-m55 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C7BC:8401:C9ED51:2C57960:6A6D9BA6 and timestamp 2026-08-01 07:09:27 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • nightly / test-cortex-m-e2e-nightly / run (resnet8, cortex-m55) / resnet8-cortex-m55 (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID EA06:E6A97:216518:7680B1:6A6D9BAD and timestamp 2026-08-01 07:09:33 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • nightly / test-static-hf-llm-qnn-linux (smollm2_135m) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • Test CUDA Builds / export-model-cuda-artifact (facebook, dinov2-small-imagenet1k-1-layer, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID B7D1:363CD9:1AB699:5F1C73:6A6D9D6F and timestamp 2026-08-01 07:17:03 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (google, gemma-3-4b-it, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID CBD6:3BB373:2C12F8:9CBC3D:6A6D9DB8 and timestamp 2026-08-01 07:18:16 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (google, gemma-3-4b-it, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID BFE1:8839F:CC210F:2CF4E51:6A6D9DB5 and timestamp 2026-08-01 07:18:14 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (mistralai, Voxtral-Mini-3B-2507, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 2CE0:35B9DC:29BF8C:9428FD:6A6D9D95 and timestamp 2026-08-01 07:17:41 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (mistralai, Voxtral-Mini-3B-2507, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 34AB:1AFC33:C9C89B:2C6464A:6A6D9DB5 and timestamp 2026-08-01 07:18:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (mistralai, Voxtral-Mini-3B-2507, quantized-int4-weight-only) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 887A:26FAF4:D300BC:2DFB5E9:6A6D9DD2 and timestamp 2026-08-01 07:18:42 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (mistralai, Voxtral-Mini-4B-Realtime-2602, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 0F5E:3C802E:2AE6DC:9846D0:6A6D9DB9 and timestamp 2026-08-01 07:18:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (nvidia, diar_streaming_sortformer_4spk-v2, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID E6CB:5D1A3:CB8045:2CD2D62:6A6D9DAE and timestamp 2026-08-01 07:18:07 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (nvidia, parakeet-tdt, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 76B9:20C7CA:C9DA1A:2C95732:6A6D9DA3 and timestamp 2026-08-01 07:17:55 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (nvidia, parakeet-tdt, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 241F:1D32F:1A0993:5CE048:6A6D9DB2 and timestamp 2026-08-01 07:18:10 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (openai, whisper-large-v3-turbo, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9803:6FC35:2BF6BE:9B8B6E:6A6D9DB2 and timestamp 2026-08-01 07:18:10 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (openai, whisper-large-v3-turbo, quantized-int4-weight-only) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8452:3095ED:2B443A:99C94C:6A6D9DB5 and timestamp 2026-08-01 07:18:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (openai, whisper-small, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID AF8D:59C85:CEC6DE:2D98869:6A6D9DAE and timestamp 2026-08-01 07:18:06 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (Qwen, Qwen3-0.6B, non-quantized) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID D01D:F33B6:1A055D:5CC2D1:6A6D9D8E and timestamp 2026-08-01 07:17:34 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (Qwen, Qwen3-0.6B, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 719E:363CD9:1D0170:675464:6A6D9DFD and timestamp 2026-08-01 07:19:25 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (SocialLocalMobile, Qwen3.5-35B-A3B-HQQ-INT4, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID BF89:FD7AF:2A3E16:958DBB:6A6D9DC7 and timestamp 2026-08-01 07:18:32 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / export-model-cuda-artifact (unsloth, gemma-4-31B-it-GGUF, quantized-int4-tile-packed) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 5551:FDA89:1BDD21:63649B:6A6D9E06 and timestamp 2026-08-01 07:19:34 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / test-executorch-cuda-build-12.6 / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID AAB8:1E39F1:1EC36:6EB96:6A6D9EDD and timestamp 2026-08-01 07:23:09 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / test-executorch-cuda-build-13.0 / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID A0D0:36CDB7:2B0F0:99CFB:6A6D9ED5 and timestamp 2026-08-01 07:23:01 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test CUDA Builds / test-models-cuda / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • Test CUDA Builds / unittest-cuda / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • Test CUDA Builds / unittest-cuda-runtime / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 85BA:3C415A:D74921:2F88F4A:6A6D9ECE and timestamp 2026-08-01 07:22:54 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test OpenVINO Backend / test-openvino / test-backend-linux (openvino, models) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 9238:106AB:18D374:580645:6A6D9A2F and timestamp 2026-08-01 07:03:11 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test OpenVINO Backend / test-openvino / test-backend-linux (openvino, operators) / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID 8FB4:854F7:181DC8:55FBDF:6A6D9A2F and timestamp 2026-08-01 07:03:11 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend (specialized runners) / build-vulkan-windows-msvc / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C328:3CA4CB:13C2A6:46A4BF:6A6D9BE3 and timestamp 2026-08-01 07:10:27 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Test Vulkan Backend (specialized runners) / test-vulkan-nvidia / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]An error occurred trying to start process '/usr/bin/bash' with working directory '/home/ec2-user/actions-runner/_work/executorch/executorch/pytorch/executorch'. No such file or directory
  • trunk / llm-server / linux / linux-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    Error: Input required and not supplied: path
  • trunk / test-models-windows (emformer_transcribe, portable) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D2:3D9CC9:123D6A:40F63A:6A6D9B5D and timestamp 2026-08-01 07:08:13 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (emformer_transcribe, xnnpack-q8) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C31A:4CCDE:CA0A39:2C8DBF0:6A6D9B51 and timestamp 2026-08-01 07:08:01 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (mobilebert, portable) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2CC:21A0CF:C1430E:2AA6388:6A6D9B66 and timestamp 2026-08-01 07:08:22 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (mobilebert, xnnpack-q8) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C326:3C06FD:111798:3CED6C:6A6D9B51 and timestamp 2026-08-01 07:08:01 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (mv3, portable) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C326:106AB:1ECA3F:6D4B84:6A6D9B67 and timestamp 2026-08-01 07:08:23 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (mv3, xnnpack-q8) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2CA:4CCDE:C97AB6:2C6D92D:6A6D9B3C and timestamp 2026-08-01 07:07:40 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (resnet50, portable) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C31E:FDA89:125C9A:41AAA6:6A6D9B9D and timestamp 2026-08-01 07:09:17 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (resnet50, xnnpack-q8) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C31E:3B6C29:BD1189:29B51E6:6A6D9B48 and timestamp 2026-08-01 07:07:52 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (vit, portable) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2D2:C04D4:BC837D:299D7AF:6A6D9B66 and timestamp 2026-08-01 07:08:22 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • trunk / test-models-windows (vit, xnnpack-q8) / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C326:802EC:1FBF3C:71173D:6A6D9B97 and timestamp 2026-08-01 07:09:11 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting
  • Windows MSVC Build / build-windows-msvc / windows-job (gh) (this job did not run on the merge base, so DrCI cannot tell whether the failure is pre-existing)
    ##[error]API rate limit exceeded for installation. If you reach out to GitHub Support for help, please include the request ID C2CD:B2508:B74C31:285E7CD:6A6D9B85 and timestamp 2026-08-01 07:08:53 UTC. For more on scraping GitHub and how it may affect your rights, please review our Terms of Service (https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) - https://docs.github.com/en/rest/using-the-rest-api/getting-started-with-the-rest-api#rate-limiting

FLAKY - The following job failed but was likely due to flakiness present on trunk:

BROKEN TRUNK - The following job failed but was present on the merge base:

👉 Rebase onto the `viable/strict` branch to avoid these failures

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Jul 31, 2026
@github-actions

Copy link
Copy Markdown

This PR needs a release notes: label

If your change should be included in the release notes (i.e. would users of this library care about this change?), please use a label starting with release notes:. This helps us keep track and include your important work in the next release notes.

To add a label, you can comment to pytorchbot, for example
@pytorchbot label "release notes: none"

For more information, see
https://github.com/pytorch/pytorch/wiki/PyTorch-AutoLabel-Bot#why-categorize-for-release-notes-and-how-does-it-work.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The new shared-runtime linking logic uses GNU ld-specific flags without platform guards, which can break builds when EXECUTORCH_BUILD_SHARED is enabled on non-ELF toolchains.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR makes the ExecuTorch wheel usable as a C++ SDK by shipping a linkable shared runtime (libexecutorch.so) and exposing it via find_package(executorch) as executorch::runtime, while also updating the Python extensions to link against that shared runtime to preserve a single process-wide backend registry.

Changes:

  • Add a consolidated shared runtime target (executorch_shared / libexecutorch.so) and update multiple extension/tool targets to resolve runtime symbols from it.
  • Extend the wheel CMake package config to provide an imported target executorch::runtime resolved relative to the installed wheel for relocatable consumption.
  • Add CI wheel smoke coverage that verifies single-registry behavior and that a standalone C++ app can build/run via only find_package(executorch) + executorch::runtime.
File summaries
File Description
tools/cmake/Utils.cmake Adds helper to force linking against the shared runtime early on the link line.
tools/cmake/preset/pybind.cmake Enables EXECUTORCH_BUILD_SHARED for the Linux pybind preset to ship the shared runtime in wheels.
tools/cmake/executorch-wheel-config.cmake Exposes executorch::runtime imported target and keeps legacy _portable_lib discovery.
tools/cmake/Codegen.cmake Avoids linking executorch_core when shared runtime is enabled; forces shared runtime resolution.
setup.py Installs the shared runtime SONAME into the wheel and expands header install coverage for runtime-linked extensions.
kernels/quantized/CMakeLists.txt Adds wheel-runtime-relative RPATH when shared runtime is enabled.
extension/training/CMakeLists.txt Switches pybind training module to shared runtime path and fixes RPATH for wheel layout.
extension/llm/runner/CMakeLists.txt Forces shared runtime resolution and adjusts RPATH when shared runtime is enabled.
extension/llm/custom_ops/CMakeLists.txt Ensures wheel-built artifact has correct RPATH and resolves runtime from shared library.
devtools/etdump/CMakeLists.txt Avoids executorch whole-archive when shared runtime is present; links shared runtime instead.
devtools/bundled_program/CMakeLists.txt Avoids whole-archive duplication by linking shared runtime when enabled.
codegen/tools/CMakeLists.txt Makes selective_build resolve runtime via shared library and sets wheel-relative RPATH.
CMakeLists.txt Defines executorch_shared earlier and updates pybind/utility targets to avoid embedding duplicate registries.
.github/workflows/build-wheels-*.yml Expands workflow path triggers to include CMakeLists and tools/cmake/.
.ci/scripts/wheel/test_linux.py Runs the new C++ SDK wheel test as part of Linux wheel smoke tests.
.ci/scripts/wheel/test_linux_aarch64.py Runs the new C++ SDK wheel test as part of aarch64 Linux wheel smoke tests.
.ci/scripts/wheel/test_cpp_sdk.py New test that validates single-registry and that a standalone C++ app can link/run via the wheel.
Review details
  • Files reviewed: 20/20 changed files
  • Comments generated: 2
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread tools/cmake/Utils.cmake
Comment thread CMakeLists.txt Outdated
[ghstack-poisoned]
Copilot AI review requested due to automatic review settings July 31, 2026 06:51
shoumikhin added a commit that referenced this pull request Jul 31, 2026
Today `pip install executorch` gives you the Python half of ExecuTorch but
nothing a C++ application can link. The wheel installs a header subset and an
`executorch-config.cmake`, but that config only locates the Python extension so
custom-op builds can compile against it: it defines no runtime library and no
CMake targets. Writing a small C++ program that loads and runs a `.pte` means
cloning the repo, syncing submodules, and building from source.

This change ships the runtime as a real library and exposes it through
`find_package`, so a standalone application needs nothing but the wheel:

    find_package(executorch REQUIRED)
    target_link_libraries(my_app PRIVATE executorch::runtime)

`executorch::runtime` is an imported target whose location is resolved relative
to the config file itself, so the package stays relocatable and no path from the
machine that built the wheel is baked into it. A consumer picks up the wheel's
library directory in its RUNPATH, plus `$ORIGIN`-relative entries so an
application deployed next to a copy of the runtime keeps working without
`LD_LIBRARY_PATH`.

The Python extensions have to move to the shared runtime in the same change.
Backends register themselves into a single process-wide table owned by the
runtime, and that table is only process-wide if exactly one loaded library
defines it. The Python extension statically embeds the runtime today, so adding a
shared library beside it would give a process two independent registries, and a
backend could register into the one nobody reads. The extensions therefore link
the shared runtime instead of whole-archiving the static libraries, leaving
exactly one registry owner for both the Python and C++ paths.

Getting that right needs two linker details. The shared runtime is named through
a link option rather than an ordinary dependency, because CMake orders link
libraries so a static archive precedes what it depends on, which would let the
archive satisfy the runtime symbols first. It is also wrapped in
`--no-as-needed`, because a shared library with no already-referenced symbol at
the point it appears on the link line can be dropped, and a later static archive
would then supply the registry after all.

Registration still happens through static initializers exactly as before. No new
plugin or loader ABI is introduced.

The shared runtime is Linux-only for the wheel. macOS C++ consumers are served by
the existing Swift package distribution, and the runtime has no export
annotations for a Windows DLL. Every other build keeps linking the static
libraries, because the new behavior is gated on the existing
`EXECUTORCH_BUILD_SHARED` option, so iOS, Android, and embedded builds are
unaffected.

Test plan:

The wheel smoke test now covers this on Linux, so it is checked in CI rather than
only by hand. It asserts that exactly one shipped library defines the backend
registry, builds a standalone C++ program that only calls
`find_package(executorch)` and links `executorch::runtime`, runs it without
`LD_LIBRARY_PATH`, and checks the resulting binary depends on the shipped runtime
with a relocatable RUNPATH. The check was confirmed to fail when a second
registry definition is introduced deliberately. The wheel workflows now also run
when any `CMakeLists.txt` or anything under `tools/cmake` changes, since those
files decide what the wheel contains.

Built the wheel from a clean checkout on Linux x86_64 and on Linux aarch64, then
verified each against a fresh virtual environment with a normal
dependency-resolving install:

- `nm -DC` across every shipped shared object shows exactly one definition of the
  registry entry points; the Python extensions import them rather than defining
  their own.
- A C++ program whose CMake only calls `find_package(executorch)` and links
  `executorch::runtime` compiles against the installed wheel with no source
  checkout, then loads a `.pte` and lists its methods.
- `readelf -d` on that program lists the versioned runtime in `DT_NEEDED` with
  `$ORIGIN`-relative RUNPATH entries, and it runs without `LD_LIBRARY_PATH`.
- A C++ binary that links only `executorch::runtime` and loads the Python
  extension sees the backends that extension registered, which is the
  one-registry property stated above.
- `import executorch`, the registered backend list, and `.pte` execution through
  the Python bindings are unchanged, with outputs matching eager PyTorch.
- With `EXECUTORCH_BUILD_SHARED` off, the Python extension still builds
  self-contained and no shared runtime is produced, so the previous behavior is
  intact.
- Configured with CMake 3.28 as well as 3.31, since the project supports 3.24 and
  up and the two differ in how strictly they treat link features.

ghstack-source-id: ab9b01b
ghstack-comment-id: 5139976402
Pull-Request: #21514
@shoumikhin

Copy link
Copy Markdown
Contributor Author

Good catch, fixed in the latest push.

Both of these were real. The whole-archive loop used to go through
$<LINK_LIBRARY:WHOLE_ARCHIVE,...>, which CMake maps to the right flag per
platform, and switching to raw flags lost that. There is now a small
executorch_target_whole_archive helper next to the existing kernel-link helpers
that picks --whole-archive, -force_load, or /WHOLEARCHIVE based on the
platform, and the shared-runtime helper only adds --no-as-needed on ELF
platforms. No raw GNU flag is emitted outside those two helpers now.

Worth noting the option that reaches this code is only turned on for Linux today,
so this is about not breaking someone who enables it by hand rather than a live
failure. Verified by building the wheel and running the wheel checks on Linux
x86_64 and aarch64 after the change.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The new executorch::runtime CMake config has correctness/robustness issues (duplicate target definition risk and unconditional Python failure path) that can break consumers during configuration.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (3)

tools/cmake/executorch-wheel-config.cmake:121

  • With the new executorch::runtime target, a pure C++ consumer should be able to configure successfully even if python3 isn't available on PATH. Right now the unconditional execute_process(${PYTHON_EXECUTABLE} ...) followed by FATAL_ERROR prevents using the shared runtime without Python. Consider treating EXT_SUFFIX lookup as best-effort when the shared runtime was found, and skip _portable_lib discovery in that case.
find_library(
  _portable_lib_LIBRARY
  NAMES _portable_lib${EXT_SUFFIX}
  PATHS "${_executorch_package_root}/extension/pybindings/"
)

tools/cmake/executorch-wheel-config.cmake:121

  • find_library() will also search default system locations, which can accidentally pick up a different _portable_lib<EXT_SUFFIX> (e.g., from another install) and silently mix headers/libs. Since this config is meant to bind to the wheel it lives in, add NO_DEFAULT_PATH to restrict the search to the wheel directory.
find_library(
  _portable_lib_LIBRARY
  NAMES _portable_lib${EXT_SUFFIX}
  PATHS "${_executorch_package_root}/extension/pybindings/"
)

tools/cmake/executorch-wheel-config.cmake:68

  • executorch-config.cmake can be processed more than once in a single configure (e.g., multiple find_package(executorch) calls via subprojects). Unconditionally calling add_library(executorch::runtime ...) will then error with a duplicate target name. Guard the add_library call with if(NOT TARGET executorch::runtime) but still apply the target properties afterward.

This issue also appears in the following locations of the same file:

  • line 117
  • line 117
  add_library(executorch::runtime SHARED IMPORTED)
  set_target_properties(
    executorch::runtime
    PROPERTIES IMPORTED_LOCATION "${_executorch_runtime_library}"
               INTERFACE_INCLUDE_DIRECTORIES "${EXECUTORCH_INCLUDE_DIRS}"
  • Files reviewed: 20/20 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]
Copilot AI review requested due to automatic review settings July 31, 2026 14:53
shoumikhin added a commit that referenced this pull request Jul 31, 2026
Today `pip install executorch` gives you the Python half of ExecuTorch but
nothing a C++ application can link. The wheel installs a header subset and an
`executorch-config.cmake`, but that config only locates the Python extension so
custom-op builds can compile against it: it defines no runtime library and no
CMake targets. Writing a small C++ program that loads and runs a `.pte` means
cloning the repo, syncing submodules, and building from source.

This change ships the runtime as a real library and exposes it through
`find_package`, so a standalone application needs nothing but the wheel:

    find_package(executorch REQUIRED)
    target_link_libraries(my_app PRIVATE executorch::runtime)

`executorch::runtime` is an imported target whose location is resolved relative
to the config file itself, so the package stays relocatable and no path from the
machine that built the wheel is baked into it. A consumer picks up the wheel's
library directory in its RUNPATH, plus `$ORIGIN`-relative entries so an
application deployed next to a copy of the runtime keeps working without
`LD_LIBRARY_PATH`.

The Python extensions have to move to the shared runtime in the same change.
Backends register themselves into a single process-wide table owned by the
runtime, and that table is only process-wide if exactly one loaded library
defines it. The Python extension statically embeds the runtime today, so adding a
shared library beside it would give a process two independent registries, and a
backend could register into the one nobody reads. The extensions therefore link
the shared runtime instead of whole-archiving the static libraries, leaving
exactly one registry owner for both the Python and C++ paths.

Getting that right needs two linker details. The shared runtime is named through
a link option rather than an ordinary dependency, because CMake orders link
libraries so a static archive precedes what it depends on, which would let the
archive satisfy the runtime symbols first. It is also wrapped in
`--no-as-needed`, because a shared library with no already-referenced symbol at
the point it appears on the link line can be dropped, and a later static archive
would then supply the registry after all.

Registration still happens through static initializers exactly as before. No new
plugin or loader ABI is introduced.

The shared runtime is Linux-only for the wheel. macOS C++ consumers are served by
the existing Swift package distribution, and the runtime has no export
annotations for a Windows DLL. Every other build keeps linking the static
libraries, because the new behavior is gated on the existing
`EXECUTORCH_BUILD_SHARED` option, so iOS, Android, and embedded builds are
unaffected.

Test plan:

The wheel smoke test now covers this on Linux, so it is checked in CI rather than
only by hand. It asserts that exactly one shipped library defines the backend
registry, builds a standalone C++ program that only calls
`find_package(executorch)` and links `executorch::runtime`, runs it without
`LD_LIBRARY_PATH`, and checks the resulting binary depends on the shipped runtime
with a relocatable RUNPATH. The check was confirmed to fail when a second
registry definition is introduced deliberately. The wheel workflows now also run
when any `CMakeLists.txt` or anything under `tools/cmake` changes, since those
files decide what the wheel contains.

Built the wheel from a clean checkout on Linux x86_64 and on Linux aarch64, then
verified each against a fresh virtual environment with a normal
dependency-resolving install:

- `nm -DC` across every shipped shared object shows exactly one definition of the
  registry entry points; the Python extensions import them rather than defining
  their own.
- A C++ program whose CMake only calls `find_package(executorch)` and links
  `executorch::runtime` compiles against the installed wheel with no source
  checkout, then loads a `.pte` and lists its methods.
- `readelf -d` on that program lists the versioned runtime in `DT_NEEDED` with
  `$ORIGIN`-relative RUNPATH entries, and it runs without `LD_LIBRARY_PATH`.
- A C++ binary that links only `executorch::runtime` and loads the Python
  extension sees the backends that extension registered, which is the
  one-registry property stated above.
- `import executorch`, the registered backend list, and `.pte` execution through
  the Python bindings are unchanged, with outputs matching eager PyTorch.
- With `EXECUTORCH_BUILD_SHARED` off, the Python extension still builds
  self-contained and no shared runtime is produced, so the previous behavior is
  intact.
- Configured with CMake 3.28 as well as 3.31, since the project supports 3.24 and
  up and the two differ in how strictly they treat link features.

ghstack-source-id: 401229a
ghstack-comment-id: 5139976402
Pull-Request: #21514

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

[ghstack-poisoned]
Copilot AI review requested due to automatic review settings July 31, 2026 23:52
shoumikhin added a commit that referenced this pull request Jul 31, 2026
Today `pip install executorch` gives you the Python half of ExecuTorch but
nothing a C++ application can link. Everything is baked into the pybindings
extension, so that extension is the only consumer of it. The wheel installs a
header subset and an `executorch-config.cmake`, but that config only locates the
Python extension so custom-op builds can compile against it: it defines no
runtime library and no CMake targets. Writing a small C++ program that loads and
runs a `.pte` means cloning the repo, syncing submodules, and building from
source.

This change starts breaking that monolith into components the wheel can ship
prebuilt, beginning with the runtime itself, and exposes it through
`find_package` so a standalone application needs nothing but the wheel:

    find_package(executorch REQUIRED)
    target_link_libraries(my_app PRIVATE executorch::runtime)

`executorch::runtime` is an imported target whose location is resolved relative
to the config file itself, so the package stays relocatable and no path from the
machine that built the wheel is baked into it. A consumer picks up the wheel's
library directory in its RUNPATH, plus `$ORIGIN`-relative entries so an
application deployed next to a copy of the runtime keeps working without
`LD_LIBRARY_PATH`.

The pybindings extension moves onto that same shared runtime in this change
rather than keeping its own statically embedded copy. This is what makes the
runtime a shared component instead of a second, parallel build of the same code,
and it is also required for correctness: backends register themselves into a
table owned by the runtime, and within one process that table is only a singleton
if exactly one loaded library defines it. Adding a shared library beside an
extension that still embedded its own would give a process two independent
tables, and a backend could register into the one nobody reads. Several already
shipped libraries had that problem: the custom-ops, quantized-ops, and LLM runner
extensions each carried their own copy, which this change removes.

Getting that right needs two linker details. The shared runtime is named through
a link option rather than an ordinary dependency, because CMake orders link
libraries so a static archive precedes what it depends on, which would let the
archive satisfy the runtime symbols first. It is also wrapped in
`--no-as-needed`, because a shared library with no already-referenced symbol at
the point it appears on the link line can be dropped, and a later static archive
would then supply the table after all. Both are applied only to targets that
actually call into the runtime; a module that merely exposes a pybind type links
nothing new.

Registration still happens through static initializers exactly as before. No new
plugin or loader ABI is introduced.

The shared runtime is Linux-only for the wheel. macOS C++ consumers are served by
the existing Swift package distribution, and the runtime has no export
annotations for a Windows DLL. Every other build keeps linking the static
libraries, because the new behavior is gated on the existing
`EXECUTORCH_BUILD_SHARED` option, so iOS, Android, and embedded builds are
unaffected.

Test plan:

The wheel smoke test now covers this on Linux, so it is checked in CI rather than
only by hand. It asserts that exactly one shipped library defines the backend
registry, builds a standalone C++ program that only calls
`find_package(executorch)` and links `executorch::runtime`, runs it without
`LD_LIBRARY_PATH`, and checks the resulting binary depends on the shipped runtime
with a relocatable RUNPATH. The check was confirmed to fail when a second
registry definition is introduced deliberately. The wheel workflows now also run
when any `CMakeLists.txt` or anything under `tools/cmake` changes, since those
files decide what the wheel contains.

Built the wheel from a clean checkout on Linux x86_64 and on Linux aarch64, then
verified each against a fresh virtual environment with a normal
dependency-resolving install:

- `nm -DC` across every shipped shared object shows exactly one definition of the
  registry entry points; the Python extensions import them rather than defining
  their own.
- A C++ program whose CMake only calls `find_package(executorch)` and links
  `executorch::runtime` compiles against the installed wheel with no source
  checkout, then loads a `.pte` and lists its methods.
- `readelf -d` on that program lists the versioned runtime in `DT_NEEDED` with
  `$ORIGIN`-relative RUNPATH entries, and it runs without `LD_LIBRARY_PATH`.
- A C++ binary that links only `executorch::runtime` and loads the pybindings
  extension observes the backends that extension registered, confirming both are
  using the one shipped runtime rather than separate copies.
- `import executorch`, the registered backend list, and `.pte` execution through
  the Python bindings are unchanged, with outputs matching eager PyTorch.
- With `EXECUTORCH_BUILD_SHARED` off, the Python extension still builds
  self-contained and no shared runtime is produced, so the previous behavior is
  preserved for every build that does not opt in.
- Configured with CMake 3.28 as well as 3.31, since the project supports 3.24 and
  up and the two differ in how strictly they treat link features.

ghstack-source-id: 87c1db8
ghstack-comment-id: 5139976402
Pull-Request: #21514

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

[ghstack-poisoned]
Copilot AI review requested due to automatic review settings August 1, 2026 01:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The updated quantized-kernels RPATH uses extensions/pybindings (plural), which is inconsistent with the wheel’s extension/pybindings layout and can break runtime library discovery.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (2)

tools/cmake/executorch-wheel-config.cmake:12

  • The usage example in the header comment combines two CMake commands on one line, which is not valid CMake syntax and is likely to confuse consumers.
# find_package(executorch REQUIRED) target_link_libraries(my_app PRIVATE
# executorch::runtime)

kernels/quantized/CMakeLists.txt:144

  • The RPATH points to ../../extensions/pybindings, but the wheel installs the pybindings under executorch/extension/pybindings (singular). From executorch/kernels/quantized, the correct relative path is ../../extension/pybindings; otherwise the loader may not find _portable_lib at runtime.
      if(APPLE)
        set(RPATH "@loader_path/../../extensions/pybindings")
      else()
        set(RPATH "$ORIGIN/../../extensions/pybindings")
        if(EXECUTORCH_BUILD_SHARED)
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The new wheel CMake config and CI test have correctness gaps (empty EXECUTORCH_LIBRARIES when runtime is found; nm failures not handled) that can cause consumer breakage or false-positive test passes.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (2)

tools/cmake/executorch-wheel-config.cmake:85

  • When the shared runtime is found, EXECUTORCH_FOUND is set to ON but EXECUTORCH_LIBRARIES remains empty. This can break existing consumers that still follow the documented variable-based contract (target_link_libraries(... ${EXECUTORCH_LIBRARIES})) because find_package(executorch) will succeed but provide nothing linkable unless they opt into the new executorch::runtime target explicitly.
if(_executorch_runtime_count GREATER 0)
  list(GET _executorch_runtime_candidates 0 _executorch_runtime_library)

  set(EXECUTORCH_FOUND ON)
  message(STATUS "ExecuTorch runtime found at ${_executorch_runtime_library}")

  add_library(executorch::runtime SHARED IMPORTED)
  set_target_properties(
    executorch::runtime
    PROPERTIES IMPORTED_LOCATION "${_executorch_runtime_library}"
               INTERFACE_INCLUDE_DIRECTORIES "${EXECUTORCH_INCLUDE_DIRS}"
               INTERFACE_COMPILE_FEATURES cxx_std_17
               INTERFACE_COMPILE_DEFINITIONS C10_USING_CUSTOM_GENERATED_MACROS
  )

.ci/scripts/wheel/test_cpp_sdk.py:99

  • _defines_symbol() ignores nm failures (check=False and no return-code handling). If nm can't read a shipped .so (corruption, unexpected format, missing permissions), the test will silently treat it as “does not define symbol” and can falsely pass the single-registry check.
def _defines_symbol(library: Path, symbol: str) -> bool:
    result = subprocess.run(
        ["nm", "-DC", str(library)], capture_output=True, text=True, check=False
    )
    for line in result.stdout.splitlines():
        if symbol not in line:
            continue
        match = _DEFINED.match(line)
        if (
            match
            and match.group("name").startswith(symbol)
            and match.group("kind") in _OWNING_KINDS
        ):
            return True
    return False
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

Several new $ORIGIN-relative RPATH adjustments appear wheel-layout-specific but are not guarded as wheel-only, which can break non-wheel shared builds/installs when EXECUTORCH_BUILD_SHARED is enabled.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (9)

backends/qualcomm/CMakeLists.txt:387

  • This RPATH setting assumes the wheel layout (runtime under executorch/lib). For non-wheel shared installs where libexecutorch.so is in ${CMAKE_INSTALL_LIBDIR}, $ORIGIN/../../../lib may be incorrect and can break loading. Consider gating this wheel-specific RPATH on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE.
    if(NOT APPLE)

CMakeLists.txt:1143

  • The added $ORIGIN-relative RPATH entry assumes the wheel layout (runtime under executorch/lib). In a non-wheel shared build/install, libexecutorch.so installs to ${CMAKE_INSTALL_LIBDIR} (e.g. /lib), so $ORIGIN/../../lib would resolve to /executorch/lib and can break runtime loading. Since this path is wheel-specific, gate it on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE (or compute the correct relative path for non-wheel installs).
  set(_portable_lib_rpath "$ORIGIN/../../../torch/lib")
  if(EXECUTORCH_BUILD_SHARED)
    string(APPEND _portable_lib_rpath ":$ORIGIN/../../lib")
  endif()

codegen/tools/CMakeLists.txt:54

  • This $ORIGIN/../../lib RPATH assumes the wheel layout (runtime shipped under executorch/lib). In a normal CMake install, executorch_shared goes to ${CMAKE_INSTALL_LIBDIR}, so this relative path will be wrong and can prevent the module from finding libexecutorch.so at runtime. Consider gating the wheel-specific RPATH on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE.
  if(NOT APPLE)

extension/training/CMakeLists.txt:94

  • This RPATH block hardcodes the wheel’s internal layout (runtime under executorch/lib). For non-wheel shared builds, libexecutorch.so installs to ${CMAKE_INSTALL_LIBDIR}, so this can be incorrect and break loading. Since the comment explicitly describes the wheel layout, guard this block with EXECUTORCH_BUILD_WHEEL_DO_NOT_USE.
  if(EXECUTORCH_BUILD_SHARED AND NOT APPLE)

extension/llm/runner/CMakeLists.txt:141

  • This wheel-layout RPATH addition assumes the runtime is in executorch/lib; that is not true for a standard CMake install where libexecutorch.so goes to ${CMAKE_INSTALL_LIBDIR}. To avoid breaking non-wheel shared builds, gate this on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE.
    if(EXECUTORCH_BUILD_SHARED)

extension/llm/custom_ops/CMakeLists.txt:119

  • This $ORIGIN/../../../lib RPATH is described as matching the wheel layout (runtime under executorch/lib). In a standard install, executorch_shared is in ${CMAKE_INSTALL_LIBDIR}, so this relative path can be wrong and break runtime loading. Gate this wheel-specific adjustment on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE.
    if(EXECUTORCH_BUILD_SHARED)

kernels/quantized/CMakeLists.txt:89

  • This RPATH is described as matching the wheel layout (runtime shipped under executorch/lib). For non-wheel shared builds/install, libexecutorch.so is under ${CMAKE_INSTALL_LIBDIR}, so $ORIGIN/../../lib can be incorrect. Consider guarding this block with EXECUTORCH_BUILD_WHEEL_DO_NOT_USE to avoid breaking non-wheel shared builds.
    if(EXECUTORCH_BUILD_SHARED AND NOT APPLE)

kernels/quantized/CMakeLists.txt:144

  • This wheel-layout RPATH append assumes the runtime is under executorch/lib. In non-wheel shared installs, libexecutorch.so is under ${CMAKE_INSTALL_LIBDIR}, so this relative path can be wrong. Gate this on EXECUTORCH_BUILD_WHEEL_DO_NOT_USE (or compute the correct relative path for non-wheel installs).
        if(EXECUTORCH_BUILD_SHARED)

backends/qualcomm/CMakeLists.txt:265

  • This $ORIGIN/../../lib RPATH assumes the wheel layout (runtime under executorch/lib). In a normal CMake install, executorch_shared is in ${CMAKE_INSTALL_LIBDIR}, so this relative path can be incorrect and break runtime loading. Since wheel-only layout logic should be guarded, consider adding EXECUTORCH_BUILD_WHEEL_DO_NOT_USE to this condition.

This issue also appears on line 387 of the same file.

  if(NOT APPLE)
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Human review recommended

It makes wide-reaching build/linker/packaging changes whose safety depends on subtle link-line and runtime loader behavior across multiple targets and needs final human verification.

Review details
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]
@shoumikhin

Copy link
Copy Markdown
Contributor Author

Thanks, the RPATH observations across these files were right and I have fixed all
of them.

Every $ORIGIN-relative entry I added was gated only on EXECUTORCH_BUILD_SHARED,
while the paths themselves assume the wheel's directory layout. The two layouts
really do differ:

normal install:  <prefix>/lib/libexecutorch.so      (CMAKE_INSTALL_LIBDIR)
wheel:           .../executorch/lib/libexecutorch.so.1

So in a non-wheel shared install, $ORIGIN/../../lib resolves to
<prefix>/lib/executorch/lib while the runtime sits at <prefix>/lib. That is a
dead RPATH, and it would only show up at load time.

Each of these now also requires EXECUTORCH_BUILD_WHEEL_DO_NOT_USE, which the
pybind preset already sets, so the entries apply to the wheel and a normal shared
install is left alone:

  • the pybindings extension
  • both Qualcomm backend targets
  • the selective-build module
  • the training extension
  • the LLM runner and the custom-ops library
  • the quantized AOT library (both places)

Verified on a freshly built wheel: the extension still carries both
$ORIGIN/../../../torch/lib and $ORIGIN/../../lib, the other modules still
carry their entries, and the C++ consumer test still builds, runs, and works when
deployed next to a copy of the runtime with the absolute build paths stripped.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The wheel CMake config has two verified correctness issues (stale cached _portable_lib_LIBRARY when skipping Python, and non-propagating C++20 requirement for _portable_lib) that can break downstream consumers.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details

Suppressed comments (2)

tools/cmake/executorch-wheel-config.cmake:132

  • When Python is not usable but the shared runtime target exists, this branch sets EXT_SUFFIX to "" and skips find_library(), but _portable_lib_LIBRARY is a cache variable. If it was found in a previous configure (or from a different wheel), it can remain set and the later if(_portable_lib_LIBRARY) block will still run, incorrectly offering/linking the Python extension even though this code path is explicitly skipping it. Clear the cache + normal variable in this branch.
elseif(TARGET executorch::runtime)
  # A C++ application linking only the shared runtime does not need Python at
  # all, so a missing interpreter must not fail its configure. Skip locating the
  # Python extension instead; the legacy _portable_lib target is simply not
  # offered in that case.
  message(
    STATUS
      "Python not usable, skipping the Python extension: ${SYSCONFIG_ERROR}"
  )
  set(EXT_SUFFIX "")

tools/cmake/executorch-wheel-config.cmake:162

  • This imported _portable_lib target tries to enforce C++20 via CXX_STANDARD 20, but CXX_STANDARD does not propagate to consumers (and imported targets have no sources to compile). Downstream custom-op builds that link _portable_lib may still compile as C++17 and fail. Use an interface requirement like INTERFACE_COMPILE_FEATURES cxx_std_20 so it applies to consumer targets.
  set_target_properties(
    _portable_lib
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

[ghstack-poisoned]
@shoumikhin

Copy link
Copy Markdown
Contributor Author

Both of the latest points were correct and are now fixed.

Stale cached library path. The branch that skips the Python extension when no
interpreter is usable set the suffix empty and skipped the lookup, but
find_library caches its result, so a value from an earlier configure survived
and the extension was still offered. Reproduced it in the same build directory:

run 1, interpreter available:  <path to the extension>
run 2, no interpreter:
  "skipping the Python extension"   <- reported as skipped
  <path to the extension>           <- but still set

The config was saying one thing and doing another. It now clears the cache entry
on that path, and the second run reports an empty value.

C++ standard on the imported target. CXX_STANDARD does nothing useful here:
an imported target compiles no sources of its own, and the property does not reach
consumers, so a custom-op build linking it could still compile as C++17 and fail
against headers that need C++20. It is now an interface requirement
(INTERFACE_COMPILE_FEATURES cxx_std_20), and a consumer project reads back
cxx_std_20 as expected.

Also, for completeness on the earlier batch: every wheel-layout RPATH is now gated
so it only applies to the wheel, and a normal shared install is left alone.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Human review recommended

It changes core build/link behavior and wheel packaging/RPATH mechanics across many targets, which warrants final human verification despite the added CI tests.

Review details
  • Files reviewed: 21/21 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ciflow/binaries/all Release PRs with this label will build wheels for all python versions ciflow/binaries ciflow/cuda ciflow/nightly ciflow/periodic ciflow/trunk CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants