[{"data":1,"prerenderedAt":34},["ShallowReactive",2],{"chapter:cargo-teeny\u002FREADME.json":3},{"project":4,"route":5,"title":4,"titleHtml":4,"navTitle":4,"part":6,"sourcePath":7,"editUrl":8,"html":9,"toc":10,"hasMermaid":33,"prev":6,"next":6},"cargo-teeny","\u002Fcargo-teeny",null,"README.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fcargo-teeny\u002Fedit\u002Fmain\u002FREADME.md","\u003Cp>Cargo commands for the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fteenygrad\" target=\"_blank\" rel=\"noopener noreferrer\">teenygrad\u003C\u002Fa> toolchain: install the\ncustom \u003Ccode>teenyc\u003C\u002Fcode> compiler, cross-compile and package a project for a target board, ahead-of-time\ncompile its GPU kernels, and deploy the result over SSH.\u003C\u002Fp>\n\u003Ch2 id=\"installation\">Installation\u003C\u002Fh2>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> install\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --git\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fcargo-teeny\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Once installed, subcommands are invoked as \u003Ccode>cargo teeny &lt;subcommand&gt;\u003C\u002Fcode> (cargo strips the \u003Ccode>cargo-\u003C\u002Fcode>\nprefix). Run \u003Ccode>cargo teeny --help\u003C\u002Fcode> or \u003Ccode>cargo teeny &lt;subcommand&gt; --help\u003C\u002Fcode> for the full flag\nreference — this README covers the concepts and common invocations.\u003C\u002Fp>\n\u003Ch2 id=\"cargo-teeny-install-toolchain\">\u003Ccode>cargo teeny install-toolchain\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Installs the custom \u003Ccode>teenyc\u003C\u002Fcode> compiler from the spinorml CDN and registers it with rustup, so it\ncan be invoked directly (\u003Ccode>rustup run teenyc teenyc …\u003C\u002Fcode>, or via \u003Ccode>rustup which --toolchain teenyc teenyc\u003C\u002Fcode> for the raw binary path) without going through \u003Ccode>cargo\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Ccode>rustup toolchain install\u003C\u002Fcode> can’t be used here — rustup only accepts \u003Ccode>stable\u003C\u002Fcode>\u002F\u003Ccode>beta\u003C\u002Fcode>\u002F\u003Ccode>nightly\u003C\u002Fcode> or a\nbare version number as a toolchain name, checked before any network call. So this instead\ndownloads the package tarball named in the channel manifest, verifies its sha256, extracts it,\nand registers it with \u003Ccode>rustup toolchain link\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>The default package (\u003Ccode>teenyc\u003C\u002Fcode>) is compiler-only — no \u003Ccode>std\u003C\u002Fcode>\u002F\u003Ccode>cargo\u003C\u002Fcode> — so it can run \u003Ccode>teenyc --version\u003C\u002Fcode> or compile with \u003Ccode>#![no_std]\u003C\u002Fcode> but can’t drive a normal \u003Ccode>cargo build\u003C\u002Fcode>. It is never set as\nyour rustup default unless you pass \u003Ccode>--default\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> install-toolchain\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Pass \u003Ccode>--local-dir &lt;path&gt;\u003C\u002Fcode> to install from a local staging directory (same layout the CDN serves)\ninstead of hitting the network — useful for testing a freshly built toolchain before publishing it.\u003C\u002Fp>\n\u003Ch2 id=\"cross-compilation-build--check--clippy\">Cross-compilation: \u003Ccode>build\u003C\u002Fcode> \u002F \u003Ccode>check\u003C\u002Fcode> \u002F \u003Ccode>clippy\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Cross-compiles the current crate for a target board via \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcross-rs\u002Fcross\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Ccode>cross\u003C\u002Fcode>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> check\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">          # type-check only, faster feedback\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> clippy\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">          # lint\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --examples\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --example\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> yolo26\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --no-release\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">  # debug build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Automatically:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Resolves the teenygrad workspace root from the invoking project’s \u003Ccode>[patch.crates-io]\u003C\u002Fcode> entries\nand mounts it into the cross container — \u003Ccode>cross\u003C\u002Fcode> only auto-mounts individual crate directories,\nnot the workspace root needed for \u003Ccode>Cargo.toml\u003C\u002Fcode> inheritance.\u003C\u002Fli>\n\u003Cli>Mounts the host’s CUDA aarch64 target directory (override with \u003Ccode>--cuda-path\u003C\u002Fcode>) at the path the\nboard’s cross image expects.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"cargo-teeny-sysroot\">\u003Ccode>cargo teeny sysroot\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Lays out an empty FHS-style sysroot tree for a board (GCC\u002FClang-style cross links), optionally\nmirroring remote directories into it via \u003Ccode>rsync\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> sysroot\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --host\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> aarch64-unknown-linux-gnu\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --path\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .\u002Fsysroot\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --type\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F877D;font-style:italic\"># with an rsync pull from the device afterward:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> sysroot\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --host\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> aarch64-unknown-linux-gnu\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --path\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .\u002Fsysroot\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --type\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --rsync-from\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> ubuntu@jetson\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>A marker file (\u003Ccode>.cargo-teeny-sysroot\u003C\u002Fcode>) is written recording the version, host triple, type, and\n(if used) rsync metadata.\u003C\u002Fp>\n\u003Ch2 id=\"cargo-teeny-aot\">\u003Ccode>cargo teeny aot\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Builds a binary\u002Fexample for the \u003Cstrong>host\u003C\u002Fstrong> (not cross-compiled) and runs it to ahead-of-time compile\nGPU kernels for a given device\u002Fconfig — unlike \u003Ccode>build\u003C\u002Fcode>\u002F\u003Ccode>check\u003C\u002Fcode>\u002F\u003Ccode>clippy\u003C\u002Fcode>, which target a board.\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> aot\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --example\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --device\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> cuda\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --options\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">capability=sm_87,ptx-version=82\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>--device\u003C\u002Fcode>\u002F\u003Ccode>--options\u003C\u002Fcode>\u002F\u003Ccode>--cache-dir\u003C\u002Fcode>\u002F\u003Ccode>--force\u003C\u002Fcode> are forwarded verbatim to the resulting binary;\ncargo-teeny never parses them itself — the binary (typically linking \u003Ccode>teeny-cli\u003C\u002Fcode>) does.\u003C\u002Fp>\n\u003Ch2 id=\"cargo-teeny-package\">\u003Ccode>cargo teeny package\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Assembles a self-contained deployment package for a board in one step: cross-compiles the\nbinary\u002Fexample (delegating to \u003Ccode>build\u003C\u002Fcode>) and AOT-compiles its kernels on the host (delegating to\n\u003Ccode>aot\u003C\u002Fcode>, with \u003Ccode>--cache-dir\u003C\u002Fcode> forced to \u003Ccode>&lt;dest&gt;\u002Fcache\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> package\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --example\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --dest\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .\u002Fdist\u002Fyolo26-orin\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --device\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> cuda\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --options\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">capability=sm_87,ptx-version=82\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Produces:\u003C\u002Fp>\n\u003Cpre class=\"code-panel\" data-lang=\"text\">\u003Ccode>dist\u002Fyolo26-orin\u002F\n  bin\u002F       # cross-compiled binary\u002Fexample\n  cache\u002F     # AOT-compiled GPU kernels\n  conf\u002F      # provenance marker (target\u002Fdevice\u002Foptions\u002Fcommit\u002Fbuild time)\n  data\u002F      # empty -- populate with models\u002Fdatasets separately\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"cargo-teeny-deploy\">\u003Ccode>cargo teeny deploy\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cp>Pushes a package directory (from \u003Ccode>package\u003C\u002Fcode>) to a remote host over \u003Ccode>rsync\u003C\u002Fcode>\u002FSSH.\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> teeny\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> deploy\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --package\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .\u002Fdist\u002Fyolo26-orin\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --host\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> ubuntu@jetson\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --dest\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \u002Fhome\u002Fubuntu\u002Fyolo26\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>Uses \u003Ccode>rsync -a -e &lt;ssh&gt;\u003C\u002Fcode>; stdio is inherited, so an interactive password prompt (no key-based\nauth configured) passes straight through.\u003C\u002Fli>\n\u003Cli>By default only copies files that aren’t already on the remote (\u003Ccode>--ignore-existing\u003C\u002Fcode>, safe to\nre-run after a partial transfer). Pass \u003Ccode>--overwrite\u003C\u002Fcode> to force a full re-sync.\u003C\u002Fli>\n\u003Cli>\u003Ccode>--ssh &quot;ssh -p 2222&quot;\u003C\u002Fcode> for a non-default port.\u003C\u002Fli>\n\u003C\u002Ful>\n",[11,15,18,21,24,27,30],{"id":12,"text":13,"level":14},"installation","Installation",2,{"id":16,"text":17,"level":14},"cargo-teeny-install-toolchain","cargo teeny install-toolchain",{"id":19,"text":20,"level":14},"cross-compilation-build--check--clippy","Cross-compilation: build \u002F check \u002F clippy",{"id":22,"text":23,"level":14},"cargo-teeny-sysroot","cargo teeny sysroot",{"id":25,"text":26,"level":14},"cargo-teeny-aot","cargo teeny aot",{"id":28,"text":29,"level":14},"cargo-teeny-package","cargo teeny package",{"id":31,"text":32,"level":14},"cargo-teeny-deploy","cargo teeny deploy",false,1786271830624]