Skip to main content

Minimal

Minimal example: write the script, run it on the DevKit, and confirm the runtime responds

After installation, start here to confirm your Neat setup is wired correctly.

This page keeps the first run intentionally small: create a tiny app, confirm the headers/imports resolve and it builds, and run it on the DevKit to confirm the runtime responds. Once this works, continue to Run an App to run a real model inside a small Graph application.

Neat Development Environment Prerequisite

To run commands on the DevKit directly from inside the SDK (for example, dk build/sima_neat_hello or dk hello_neat.py), set up DevKit pairing first.

Required setup: Pair the Neat Development Environment with a DevKit

Minimal application

Create a working directory for the example, then use the Python / C++ tabs to follow your language. Your choice follows the site-wide language selector, so it stays consistent across the docs.

Create two files:

  1. CMakeLists.txt tells CMake how to build and link the app.

    CMakeLists.txt
    cmake_minimum_required(VERSION 3.16)
    project(sima_neat_hello LANGUAGES CXX)

    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_CXX_EXTENSIONS OFF)

    # Supports both:
    # - DevKit/native installs (system paths)
    # - Cross builds with SYSROOT exported (SDK sysroot paths)
    if(DEFINED ENV{SYSROOT} AND NOT "$ENV{SYSROOT}" STREQUAL "")
    list(APPEND CMAKE_PREFIX_PATH
    "$ENV{SYSROOT}/usr"
    "$ENV{SYSROOT}/usr/lib"
    "$ENV{SYSROOT}/usr/lib/aarch64-linux-gnu"
    )
    endif()

    find_package(SimaNeat REQUIRED CONFIG)
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(OPENCV REQUIRED IMPORTED_TARGET opencv4)

    add_executable(sima_neat_hello main.cpp)
    target_link_libraries(sima_neat_hello
    PRIVATE
    SimaNeat::sima_neat
    PkgConfig::OPENCV
    )

    The two highlighted lines are what pull Neat into your build: find_package(SimaNeat REQUIRED CONFIG) locates the installed Neat package, and target_link_libraries(sima_neat_hello PRIVATE SimaNeat::sima_neat ...) links your executable against it — the imported SimaNeat::sima_neat target also brings in Neat's headers and transitive dependencies, so you set no include or library paths by hand. (The OpenCV lines are only here because this example decodes an image.)

  2. main.cpp contains the tiny Neat program.

    main.cpp
    #include <iostream>
    #include <pipeline/TensorCore.h>

    int main() {
    auto storage = simaai::neat::make_cpu_owned_storage(64);
    if (!storage) {
    std::cerr << "Failed to allocate CPU tensor storage\n";
    return 1;
    }
    std::cout << "Hello from sima-neat\n";
    return 0;
    }
  3. Your working directory should look like this:

    sima-neat-hello/
    ├── CMakeLists.txt
    └── main.cpp

Build the example:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

Run:

  • On the DevKit
    ./build/sima_neat_hello
  • On the Neat SDK from host
    dk build/sima_neat_hello

You should see:

Hello from sima-neat

If the program builds, the imports resolve, and it prints the greeting, your Neat installation is ready.

About dk / devkit-run

dk (alias for devkit-run) is a shell function in the SDK container, defined in ~/devkit-sync.rc and loaded by ~/.bashrc.

Because it is a shell function, commands such as which devkit-run may return nothing in the SDK shell. Use dk <file> to execute a built binary or Python entry-point file on the paired DevKit.

Next

Once the minimal app works, continue with Run an App to run a real object-detection model inside a small Graph application.