--- title: "compiling" date: 2025-02-20 draft: false description: "How to compile the project" tags: ["clone", "compile"] --- # Preconditions: * **Rust:** `rustup` installed. * **ESP32 Toolchain:** `espup` installed. * **Build Utilities:** `ldproxy` and `espflash` installed. * **Node.js:** `npm` installed (for the web interface). # Cloning the Repository Clone the repository including submodules: ```bash git clone --recursive https://git.mannheim.ccc.de/C3MA/PlantCtrl.git cd PlantCtrl/Software/MainBoard/rust ``` # Toolchain Setup 1. **Install Rust:** If not already done, visit [rustup.rs](https://rustup.rs/). 2. **Install ldproxy:** ```bash cargo install ldproxy ``` 3. **Install espup:** ```bash cargo install espup ``` 4. **Install ESP toolchain:** ```bash espup install ``` 5. **Install espflash:** ```bash cargo install espflash ``` # Building the Web Interface The configuration website is built using TypeScript and Webpack, then embedded into the Rust binary. ```bash cd src_webpack/ npm install npx webpack cd .. ``` # Compiling the Firmware Build the project using Cargo: ```bash cargo build --release ``` The resulting binary will be located in `target/riscv32imac-unknown-none-elf/release/plant-ctrl2`. # Using Build Scripts To simplify the process, several bash scripts are provided in the `Software/MainBoard/rust` directory: * **`image_build.sh`**: Automatically builds the web interface, compiles the Rust firmware in release mode, and creates a flashable `image.bin`. * **`all.sh`**: Performs all steps from `image_build.sh` and additionally flashes the firmware to a connected device and starts the serial monitor. * **`wokwi_build.sh`**: Builds a debug version of the firmware and creates a full 16MB flash image for use with the [Wokwi simulator](https://wokwi.com).