Getting Started with KubOS and Rust

This document will cover getting started using Rust for local KubOS development. You will need to have the build dependencies listed in local build dependencies installed prior to using Rust. After these dependencies have been installed, you are ready to begin creating and running your own Rust projects.

New Project

A new Rust project can be created by running the following command:

$ cargo new project_name

Cargo will create the project folder and a basic folder structure. It is suggested that you create custom mission applications or services outside of the Kubos source repo, preferably in your own project’s repo folder.

Compiling and Running

To compile the project use the normal Cargo build command:

$ cargo build

This command should be run from within the project’s directory, which was generated by the cargo new command.

The resulting binary will be located in {project directory}/target/debug/{project name}.

The binary can be run locally using the cargo run command. Any desired arguments can be passed to the underlying executable by placing them behind -- like so:

$ cargo run -- -c config.toml

Making Rust Binaries Smaller

By default, Rust binaries can be quite large. These are some steps which we recommend in order to drastically shrink the size of your compiled application:

  • Do a release build, rather than a debug build (cargo build --release)

  • Add the following optimization args to your Cargo.toml file and recompile:

    lto = true
    opt-level = "z"
    panic = "abort"
    codegen-units = 1
  • After the binary has been built, run arm-linux-strip /path/to/binary

Next Steps

Ready to create a mission application in Rust? Take a look at the Python mission application tutorial for guidance in the construction of a mission application. The example rust mission application is a good model for a Rust-based mission application.

Interested in cross-compiling your project for use on hardware? Take a look at the local cross-compiling guide.

Interested in working on the KubOS Rust source or contributing back? Take a look at the Contributing to KubOS docs.