# Springbok Model Execution Repository

This project contains ML model codegen and execution libraries/examples. The
artifacts built from this project is targeted for RISC-V 32-bit baremetal machine
(Springbok).

## Prerequisite

If you get this project from Project Shodan manifest, you are all set. If not,
you need to have following projects as well to build the project successfully.

* [Springbok BSP](https://spacebeaker.googlesource.com/shodan/sw/vec): Under `<dir>/sw/vec`
* [IREE](https://github.com/google/iree): Under `<dir>/toolchain/iree`
* [Public ML models](https://spacebeaker.googlesource.com/shodan/ml-models-public): Under `<dir>/ml/ml-models-public`
* RISC-V 32-bit crosscompile toolchain

This project needs to be at `<dir>/sw/vec_iree`

## Code structure

* audio_prep: Audio preprocessing libarary
* build_tools: Utility scripts for the project
* cmake: CMake Macros for the project
* device: Device HAL driver library
* model_util: Runtime utility library for model execution
* native_log: BSP support for the Linux userspace emulation
* risp4ml: Vision preprocessing library (Reduced ISP for ML)
* samples: Codegen and execution of ML models based on IREE
  * simple_vec_mul: Point-wise vector multiplication examples
* ssd_postprocess: Vision postprocessing library for Single-Shot Detectors (SSD)

## Build the project

If you are running from Project Shodan repo, you can build the artifacts with `m iree`.
If you download this project alone, you need to download/build IREE's host compiler,
then at the top level directory

```bash
  cmake -B <output dir> -G Ninja \
     -DCMAKE_TOOLCHAIN_FILE="$(realpath sw/vec_iree/cmake/riscv_iree.cmake)" \
     -DCMAKE_BUILD_TYPE=MinSizeRel \
     -DIREE_HOST_BINARY_ROOT="$(IREE_COMPILER_DIR)/install" \
     -DRISCV_TOOLCHAIN_ROOT=$(TOOLCHAINRV32_PATH) \
     <dir>/sw/vec_iree
  cmake --build <output dir> --target all
```

## Run the executables

You can run QEMU or RENODE emulation with the built executables. In Shodan repo,
`qemu_sim_springbok` for QEMU emulation, and `sim_springbok` for Renode simulation.
Out-of-repo emulation is possible but require more steps.

## Test the executables

In Shodan, this project utilizes LLVM `lit` and `FileCheck` to test the ML
executable performance. The tests are defined in the *_test.run files under
`<output dir>`. To run the test, at the Shodan top level directory

```bash
lit --path <Filecheck dir> -a <output dir>
```

Filecheck in Debian testing is under `/usr/lib/llvm-11/bin`

Add `-D RUNNER=qemu` to enable the qemu tests.
