From ef64e43bb215a78d751a9529c541454ab5470ded Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 30 Oct 2026 13:54:45 +0000 Subject: [PATCH 1/3] Document how Cloud Agent VMs build and run the host suite. The VM is x86_64, the sources need an aarch64 compiler and qemu-user, and MemAvailable under-reports, so the notes say where the pinned omc, bridge, and nvdisasm sit and why make sets CUDAPP_MEM_RESERVE_MIB=0. Co-authored-by: Drake Stapleton --- AGENTS.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 244f0dc7..31e1a0d4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -90,3 +90,19 @@ make hello-gpu # runs make doctor, then examples/he - `docs/AUDIT.md`, `docs/LICENSING_TRANSITION.md`, `THIRD_PARTY.md`: provenance and licences. - `docs/CUBIN_WRITERS.md`: the two cubin writers, who owns new work, and what was not run (#108). - Aienux, the Aien kernel, which holds Aien's GB10 driver research harness (L332, aienux#441; not a product, NVIDIA's open kernel module stays and GB10 support goes upstream to Nova and nouveau): https://github.com/aien-dev/aienux + +## Cursor Cloud specific instructions + +Cloud Agent VMs are x86_64. The sources use the ARM `dsb sy` barrier, so `/usr/bin/gcc` cannot build them (CUDApp#15). `/usr/local/bin/cc` and `/usr/local/bin/gcc` are the aarch64 cross compiler, which is what `make` runs (`CC` defaults to `cc`). The built binaries are aarch64. Each boot registers qemu-user against `/usr/aarch64-linux-gnu` so they execute. If a binary exits with `Exec format error`, that registration has not run yet. + +`make test` is the host suite. Judge the exit code and the last line, `CUDA++ HOST TESTS PASS ( targets)`. The log contains intentional `FAIL` lines. Under qemu it is slower than the arm64 CI runner. The attention simulator is one slow part. `test-codegen-freestanding` sweeps every 2^32 bf16 input; a 20 million iteration cast loop took 18 seconds here, so that sweep is on the order of an hour. `build/hello_gpu --sim` is the simulator hello world. `python3 tools/figures/make_figures.py --check` checks the README figures. + +Pinned tools sit where the Makefile looks, next to the checkout: + +- `../omega-mv` is omega-mv `e5b32567`, `seed/out/omc`, sha256 `2c82480596bbdc50cda9626866209ef662d5834f278f839ff4ce0250c495029f` +- `../omega-bridge` is omega-bridge `0c4cb9ff980af278890b231b994eaede4dc7621c` (`om/omega-bridge.lock`) +- `nvdisasm` 13.0.85 is the x86_64 redistributable from NVIDIA `redistrib_13.0.2.json` (CI uses the linux-sbsa archive of the same version) + +`/usr/local/bin/make` exports `CUDAPP_MEM_RESERVE_MIB=0` when the variable is unset. MemAvailable on this VM under-reports because of the hypervisor balloon, and the default 4 GiB reserve then refuses the Qwen-shaped upload in `test-gpu-serving-alloc`. The platform test unsets the variable and still checks the 4096 default against a fake meminfo. Do not copy that `0` onto a Spark. + +`make doctor` prints NOT READY here: no NVIDIA module and no `/dev/nvidia*`. That is the expected diagnostic. The doctor binary is aarch64, so its system line says aarch64; `uname -m` in the shell is x86_64. Do not run `make hello-gpu` or open `/dev/nvidia*`. From f2a64652e9a231d162c8ea6a05b850c3f194e760 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 30 Oct 2026 14:02:40 +0000 Subject: [PATCH 2/3] Note that make registers qemu-user if boot start did not. A fresh agent from the draft build had no /tmp/cursor/start-user directory, so aarch64 binaries failed with Exec format error until binfmt was registered. The first make now does that registration. Co-authored-by: Drake Stapleton --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index 31e1a0d4..40f89b99 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -93,7 +93,7 @@ make hello-gpu # runs make doctor, then examples/he ## Cursor Cloud specific instructions -Cloud Agent VMs are x86_64. The sources use the ARM `dsb sy` barrier, so `/usr/bin/gcc` cannot build them (CUDApp#15). `/usr/local/bin/cc` and `/usr/local/bin/gcc` are the aarch64 cross compiler, which is what `make` runs (`CC` defaults to `cc`). The built binaries are aarch64. Each boot registers qemu-user against `/usr/aarch64-linux-gnu` so they execute. If a binary exits with `Exec format error`, that registration has not run yet. +Cloud Agent VMs are x86_64. The sources use the ARM `dsb sy` barrier, so `/usr/bin/gcc` cannot build them (CUDApp#15). `/usr/local/bin/cc` and `/usr/local/bin/gcc` are the aarch64 cross compiler, which is what `make` runs (`CC` defaults to `cc`). The built binaries are aarch64. qemu-user is registered against `/usr/aarch64-linux-gnu` at boot, and again by `/usr/local/bin/make` if that boot hook did not run. If a binary exits with `Exec format error`, run any `make` target once, then retry it. `make test` is the host suite. Judge the exit code and the last line, `CUDA++ HOST TESTS PASS ( targets)`. The log contains intentional `FAIL` lines. Under qemu it is slower than the arm64 CI runner. The attention simulator is one slow part. `test-codegen-freestanding` sweeps every 2^32 bf16 input; a 20 million iteration cast loop took 18 seconds here, so that sweep is on the order of an hour. `build/hello_gpu --sim` is the simulator hello world. `python3 tools/figures/make_figures.py --check` checks the README figures. From 2bd07630b2ea30bba4f48c23ce04fd0278c6ce6c Mon Sep 17 00:00:00 2001 From: GpuFamily2 Date: Fri, 30 Oct 2026 21:21:37 -0500 Subject: [PATCH 3/3] AGENTS: describe the x86_64 make path after #192 (CC := gcc, portable binding); recompile stale crumbs --- AGENTS.md | 2 +- om/moe/.crumb | 8 ++++---- tools/extract/.crumb | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 012e4ba4..ae69236c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -96,7 +96,7 @@ make hello-gpu # runs make doctor, then examples/he ## Cursor Cloud specific instructions -Cloud Agent VMs are x86_64. The sources use the ARM `dsb sy` barrier, so `/usr/bin/gcc` cannot build them (CUDApp#15). `/usr/local/bin/cc` and `/usr/local/bin/gcc` are the aarch64 cross compiler, which is what `make` runs (`CC` defaults to `cc`). The built binaries are aarch64. qemu-user is registered against `/usr/aarch64-linux-gnu` at boot, and again by `/usr/local/bin/make` if that boot hook did not run. If a binary exits with `Exec format error`, run any `make` target once, then retry it. +Cloud Agent VMs are x86_64. `make` decides the host from `uname -m` (Makefile L24-31): on x86_64 it sets `CC := gcc` unless `CC` came from the command line or the environment, links the portable binding `src/cudapp_binding_portable.c` instead of the seeded AArch64 units, compiles the C encoder and C cubin writer as the portable bodies, and makes the six target-only rows (`test-om-encoder`, `test-om-cubin`, `test-gpu-native-runtime`, `test-om-spec-encoder`, `test-portable-receipts`, `test-model-capacity`) exit 2. `gcc` is whatever `PATH` finds first; on these VMs `/usr/local/bin/gcc` and `/usr/local/bin/cc` are the aarch64 cross compiler, so the built binaries are aarch64 and run under qemu-user. qemu-user is registered against `/usr/aarch64-linux-gnu` at boot, and again by `/usr/local/bin/make` if that boot hook did not run. If a binary exits with `Exec format error`, run any `make` target once, then retry it. On AArch64 `CC` stays make's built-in `cc` and the seeded binding is linked. `make test` is the host suite. Judge the exit code and the last line, `CUDA++ HOST TESTS PASS ( targets)`. The log contains intentional `FAIL` lines. Under qemu it is slower than the arm64 CI runner. The attention simulator is one slow part. `test-codegen-freestanding` sweeps every 2^32 bf16 input; a 20 million iteration cast loop took 18 seconds here, so that sweep is on the order of an hour. `build/hello_gpu --sim` is the simulator hello world. `python3 tools/figures/make_figures.py --check` checks the README figures. diff --git a/om/moe/.crumb b/om/moe/.crumb index 3794ff0d..169e761d 100644 --- a/om/moe/.crumb +++ b/om/moe/.crumb @@ -3,14 +3,14 @@ "generated": { "children": [], "children_root": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "compiled_at": "2026-10-28T17:07:44Z", + "compiled_at": "2026-10-31T02:21:32Z", "compiler": "crumb-compile/1", - "digest": "sha256:ffd66b6634b55e7e3d9780a321ad4c9bc4383b9c681f5a718479826cc0c71329", + "digest": "sha256:860df8a631262e15e20d1cb08f33090a8038ea5071a027ae157f53a93bb9f69f", "evidence_files": 0, "evidence_root": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "files": 17, - "generated_at_commit": "313fae26af8d0b9a26897a584efc3bfde358f7e6", - "source_tree": "sha256:0ec79f49af490b0b4d08109ab154971b22ee272e26c36543bf7fb296ad9db97b" + "generated_at_commit": "020a75246e76851eb37cd5c6c7cd5b07b20c0aed", + "source_tree": "sha256:a74e2ad255115f50654a809d5dc063d2fe61d39eb0f26e944b3ba0365e037814" } }, "name": "moe", diff --git a/tools/extract/.crumb b/tools/extract/.crumb index 4024be03..65ec14e0 100644 --- a/tools/extract/.crumb +++ b/tools/extract/.crumb @@ -3,14 +3,14 @@ "generated": { "children": [], "children_root": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "compiled_at": "2026-10-29T02:13:05Z", + "compiled_at": "2026-10-31T02:21:32Z", "compiler": "crumb-compile/1", - "digest": "sha256:d0c7122592333dfe6ea9a77efb7fa1722f69525ce0b4c1ef1fb774dd9c4da4dc", + "digest": "sha256:941b071e593ca84522bc6ba47d0f6fd4e72416db705ee68455e68e153019ca83", "evidence_files": 0, "evidence_root": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "files": 30, - "generated_at_commit": "c67fc2772186b35b562d5067449fb3dc8997bc57", - "source_tree": "sha256:6e807561b32f039d7bc048885a7f8ce3a9e96f42945f35deee971c1eb2407d24" + "generated_at_commit": "020a75246e76851eb37cd5c6c7cd5b07b20c0aed", + "source_tree": "sha256:e5dccccff9b40573054643c1eb851087e3f0a1b9c74a37579c7d59c28637e6fe" } }, "name": "extract",