How to build for ARM Tegra devices
Only Orin (sm_87) / Jetpack 6 and later Tegra devices are supported.
A separate Tegra variant is needed for CUDA 12.9 only. Starting with CUDA 13.0 and Jetpack 7, new Tegra devices are SBSA-compliant, so building a separate variant for Tegra devices is not required.
The CUDA compiler toolchain treats Tegra ARM (aarch64) and SBSA ARM (sbsa) as separate compilation targets, and device code compiled for one is not interchangeable with the other, so one build cannot service all variants. The arm-variant package allows end-users to select which variant of the CUDA ARM packages is installed into their environment.
To build for both SBSA ARM and Tegra ARM devices, make the following changes to your feedstock:
-
Add the
arm-variantpackage to the recipe's build environment(s) to constrain the CUDA compiler toolchain.For example:
- v0 (meta.yaml)
- v1 (recipe.yaml)
# A fake selector may also be needed for conda-build to pick up arm_variant_type as a variant
# [arm_variant_type]
requirements:
build:
- {{ compiler('cuda') }}
- arm-variant * {{ arm_variant_type }} # [linux and aarch64 and cuda_compiler_version != "None"]
requirements:
build:
- ${{ compiler('cuda') }}
- if: linux and aarch64 and cuda_compiler_version != "None"
then: arm-variant * ${{ arm_variant_type }}
Building with the arm-variant package will produce overlinking warnings from
conda-build. This is expected and may be safely ignored.
-
Add the
arm_variant_type.yamlmigrator to the.ci_support/migrationsfolder.You can download this migrator from https://github.com/conda-forge/conda-forge-pinning-feedstock/tree/main/recipe/migrations. It adds the
arm_variant_typevariable to the build matrix for CUDA 12.9 only and sets a higherc_stdlib_version. -
Enable the ARM platform for linux in
conda-forge.yml. Tegra variants may be built on linux-aarch64 runners or cross-compiled from linux-64 runners using the usual cross-compiling setup.For example:
provider:linux_aarch64: default