diff --git a/build.rs b/build.rs index 49fe4fe0..f549f932 100644 --- a/build.rs +++ b/build.rs @@ -182,18 +182,30 @@ fn main() -> Result<(), Box> { .flag("-Wno-unused-command-line-argument") .clone(); - // determine target - let target = env::var_os("TARGET"); - let cx_makefile = match target.clone().unwrap().to_str().unwrap() { - "nanos" => finalize_nanos_configuration(&mut command, &bolos_sdk), - "nanox" => finalize_nanox_configuration(&mut command, &bolos_sdk), - "nanosplus" => finalize_nanosplus_configuration(&mut command, &bolos_sdk), + enum Device { + NanoS, + NanoSPlus, + NanoX, + } + use Device::*; + + // determine device + let device = match env::var_os("CARGO_CFG_TARGET_OS").unwrap().to_str().unwrap() { + "nanos" => NanoS, + "nanosplus" => NanoSPlus, + "nanox" => NanoX, target_name => panic!( "invalid target `{}`, expected one of `nanos`, `nanox`, `nanosplus`. Run with `-Z build-std=core --target=./.json`", target_name ), }; + let cx_makefile = match NanoS { + NanoS => finalize_nanos_configuration(&mut command, &bolos_sdk), + NanoX => finalize_nanox_configuration(&mut command, &bolos_sdk), + NanoSPlus => finalize_nanosplus_configuration(&mut command, &bolos_sdk), + }; + // all 'finalize_...' functions also declare a new 'cfg' variable corresponding // to the name of the target (as #[cfg(target = "nanox")] does not work, for example) // this allows code to easily import things depending on the target @@ -225,11 +237,10 @@ fn main() -> Result<(), Box> { // extend the library search path println!("cargo:rustc-link-search={}", out_dir.display()); // copy - let linkerscript = match target.unwrap().to_str().unwrap() { - "nanos" => "nanos_layout.ld", - "nanox" => "nanox_layout.ld", - "nanosplus" => "nanosplus_layout.ld", - _ => "", + let linkerscript = match device { + NanoS => "nanos_layout.ld", + NanoX => "nanox_layout.ld", + NanoSPlus => "nanosplus_layout.ld", }; std::fs::copy(linkerscript, out_dir.join(linkerscript))?; std::fs::copy("link.ld", out_dir.join("link.ld"))?;