diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..59ccc74 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,16 @@ +[build] +target = "xtensa-esp32-espidf" + +[target.xtensa-esp32-espidf] +linker = "ldproxy" +# runner = "espflash --monitor" # Select this runner for espflash v1.x.x +runner = "espflash flash --monitor" # Select this runner for espflash v2.x.x + + +[unstable] +build-std = ["std", "panic_abort"] + +[env] +# Note: these variables are not used when using pio builder (`cargo build --features pio`) +ESP_IDF_VERSION = "release/v4.4" + diff --git a/.gitignore b/.gitignore index 66b86d3..7c8d283 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,10 @@ # Built Visual Studio Code Extensions *.vsix +# ---> ESP embuild +# Generated by rust analyser to speed up compile times +.embuild/ + # ---> Rust # Generated by Cargo # will have compiled files and executables diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..871951b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "esp32-std-template" +version = "0.1.0" +authors = ["Luke Else "] +edition = "2021" +resolver = "2" +rust-version = "1.66" + +[profile.release] +opt-level = "s" + +[profile.dev] +debug = true # Symbols are nice and they don't increase the size on Flash +opt-level = "z" + +[features] + +default = ["std", "hal", "esp-idf-sys/native"] + + +pio = ["esp-idf-sys/pio"] +all = ["std", "nightly", "experimental", "embassy"] +hal = ["esp-idf-hal", "embedded-svc", "esp-idf-svc"] +std = ["alloc", "esp-idf-sys/std", "esp-idf-sys/binstart", "embedded-svc?/std", "esp-idf-hal?/std", "esp-idf-svc?/std"] +alloc = ["embedded-svc?/alloc", "esp-idf-hal?/alloc", "esp-idf-svc?/alloc"] +nightly = ["embedded-svc?/nightly", "esp-idf-svc?/nightly"] # Future: "esp-idf-hal?/nightly" +experimental = ["embedded-svc?/experimental", "esp-idf-svc?/experimental"] +embassy = ["esp-idf-hal?/embassy-sync", "esp-idf-hal?/critical-section", "esp-idf-hal?/edge-executor", "esp-idf-svc?/embassy-time-driver", "esp-idf-svc?/embassy-time-isr-queue"] + +[dependencies] +log = { version = "0.4.17", default-features = false } +esp-idf-sys = { version = "0.33", default-features = false } +esp-idf-hal = { version = "0.41", optional = true, default-features = false } +esp-idf-svc = { version = "0.46", optional = true, default-features = false } +embedded-svc = { version = "0.25", optional = true, default-features = false } + +[build-dependencies] +embuild = "0.31.2" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..ccb6e75 --- /dev/null +++ b/build.rs @@ -0,0 +1,6 @@ +// Necessary because of this issue: https://github.com/rust-lang/cargo/issues/9641 +fn main() -> Result<(), Box> { + embuild::build::CfgArgs::output_propagated("ESP_IDF")?; + embuild::build::LinkArgs::output_propagated("ESP_IDF")?; + Ok(()) +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..a2f5ab5 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "esp" diff --git a/sdkconfig.defaults b/sdkconfig.defaults new file mode 100644 index 0000000..3ca3b5d --- /dev/null +++ b/sdkconfig.defaults @@ -0,0 +1,10 @@ +# Rust often needs a bit of an extra main task stack size compared to C (the default is 3K) +CONFIG_ESP_MAIN_TASK_STACK_SIZE=7000 + +# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default). +# This allows to use 1 ms granuality for thread sleeps (10 ms by default). +#CONFIG_FREERTOS_HZ=1000 + +# Workaround for https://github.com/espressif/esp-idf/issues/7631 +#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n +#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..c0b518d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,12 @@ +use esp_idf_sys as _; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported +use log::*; + +fn main() { + // It is necessary to call this function once. Otherwise some patches to the runtime + // implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71 + esp_idf_sys::link_patches(); + // Bind the log crate to the ESP Logging facilities + esp_idf_svc::log::EspLogger::initialize_default(); + + info!("Hello, world!"); +}