# Build targets in Shodan repository

Here are lists of user-facing targets in Shodan. They are invoked with the
command of `m [make flags] <target>`.

## Build targets

| Target              | Source                          |  Output                | Description                                          |
| :-------------------| :-------------------------------| :----------------------| :----------------------------------------------------|
| prereqs             |                                 |                        | Install build prerequisites                          |
| tools               |                                 | cache                  | Install RISCV compiler and emulator tools, including |
|                     |                                 | out/host               | Rust, GCC, CLANG, `verilator`, `qemu`, `renode`      |
| kata                | kata/                           | out/kata               | SMC seL4 and user space applications                 |
| matcha_tock_release | sw/tock/boards/opentitan-matcha | out/tock-release       | The operating system running on the security core,   |
|                     | sw/libtock-rs                   | out/libtock-rs         | and its Rust library                                 |
| multihart_boot_rom  | sw/multihart_boot_rom           | out/shodan_boot_rom    | Shodan boot rom                                      |
| springbok           | sw/vec                          | out/springbok/rvv      | Vector core BSP and RVV test code                    |
| iree_compiler       |                                 | out/host/iree_compiler | IREE host compiler                                   |
| iree_runtime        | toolchain/iree                  | out/springbok_iree     | IREE runtime applications                            |
|                     | sw/vec_iree                     |                        |                                                      |
| iree                |                                 |                        | Shorthand for `iree_compiler` and `iree_runtime`     |
| opentitan_sw_all    | hw/opentitan                    | out/opentitan          | HW testing binaries                                  |
| qemu                | toolchain/ristv-qemu            | out/host/qemu          | QEMU emulator                                        |
| renode              | sim/renode                      | out/host/renode        | Renode emulator                                      |
| spike               | toolchain/spike                 | out/host/spike         | RISC-V ISA simulator (Spike)                         |
| systemc             | sim/systemc                     | out/host/systemc       | libsystemc library                                   |
| springbok_systemc   | hw/springbok/systemc            | out/springbok/systemc  | Springbok systemc implementation                     |
| verilator           | sim/verilator                   | out/host/verilator     | System Verilog HW emulator                           |
| simulate            |                                 |                        | E2E build and launch renode simulation.              |
|                     |                                 |                        | Targets include `matcha_tock_release`,               |
|                     |                                 |                        | `kata-bundle-release`, `multihart_boot_rom`, `iree`  |
| debug-simulation    |                                 |                        | Debug version of `simulate` to be used with GDB,     |
|                     |                                 |                        | tock target is `matcha_tock_debug`; kata is          |
|                     |                                 |                        | `kata-bundle-debug`.

## Clean targets

| Target               | Description                             |
| :--------------------| :---------------------------------------|
| clean                | Remove the whole out directory          |
| qemu_clean           | Remove out/host/qemu                    |
| renode_clean         | Remove out/host/renode                  |
| spike_clean          | Remove out/host/spike                   |
| verilator_clean      | Remove out/host/verilator               |
| toolchain_clean      | Remove cache/toolchain                  |
| toolchain_llvm_clean | Remove cache/toolchain_iree_rv32imf     |
| opentitan_sw_clean   | Remove out/opentitan                    |
| tock_clean           | Clean out/tock-debug                    |
|                      | and out/tock-release (`make clean`)     |

## Optional toolchain targets (Used upon request)

The following targets ***should not*** be called in the typical development.
They should be called by CI and only upon request, i.e., *NOT* be built
regularly.

| Target               | Description                                        |
| :--------------------| :--------------------------------------------------|
| toolchain            | Build GCC toolchain for the security core/SMC      |
| toolchain_llvm       | Build LLVM toolchain for the vector core           |
| toolchain_vp         | (Optional) Build GCC toolchain for the vector core |
