1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-22 04:22:07 +00:00

build(core/rust): fix cargo build without envvars

...restoring functionality of rust-analyzer
This commit is contained in:
matejcik 2025-01-29 13:36:23 +01:00 committed by matejcik
parent a4220c4b78
commit ca78c01e28

View File

@ -57,18 +57,34 @@ const DEFAULT_BINDGEN_MACROS_COMMON: &[&str] = &[
];
fn add_bindgen_macros<'a>(
clang_args: &mut Vec<&'a str>,
clang_args: &mut Vec<String>,
envvar: Option<&'a str>,
test_envvar: Option<&'a str>,
) {
match envvar {
Some(envvar) => clang_args.extend(envvar.split(',')),
None => {
println!("{}", test_envvar.unwrap());
let test_macros_env = test_envvar.unwrap().split(',');
clang_args.extend(DEFAULT_BINDGEN_MACROS_COMMON.iter());
clang_args.extend(test_macros_env);
}
if let Some(envvar) = envvar {
clang_args.extend(envvar.split(',').map(String::from));
return;
}
clang_args.extend(DEFAULT_BINDGEN_MACROS_COMMON.iter().map(|s| s.to_string()));
if let Some(envvar) = test_envvar {
clang_args.extend(envvar.split(',').map(String::from));
return;
}
let mut model_dirs: Vec<&str> = vec![];
// always include Bolt as the baseline
model_dirs.push("../models/T2T1");
#[cfg(feature = "layout_caesar")]
model_dirs.push("../models/T3B1");
#[cfg(feature = "layout_delizia")]
model_dirs.push("../models/T3T1");
#[cfg(feature = "layout_eckhart")]
model_dirs.push("../models/T3W1");
for model_dir in model_dirs {
let macros = PathBuf::from(model_dir).join("test_bindgen_macros.txt");
let contents = std::fs::read_to_string(&macros)
.unwrap_or_else(|_| panic!("Failed to read {:?}", macros));
clang_args.extend(contents.split(",\n").map(String::from));
}
}
@ -118,7 +134,7 @@ fn prepare_bindings() -> bindgen::Builder {
let build_dir_include = format!("-I{}", build_dir());
let mut clang_args: Vec<&str> = Vec::new();
let mut clang_args: Vec<String> = Vec::new();
let bindgen_macros_env = env::var("BINDGEN_MACROS").ok();
let test_macros_env = env::var("TEST_BINDGEN_MACROS").ok();
@ -133,12 +149,12 @@ fn prepare_bindings() -> bindgen::Builder {
bindings = bindings.clang_args(&["-DFRAMEBUFFER"]);
}
clang_args.push(&build_dir_include);
clang_args.push(build_dir_include);
// Pass in correct include paths and defines.
if is_firmware() {
clang_args.push("-nostdinc");
clang_args.push("-fshort-enums"); // Make sure enums use the same size as in C
clang_args.push("-nostdinc".to_string());
clang_args.push("-fshort-enums".to_string()); // Make sure enums use the same size as in C
// Append gcc-arm-none-eabi's include paths.
let cc_output = Command::new("arm-none-eabi-gcc")
@ -161,7 +177,7 @@ fn prepare_bindings() -> bindgen::Builder {
bindings = bindings.clang_args(include_args);
} else {
clang_args.push("-fno-short-enums");
clang_args.push("-fno-short-enums".to_string());
}
bindings = bindings.clang_args(&clang_args);