mg24-install 0.1.0

Install and setup MG24 SDK folders automatically for mg24-hal
use fs_extra::dir::{CopyOptions, copy as copy_dir};
use std::fs;
use std::path::{Path, PathBuf};

fn copy_subfolders(src: &Path, target: &Path) -> Result<(), Box<dyn std::error::Error>> {
    if !src.exists() {
        return Err(format!("Source folder does not exist: {}", src.display()).into());
    }

    fs::create_dir_all(target)?;

    for entry in fs::read_dir(src)? {
        let entry = entry?;
        let path = entry.path();
        if path.is_dir() {
            let mut options = CopyOptions::new();
            options.copy_inside = true;
            copy_dir(path, target, &options)?;
        }
    }

    Ok(())
}

fn main() {
    let home_dir = dirs::home_dir().expect("cant find hoem directory");
    let gecko_sdk = home_dir.join("Downloads").join("gecko-sdk");
    let mg24 = home_dir.join(".mg24");
    let cmsis = home_dir.join(".cmsis");
    let emlib = home_dir.join(".emlib");
    assert!(gecko_sdk.exists(), "the gecko-sdk folder is not installed");

    fs::create_dir_all(&mg24).unwrap();
    fs::create_dir_all(&cmsis).unwrap();
    fs::create_dir_all(&emlib).unwrap();

    let cmsis_folder = gecko_sdk.join("platform").join("CMSIS");
    copy_subfolders(&cmsis_folder, &cmsis).expect("Failed Copying CMSIS Files");
    println!("CMSIS copied to {}", cmsis.display());

    let emlib_folder = gecko_sdk.join("platform").join("emlib");
    copy_subfolders(&emlib_folder, &emlib).expect("Failed Copying Emlib Files");
    println!("Emlib copied to {}", emlib.display());

    let device_folder = gecko_sdk
        .join("platform")
        .join("Device")
        .join("SiliconLabs")
        .join("EFR32MG24");
    copy_subfolders(&device_folder, &mg24).expect("Failed Copying Device Files");
    println!("Device Files copied to {}", mg24.display());

    println!("Done now you can use the mg24-hal");
    println!(
        "WRANING: Please make sure you installed arm-none-eabi-gcc compiler and add it to the enviroment path"
    );
}