From ad8f32911cfaed11fb0638d73107988f5f3ac701 Mon Sep 17 00:00:00 2001 From: Filipriec Date: Tue, 14 Apr 2026 14:41:10 +0200 Subject: [PATCH] project init --- semestralka/.cargo/config.toml | 17 ++++++++ semestralka/.gitignore | 1 + semestralka/Cargo.lock | 7 +++ semestralka/Cargo.toml | 6 +++ semestralka/build.rs | 79 ++++++++++++++++++++++++++++++++++ semestralka/src/main.rs | 3 ++ 6 files changed, 113 insertions(+) create mode 100644 semestralka/.cargo/config.toml create mode 100644 semestralka/.gitignore create mode 100644 semestralka/Cargo.lock create mode 100644 semestralka/Cargo.toml create mode 100644 semestralka/build.rs create mode 100644 semestralka/src/main.rs diff --git a/semestralka/.cargo/config.toml b/semestralka/.cargo/config.toml new file mode 100644 index 0000000..a8791c1 --- /dev/null +++ b/semestralka/.cargo/config.toml @@ -0,0 +1,17 @@ +[target.xtensa-esp32-none-elf] +runner = "espflash flash --monitor --chip esp32" + +[env] +ESP_LOG="info" + +[build] +rustflags = [ + "-C", "link-arg=-nostartfiles", + "-C", "link-arg=-Tdefmt.x", + "-Z", "stack-protector=all", +] + +target = "xtensa-esp32-none-elf" + +[unstable] +build-std = ["alloc", "core"] diff --git a/semestralka/.gitignore b/semestralka/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/semestralka/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/semestralka/Cargo.lock b/semestralka/Cargo.lock new file mode 100644 index 0000000..72080dc --- /dev/null +++ b/semestralka/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "semestralka" +version = "0.1.0" diff --git a/semestralka/Cargo.toml b/semestralka/Cargo.toml new file mode 100644 index 0000000..4f2a452 --- /dev/null +++ b/semestralka/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "semestralka" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/semestralka/build.rs b/semestralka/build.rs new file mode 100644 index 0000000..0480dfb --- /dev/null +++ b/semestralka/build.rs @@ -0,0 +1,79 @@ +fn main() { + // Explicitly load .env from the project root, even when called from other dirs + let project_root = std::env::var("CARGO_MANIFEST_DIR").unwrap(); + let dotenv_path = std::path::Path::new(&project_root).join(".env"); + if dotenvy::from_path(dotenv_path.clone()).is_ok() { + println!("cargo:rerun-if-changed={}", dotenv_path.display()); + } + + // Pass WIFI credentials into firmware + if let Ok(ssid) = std::env::var("SSID") { + println!("cargo:rustc-env=SSID={}", ssid); + } + if let Ok(password) = std::env::var("PASSWORD") { + println!("cargo:rustc-env=PASSWORD={}", password); + } + if let Ok(ip) = std::env::var("BROKER_IP") { + println!("cargo:rustc-env=BROKER_IP={}", ip); + } + if let Ok(port) = std::env::var("BROKER_PORT") { + println!("cargo:rustc-env=BROKER_PORT={}", port); + } + + linker_be_nice(); + + println!("cargo:rustc-link-arg=-Tlinkall.x"); +} + +fn linker_be_nice() { + let args: Vec = std::env::args().collect(); + if args.len() > 1 { + let kind = &args[1]; + let what = &args[2]; + + match kind.as_str() { + "undefined-symbol" => match what.as_str() { + "_defmt_timestamp" => { + eprintln!(); + eprintln!( + "💡 `defmt` not found - make sure `defmt.x` is added as a linker script and you have included `use defmt_rtt as _;`" + ); + eprintln!(); + } + "_stack_start" => { + eprintln!(); + eprintln!("💡 Is the linker script `linkall.x` missing?"); + eprintln!(); + } + "esp_wifi_preempt_enable" + | "esp_wifi_preempt_yield_task" + | "esp_wifi_preempt_task_create" => { + eprintln!(); + eprintln!( + "💡 `esp-wifi` has no scheduler enabled. Make sure you have the `builtin-scheduler` feature enabled, or that you provide an external scheduler." + ); + eprintln!(); + } + "embedded_test_linker_file_not_added_to_rustflags" => { + eprintln!(); + eprintln!( + "💡 `embedded-test` not found - make sure `embedded-test.x` is added as a linker script for tests" + ); + eprintln!(); + } + _ => (), + }, + // we don't have anything helpful for "missing-lib" yet + _ => { + std::process::exit(1); + } + } + + std::process::exit(0); + } + + println!( + "cargo:rustc-link-arg=-Wl,--error-handling-script={}", + std::env::current_exe().unwrap().display() + ); +} diff --git a/semestralka/src/main.rs b/semestralka/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/semestralka/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}