Skip to content

Commit aa9e46f

Browse files
committed
Add minimum esp-idf-sys version requirement
1 parent f663f2f commit aa9e46f

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

cargo-idf/src/build.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::path::PathBuf;
55
use std::process::{Command, Stdio};
66

77
use anyhow::anyhow;
8-
use cargo_metadata::Message;
8+
use cargo_metadata::{Message, Version};
99
use embuild::utils::CmdError;
1010
use structopt::StructOpt;
1111

@@ -38,7 +38,8 @@ pub struct BuildOpts {
3838
pub struct BuildInfo {
3939
/// The path of the built executable
4040
pub bin_path: Option<PathBuf>,
41-
pub esp_idf_build_info_json: PathBuf,
41+
pub esp_idf_sys_out_dir: PathBuf,
42+
pub esp_idf_sys_version: Version,
4243
}
4344

4445
/// Run `cargo build` in the current directory.
@@ -123,13 +124,13 @@ pub fn run(opts: BuildOpts) -> Result<BuildInfo, BuildError> {
123124
)
124125
.map_err(BuildError::CargoBuildFailed)?;
125126

126-
let esp_idf_build_info_json = esp_idf_sys_out_dir
127+
let esp_idf_sys_out_dir = esp_idf_sys_out_dir
127128
.ok_or_else(|| BuildError::EspIdfSysNotFound(Some(anyhow!("Failed to get out dir"))))?
128-
.join("esp-idf-build.json")
129129
.into_std_path_buf();
130130

131131
Ok(BuildInfo {
132132
bin_path: bin_path.map(Into::into),
133-
esp_idf_build_info_json,
133+
esp_idf_sys_out_dir,
134+
esp_idf_sys_version: esp_idf_sys.version,
134135
})
135136
}

cargo-idf/src/menuconfig.rs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,30 @@ use std::fs;
44
use std::path::PathBuf;
55

66
use anyhow::{anyhow, Context};
7-
use embuild::espidf::EspIdfBuildInfo;
7+
use cargo_metadata::Version;
8+
use embuild::espidf::{self, EspIdfBuildInfo};
89
use embuild::utils::CmdError;
910
use embuild::{cmd, path_buf};
1011
use structopt::StructOpt;
1112

12-
use crate::build::{self, BuildError};
13+
use crate::build::{self, BuildError, BuildInfo};
14+
15+
const MIN_ESP_IDF_SYS_VERSION: Version = Version::new(0, 28, 3);
1316

1417
#[derive(Debug, thiserror::Error)]
15-
#[error("Could not open menuconfig")]
18+
#[error(transparent)]
1619
pub enum MenuconfigError {
20+
#[error("Build failed")]
1721
Build(#[from] BuildError),
1822
Cmd(#[from] CmdError),
1923
Anyhow(#[from] anyhow::Error),
2024
Io(#[from] std::io::Error),
2125
Serde(#[from] serde_json::Error),
26+
#[error(
27+
"esp-idf-sys version ({0}) too old, version must be >= {}",
28+
MIN_ESP_IDF_SYS_VERSION
29+
)]
30+
EspIdfSysTooOld(Version),
2231
}
2332

2433
#[derive(StructOpt)]
@@ -37,7 +46,17 @@ pub fn run(opts: MenuconfigOpts) -> Result<(), MenuconfigError> {
3746
let build_info_json = if let Some(path) = opts.idf_build_info {
3847
path
3948
} else {
40-
build::run(opts.build_opts)?.esp_idf_build_info_json
49+
let BuildInfo {
50+
esp_idf_sys_out_dir,
51+
esp_idf_sys_version,
52+
..
53+
} = build::run(opts.build_opts)?;
54+
55+
if esp_idf_sys_version < MIN_ESP_IDF_SYS_VERSION {
56+
return Err(MenuconfigError::EspIdfSysTooOld(esp_idf_sys_version));
57+
}
58+
59+
esp_idf_sys_out_dir.join(espidf::BUILD_INFO_FILENAME)
4160
};
4261

4362
let EspIdfBuildInfo {

0 commit comments

Comments
 (0)