265 lines
10 KiB
Rust
265 lines
10 KiB
Rust
use std::{
|
|
env,
|
|
fs::{self, File},
|
|
io::Write,
|
|
path::PathBuf,
|
|
};
|
|
|
|
use anyhow::Result;
|
|
|
|
fn main() -> Result<()> {
|
|
// Put the linker script somewhere the linker can find it
|
|
let out = PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
|
|
|
#[cfg(feature = "esp32")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
#[cfg(feature = "esp32c2")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32c2")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
#[cfg(feature = "esp32c3")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32c3")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
#[cfg(feature = "esp32c6")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32c6")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
#[cfg(feature = "esp32s2")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32s2")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
#[cfg(feature = "esp32s3")]
|
|
{
|
|
configure_linker_for_chip(&out, "esp32s3")?;
|
|
copy_libraries(&out)?;
|
|
}
|
|
|
|
println!("cargo:rustc-link-search={}", out.display());
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn configure_linker_for_chip(out: &PathBuf, chip: &str) -> Result<()> {
|
|
// Copy the linker script containg the ROM function definitions to the
|
|
// `out` directory:
|
|
copy_file(
|
|
out,
|
|
&format!("ld/{chip}/rom_functions.x"),
|
|
"rom_functions.x",
|
|
)
|
|
}
|
|
|
|
fn copy_file(out: &PathBuf, from: &str, to: &str) -> Result<()> {
|
|
let mut file = File::create(out.join(to))?;
|
|
file.write_all(&fs::read(from)?)?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "ld/esp32/rom_functions.x", "esp32_rom_functions.x")?;
|
|
copy_file(out, "libs/esp32/libbtdm_app.a", "libbtdm_app.a")?;
|
|
copy_file(out, "libs/esp32/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32/libmesh.a", "libmesh.a")?;
|
|
copy_file(out, "libs/esp32/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32/librtc.a", "librtc.a")?;
|
|
copy_file(out, "libs/esp32/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(out, "libs/esp32/libwapi.a", "libwapi.a")?;
|
|
copy_file(out, "libs/esp32/libwpa_supplicant.a", "libwpa_supplicant.a")?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "btdm_app");
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "mesh");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "rtc");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wapi");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32c2")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "libs/esp32c2/libble_app.a", "libble_app.a")?;
|
|
copy_file(out, "libs/esp32c2/libbtbb.a", "libbtbb.a")?;
|
|
copy_file(out, "libs/esp32c2/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32c2/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32c2/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32c2/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32c2/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32c2/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32c2/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(
|
|
out,
|
|
"libs/esp32c2/libwpa_supplicant.a",
|
|
"libwpa_supplicant.a",
|
|
)?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "ble_app");
|
|
println!("cargo:rustc-link-lib={}", "btbb");
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32c3")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "libs/esp32c3/libbtbb.a", "libbtbb.a")?;
|
|
copy_file(out, "libs/esp32c3/libbtdm_app.a", "libbtdm_app.a")?;
|
|
copy_file(out, "libs/esp32c3/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32c3/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32c3/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32c3/libmesh.a", "libmesh.a")?;
|
|
copy_file(out, "libs/esp32c3/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32c3/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32c3/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32c3/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(out, "libs/esp32c3/libwapi.a", "libwapi.a")?;
|
|
copy_file(
|
|
out,
|
|
"libs/esp32c3/libwpa_supplicant.a",
|
|
"libwpa_supplicant.a",
|
|
)?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "btbb");
|
|
println!("cargo:rustc-link-lib={}", "btdm_app");
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "mesh");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wapi");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32c6")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "libs/esp32c6/libbtbb.a", "libbtbb.a")?;
|
|
copy_file(out, "libs/esp32c6/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32c6/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32c6/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32c6/libmesh.a", "libmesh.a")?;
|
|
copy_file(out, "libs/esp32c6/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32c6/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32c6/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32c6/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(out, "libs/esp32c6/libwapi.a", "libwapi.a")?;
|
|
copy_file(
|
|
out,
|
|
"libs/esp32c6/libwpa_supplicant.a",
|
|
"libwpa_supplicant.a",
|
|
)?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "btbb");
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "mesh");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wapi");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32s2")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "ld/esp32s2/rom_functions.x", "esp32s2_rom_functions.x")?;
|
|
copy_file(out, "libs/esp32s2/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32s2/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32s2/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32s2/libmesh.a", "libmesh.a")?;
|
|
copy_file(out, "libs/esp32s2/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32s2/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32s2/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32s2/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(out, "libs/esp32s2/libwapi.a", "libwapi.a")?;
|
|
copy_file(
|
|
out,
|
|
"libs/esp32s2/libwpa_supplicant.a",
|
|
"libwpa_supplicant.a",
|
|
)?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "mesh");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wapi");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(feature = "esp32s3")]
|
|
fn copy_libraries(out: &PathBuf) -> Result<()> {
|
|
copy_file(out, "ld/esp32s3/rom_functions.x", "esp32s3_rom_functions.x")?;
|
|
copy_file(out, "libs/esp32s3/libbtbb.a", "libbtbb.a")?;
|
|
copy_file(out, "libs/esp32s3/libbtdm_app.a", "libbtdm_app.a")?;
|
|
copy_file(out, "libs/esp32s3/libcoexist.a", "libcoexist.a")?;
|
|
copy_file(out, "libs/esp32s3/libcore.a", "libcore.a")?;
|
|
copy_file(out, "libs/esp32s3/libespnow.a", "libespnow.a")?;
|
|
copy_file(out, "libs/esp32s3/libmesh.a", "libmesh.a")?;
|
|
copy_file(out, "libs/esp32s3/libnet80211.a", "libnet80211.a")?;
|
|
copy_file(out, "libs/esp32s3/libphy.a", "libphy.a")?;
|
|
copy_file(out, "libs/esp32s3/libpp.a", "libpp.a")?;
|
|
copy_file(out, "libs/esp32s3/libsmartconfig.a", "libsmartconfig.a")?;
|
|
copy_file(out, "libs/esp32s3/libwapi.a", "libwapi.a")?;
|
|
copy_file(
|
|
out,
|
|
"libs/esp32s3/libwpa_supplicant.a",
|
|
"libwpa_supplicant.a",
|
|
)?;
|
|
|
|
println!("cargo:rustc-link-lib={}", "btbb");
|
|
println!("cargo:rustc-link-lib={}", "btdm_app");
|
|
println!("cargo:rustc-link-lib={}", "coexist");
|
|
println!("cargo:rustc-link-lib={}", "core");
|
|
println!("cargo:rustc-link-lib={}", "espnow");
|
|
println!("cargo:rustc-link-lib={}", "mesh");
|
|
println!("cargo:rustc-link-lib={}", "net80211");
|
|
println!("cargo:rustc-link-lib={}", "phy");
|
|
println!("cargo:rustc-link-lib={}", "pp");
|
|
println!("cargo:rustc-link-lib={}", "smartconfig");
|
|
println!("cargo:rustc-link-lib={}", "wapi");
|
|
println!("cargo:rustc-link-lib={}", "wpa_supplicant");
|
|
|
|
Ok(())
|
|
}
|