[{"data":1,"prerenderedAt":30},["ShallowReactive",2],{"chapter:vision-rs\u002Fdeployment\u002Fcross-compilation.json":3},{"project":4,"route":5,"title":6,"titleHtml":6,"navTitle":6,"part":7,"sourcePath":8,"editUrl":9,"html":10,"toc":11,"hasMermaid":22,"prev":23,"next":27},"vision-rs","\u002Fvision-rs\u002Fdeployment\u002Fcross-compilation","Building for Jetson Orin Nano","Cross-Compilation & Deployment","deployment\u002Fcross-compilation.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fvision-rs\u002Fedit\u002Fmain\u002Fbook\u002Fsrc\u002Fdeployment\u002Fcross-compilation.md","\u003Cp>vision-rs targets the Jetson Orin Nano (\u003Ccode>aarch64-unknown-linux-gnu\u003C\u002Fcode>) using\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcross-rs\u002Fcross\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Ccode>cross\u003C\u002Fcode>\u003C\u002Fa> via the \u003Ccode>cargo-teeny\u003C\u002Fcode> plugin.\u003C\u002Fp>\n\u003Ch2 id=\"additional-prerequisites\">Additional prerequisites\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>Install \u003Ccode>cross\u003C\u002Fcode>\u003C\u002Fstrong>:\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:#D8A76B\"> cross\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --git\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> https:\u002F\u002Fgithub.com\u002Fcross-rs\u002Fcross\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Add the aarch64 target\u003C\u002Fstrong>:\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">rustup\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> add\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> aarch64-unknown-linux-gnu\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CUDA aarch64 libraries\u003C\u002Fstrong> — the build mounts the host’s CUDA aarch64\ntarget directory into the cross container, so the cross-compiled binary\nlinks against the CUDA version actually present on the Jetson’s JetPack\n(independent of the host’s own CUDA 13.3, which is only used for\nAOT-compiling kernels). Default path:\u003Cpre class=\"code-panel\">\u003Ccode>\u002Fusr\u002Flocal\u002Fcuda-12.6\u002Ftargets\u002Faarch64-linux\n\u003C\u002Fcode>\u003C\u002Fpre>\nIf your device’s JetPack CUDA version differs, pass \u003Ccode>--cuda-path &lt;path&gt;\u003C\u002Fcode>\non every \u003Ccode>build\u003C\u002Fcode>\u002F\u003Ccode>package\u003C\u002Fcode> command below.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"building\">Building\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:#7F877D;font-style:italic\"># Build the library in release mode (default)\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>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F877D;font-style:italic\"># Build all examples \u002F a single example\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\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F877D;font-style:italic\"># Type-check only (faster feedback), or 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\"> check\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\"> clippy\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --target\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> jetson-orin-nano\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F877D;font-style:italic\"># Debug build\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>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7F877D;font-style:italic\"># Custom CUDA path (target device's JetPack CUDA version)\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\"> --cuda-path\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \u002Fusr\u002Flocal\u002Fcuda-12.8\u002Ftargets\u002Faarch64-linux\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Compiled artifacts land in \u003Ccode>target\u002Faarch64-unknown-linux-gnu\u002Frelease\u002F\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"how-it-works\">How it works\u003C\u002Fh2>\n\u003Cp>\u003Ccode>cargo teeny build\u003C\u002Fcode> wraps \u003Ccode>cross build\u003C\u002Fcode> and automatically:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Resolves the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fteenygrad\" target=\"_blank\" rel=\"noopener noreferrer\">teenygrad\u003C\u002Fa> workspace\nroot from \u003Ccode>Cargo.toml\u003C\u002Fcode>’s \u003Ccode>[patch.crates-io]\u003C\u002Fcode> entries and mounts it into\nthe cross container — required because \u003Ccode>cross\u003C\u002Fcode> only auto-mounts\nindividual crate directories, not the workspace root providing\n\u003Ccode>Cargo.toml\u003C\u002Fcode> inheritance.\u003C\u002Fli>\n\u003Cli>Mounts the host CUDA aarch64 target directory at the path the cross\ncontainer’s Dockerfile expects.\u003C\u002Fli>\n\u003Cli>Uses the custom image defined in \u003Ccode>docker\u002FDockerfile.jetson-orin-nano\u003C\u002Fcode>,\nwhich extends the \u003Ccode>cross\u003C\u002Fcode> base image with \u003Ccode>clang-12\u003C\u002Fcode> (required by\n\u003Ccode>bindgen\u003C\u002Fcode> for aarch64 cross-bindings).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Once you have a cross-compiled binary, see\n\u003Ca href=\"\u002Fvision-rs\u002Fdeployment\u002Fpackaging\">Packaging a Deployable Bundle\u003C\u002Fa> to combine it with\nahead-of-time-compiled kernels into something you can copy straight to the\ndevice.\u003C\u002Fp>\n",[12,16,19],{"id":13,"text":14,"level":15},"additional-prerequisites","Additional prerequisites",2,{"id":17,"text":18,"level":15},"building","Building",{"id":20,"text":21,"level":15},"how-it-works","How it works",false,{"title":24,"titleHtml":25,"route":26},"Benchmarking & Profiling","Benchmarking &amp; Profiling","\u002Fvision-rs\u002Fkernels-and-performance\u002Fbenchmarking",{"title":28,"titleHtml":28,"route":29},"Packaging a Deployable Bundle","\u002Fvision-rs\u002Fdeployment\u002Fpackaging",1786271830562]