66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
use std::fs::File;
|
|
use std::io::Write;
|
|
use std::path::PathBuf;
|
|
|
|
fn main() {
|
|
let out = PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
|
|
println!("cargo:rustc-link-search={}", out.display());
|
|
|
|
#[cfg(not(feature = "skip-cyw43-firmware"))]
|
|
download_cyw43_firmware();
|
|
|
|
// ARM build
|
|
|
|
let memory_x = include_bytes!("memory.x");
|
|
let mut f = File::create(out.join("memory.x")).unwrap();
|
|
f.write_all(memory_x).unwrap();
|
|
println!("cargo:rerun-if-changed=memory.x");
|
|
|
|
// RISC-V build
|
|
|
|
let rp235x_riscv_x = include_bytes!("rp235x_riscv.x");
|
|
let mut f = File::create(out.join("rp235x_riscv.x")).unwrap();
|
|
f.write_all(rp235x_riscv_x).unwrap();
|
|
println!("cargo:rerun-if-changed=rp235x_riscv.x");
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
}
|
|
|
|
/// Downloads to firmware for the Wi-Fi / Bluetooth chipset on the RPi Pico 2 W
|
|
#[cfg(not(feature = "skip-cyw43-firmware"))]
|
|
fn download_cyw43_firmware() {
|
|
let download_folder = "cyw43-firmware";
|
|
let url_base = "https://raw.githubusercontent.com/embassy-rs/embassy/refs/tags/cyw43-v0.3.0/cyw43-firmware";
|
|
let file_names = [
|
|
"43439A0.bin",
|
|
"43439A0_btfw.bin",
|
|
"43439A0_clm.bin",
|
|
"LICENSE-permissive-binary-license-1.0.txt",
|
|
"README.md",
|
|
];
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
println!("cargo:rerun-if-changed={}", download_folder);
|
|
std::fs::create_dir_all(download_folder).expect("failed to create firmware directory");
|
|
|
|
// download each file into the directory "cyw43-firmware"
|
|
for file in file_names {
|
|
let url = format!("{}/{}", url_base, file);
|
|
// only fetch if it doesn't exist
|
|
if std::path::Path::new(download_folder).join(file).exists() {
|
|
continue;
|
|
}
|
|
match reqwest::blocking::get(&url) {
|
|
Ok(response) => {
|
|
let content = response.bytes().expect("failed to read file content");
|
|
let file_path = PathBuf::from(download_folder).join(file);
|
|
std::fs::write(file_path, &content).expect("failed to write file");
|
|
}
|
|
Err(err) => panic!(
|
|
"failed to download the cyw43 firmware from {}: {}, required for BLE support",
|
|
url, err
|
|
),
|
|
}
|
|
}
|
|
}
|