跳过正文

配置 cargo workspace

·763 字
Rust Esp32 Rust Esp32
rust-esp32 - 这篇文章属于一个选集。
§ 9: 本文

在 ~/code/esp32 下创建 std/non_std 两个目录,分别作为 std 和 non_std 应用的 workspace 目录, 之所以区分他们是因为 workspace 目录下的 .cargo/config.toml 文件配置不同:

  1. std workspace:创建 Cargo.toml,从一个 std 应用目录拷贝.cargo/config.toml/rust-toolchain.toml/sdkconfig.defaults 文件;
  2. non_std workspace: 创建 Cargo.toml,从一个 non_std 应用目录拷贝.cargo/config.toml/rust-toolchain.toml/sdkconfig.defaults 文件;

std workspace:

  1. .cargo/config.toml 中设置最新的 ESP_IDF_VERSION = “v5.2.1”,没有指定 ESP_IDF_TOOLS_INSTALL_DIR = “global”,这样会在 workspace 目录下的 .embuild 中保存一份。
zj@a:~/code/esp32/std$ cat Cargo.toml
[workspace]
resolver = "2" # 没有指定 workspace 的 root package 时必须要指定该参数
members = [  # std 应用目录列表
  "myesp",
  "myespv2",
  "myespv3",
]

exclude = [ # 排除的目录列表
  "mycmake",
  "old",
]

[profile.release]
opt-level = "s"

[profile.dev]
debug = true    # Symbols are nice and they don't increase the size on Flash
opt-level = "z"
zj@a:~/code/esp32/std$
zj@a:~/code/esp32/std$ cat .cargo/config.toml
[build]
target = "xtensa-esp32s3-espidf"

[target.xtensa-esp32s3-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
rustflags = [ "--cfg",  "espidf_time64"] # Extending time_t for ESP IDF 5: https://github.com/esp-rs/rust/issues/110

[unstable]
build-std = ["std", "panic_abort"]

[env]
MCU="esp32s3"
# Note: this variable is not used by the pio builder (`cargo build --features pio`)
ESP_IDF_VERSION = "v5.2.1"
ESP_IDF_SDKCONFIG_DEFAULTS = { value = "sdkconfig.defaults", relative = true }

zj@a:~/code/esp32/std$ cat rust-toolchain.toml
[toolchain]
channel = "esp"

non_std workspace:

zj@a:~/code/esp32/non_std$ cat Cargo.toml
[workspace]
resolver = "2"
members = [
  "myesp-nonstd"
]

[profile.dev]
# Rust debug is too slow.
# For debug builds always builds with some optimization
opt-level = "s"

[profile.release]
codegen-units = 1 # LLVM can perform better optimizations using a single thread
debug = 2
debug-assertions = false
incremental = false
lto = 'fat'
opt-level = 's'
overflow-checks = false

zj@a:~/code/esp32/non_std$ cat .cargo/config.toml
[target.xtensa-esp32s3-none-elf]
runner = "espflash flash --monitor"


[env]
ESP_LOGLEVEL="INFO"

[build]
rustflags = [
  "-C", "link-arg=-nostartfiles",
]

target = "xtensa-esp32s3-none-elf"

[unstable]
build-std = ["core"]

zj@a:~/code/esp32/non_std$ cat rust-toolchain.toml
[toolchain]
channel = "esp"
zj@a:~/code/esp32/non_std$

新增应用:

  1. 在对应的 std/non_std 目录下使用 cargo generate 模板来创建应用。
  2. 然后将应用名称添加到 members 列表中;

构建应用:

  1. 在 std/non_std workspace 根目录下: cargo build -p app1
  2. 在特定应用目录,如 std/myespv2 目录下: cargo build # 只构建当前应用

当应用位于 workspace 中(members 列表中) 时,cargo build 不再读取应用目录中的 下列文件,而是都使用 workspaces 目录下的对应文件。

  1. rust-toolchain.toml
  2. .cargo/config.toml
  3. sdkconfig.defaults 和 sdkconfig.defaults.esp32s3 # 相对与 workspace 目录。

但是应用目录下的 Cargo.toml 和 build.rs 还是必须的,分别指定各应用自身的依赖和构建脚本。

rust-esp32 - 这篇文章属于一个选集。
§ 9: 本文

相关文章

Rust 驱动 Audio - 播放和录音
·6323 字
Rust Esp32 Rust Esp32
Rust 驱动 Camera - 采集和播放
·7304 字
Rust Esp32 Rust Esp32
Rust 驱动 LCD - 显示中英文
·818 字
Rust Esp32 Rust Esp32
Rust 驱动 LCD - 显示图片
·4232 字
Rust Esp32 Rust Esp32