Boards and targets
A board is the concrete thing NSX builds for. Picking one fixes the SoC, the CPU and ABI flags, the startup and linker behavior, the flash and SWO settings, and which SDK provider the app resolves against.
What a board definition carries
Section titled “What a board definition carries”Each packaged board is a directory under the NSX package holding a board.yaml descriptor
plus the CMake fragments that implement it. The descriptor for apollo510_evb is:
schema_version: 1board: name: apollo510_evb tier: evb soc: apollo510 registered: truesdk_provider: ambiqsuitecpu: core: cortex-m55 float_abi: hard abi: thumbv8.1m-fpv5-hardtoolchains: - arm-none-eabi-gcc - armclang - atfetoolchains is the set the board declares it can be built with. tier distinguishes an
evaluation board from an FPGA platform. Every field is documented on the generated
board.yaml reference.
Alongside board.yaml the board ships board.cmake, bsp.cmake, soc.cmake,
memory.cmake and debug.cmake. Those are what nsx configure vendors into
boards/<board>/ in your app, and between them they select the startup file and the
linker script for the target. See
Startup and linker.
The packaged boards
Section titled “The packaged boards”nsx board listBOARD SOC TIER PROVIDERapollo2_evb apollo2 evb ambiqsuiteapollo330mP_evb apollo330P evb ambiqsuiteapollo3_evb apollo3 evb ambiqsuiteapollo3_evb_cygnus apollo3 evb ambiqsuiteapollo3p_evb apollo3p evb ambiqsuiteapollo3p_evb_cygnus apollo3p evb ambiqsuiteapollo4l_blue_evb apollo4l evb ambiqsuiteapollo4l_evb apollo4l evb ambiqsuiteapollo4p_blue_kbr_evb apollo4p evb ambiqsuiteapollo4p_blue_kxr_evb apollo4p evb ambiqsuiteapollo4p_evb apollo4p evb ambiqsuiteapollo4p_evb_disp_shield_rev2 apollo4p evb ambiqsuiteapollo510_evb apollo510 evb ambiqsuiteapollo510b_evb apollo510b evb ambiqsuiteapollo510dL_evb apollo510L evb ambiqsuiteapollo5b_evb apollo5b evb ambiqsuiteatomiq110_fpga_turbo atomiq110 fpga ambiqsuitensx board list --json adds the CPU core, float ABI, ABI string and declared toolchains
for each entry, and nsx board show <board> prints one board in full. The
board matrix is the same data rendered as a page.
How an app declares its target
Section titled “How an app declares its target”A freshly generated app declares one board:
target: board: apollo510_evbThe manifest also accepts a multi-target form, which is what the packaged examples use:
targets: default: apollo510_evb supported: - apollo510_evb - apollo510b_evb - apollo330mP_evb - apollo510dL_evb - apollo4p_blue_kxr_evbdefault is the board used when you do not say otherwise. supported is the set that
--board will accept. Every field is on the generated
nsx.yml reference.
Selecting a target for one run
Section titled “Selecting a target for one run”nsx build --board apollo4p_blue_kxr_evb--board works on configure, build, flash, view and clean. It does not change
nsx.yml; it selects which declared target this invocation acts on.
Each board gets its own build/<board>/ directory, so switching back and forth does not
throw away the other target’s build tree. nsx.lock likewise records one resolved module
set per board, because two boards on different SoC families can legitimately resolve
different modules.
Adding a second target
Section titled “Adding a second target”- Add the board to
targets.supportedinnsx.yml. - Run
nsx lockso the new board gets its own resolved section innsx.lock. - Build it with
nsx build --board <new-board>.
If the new board’s closure cannot be satisfied, the lock step is where you find out, not the build. Source that needs to differ per family belongs in a per-family overlay rather than behind preprocessor conditionals; see Multi-target and portability.
Boards NSX does not package
Section titled “Boards NSX does not package”nsx board create scaffolds a board definition you own, which you then fill in with the
same fragments a packaged board ships. The practical constraint is that the SoC, the
startup path and the SDK provider have to line up before an app will build against it.
Add a board covers the work and the
order to do it in.
Compatibility is declared
Section titled “Compatibility is declared”Every statement a board or a module makes about what it works with comes from a manifest
its author wrote. A board declaring atfe in toolchains, or a module declaring a board
in compatibility.boards, is a declaration of intent, not a record that the combination
was run on hardware. Treat the matrix as the starting point for a bring-up, not as
evidence of one.