SIGN IN SIGN UP

[Tool] Add official compile-only CLI (#3045)

* feat(tools): add official no-GPU compile-only entry (#2913)

TileLang has no first-class compile-only path for CPU-only CI.
This adds the official entry so later CE work can emit inspectable
kernel source without a GPU.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* feat(tools): strengthen optional compile-only CUDA target (#2913)

`--target cuda` should emit real CUDA C when the wheel has codegen FFI,
and soft-fail clearly on Metal-style wheels instead of an AttributeError.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* fix(tools): honor module order and CUDA target options (#2913)

discover_prim_func skipped an earlier PrimFunc when a later @jit existed,
and option-bearing CUDA strings skipped the FFI soft-fail.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(tools): drop stale --output_file when compile-only fails (#2913)

CE reuses the same output path; a failed run must not leave yesterday's
assembly. Unlink before compile, matching the CuTe wrapper.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(tools): reject JSON auto and pin bare CUDA JSON (#2913)

CodeRabbit: '{"kind":"auto"}' bypassed the auto ban, and
'{"kind":"cuda"}' skipped the sm_80 pin. Apply the same rules as
string targets.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(tools): refuse --output_file when it is the input (#2913)

Unlink-before-compile deleted example.py if someone passed the same
path twice. Compare resolved/samefile paths first.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* fix(tools): emit #line from compile-only when the pass exists (#2913)

Pass TL_EMIT_LINE_DIRECTIVES so CE can map generated C back to the
example. Older wheels do not register the key; skip it there.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* test(tools): require #line to name the input file and store line (#2913)

CodeRabbit: a bare "#line" token can pass on an unrelated directive.
Parse `#line N "file"` and match the example path plus the marked store.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* test(tools): give in-process #line lookup its own marker (#2913)

_marker_line scans the test file, so a shared line_marker_store hit the
example string (line 37) instead of _add (line 50). ROCm CI asserted that.

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>

* docs(tools): document the compile-only CLI (#2913)

Co-authored-by: Oliver Zhang <LibertychaserUS@users.noreply.github.com>

* docs(tools): document remaining compile-only helpers (#2913)

Co-authored-by: Oliver Zhang <LibertychaserUS@users.noreply.github.com>

---------

Signed-off-by: Oliver Zhang <zhiyuanzhang0904@163.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Oliver Zhang <LibertychaserUS@users.noreply.github.com>
O
Oliver Zhang committed
a2b992e72f6cdf7e0cce7caca626a3f72a60f40b
Parent: fded655
Committed by GitHub <noreply@github.com> on 8/25/2026, 6:11:20 AM