diff --git a/src/main.rs b/src/main.rs index 1f2c6a1..527fbae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,11 +19,35 @@ fn main() { .as_ref() .map_or("", |package_name| package_name.as_str()); + // If kernel_major is set, the app requires kernel ^kernel_major.0 (>= + // kernel_major.0, < (kernel_major+1).0) Optionally, kernel_minor can be + // set, making the app require ^kernel_major.kernel_minor (>= + // kernel_major.kernel_minor, < (kernel_major+1).0). + let minimum_tock_kernel_version = match opt.kernel_major { + Some(major) => Some((major, opt.kernel_minor.unwrap_or(0))), + None => None, + }; + // Create the metadata.toml file needed for the TAB file. let mut metadata_toml = String::new(); + // TAB version is currently "1". This defines the general format, but + // key-value pairs can be added (or removed) and still be version 1. writeln!(&mut metadata_toml, "tab-version = 1").unwrap(); + // Name is always set by elf2tab (even if it is empty). writeln!(&mut metadata_toml, "name = \"{}\"", package_name).unwrap(); + // We don't currently tell elf2tab if this app only runs on certain boards. writeln!(&mut metadata_toml, "only-for-boards = \"\"").unwrap(); + // Include "minimum-tock-kernel-version" key if a necessary kernel version + // was specified. + minimum_tock_kernel_version.map(|(major, minor)| { + writeln!( + &mut metadata_toml, + "minimum-tock-kernel-version = \"{}.{}\"", + major, minor + ) + .unwrap(); + }); + // Add build-date metadata unless a deterministic build is desired. if !opt.deterministic { let build_date = chrono::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Secs, true); writeln!(&mut metadata_toml, "build-date = {}", build_date).unwrap(); @@ -81,13 +105,7 @@ fn main() { opt.kernel_heap_size, opt.protected_region_size, opt.permissions.to_vec(), - // If kernel_major is set, the app requires kernel ^kernel_major.0 (>= kernel_major.0, < (kernel_major+1).0) - // Optionally, kernel_minor can be set, making the app require ^kernel_major.kernel_minor - // (>= kernel_major.kernel_minor, < (kernel_major+1).0) - match opt.kernel_major { - Some(major) => Some((major, opt.kernel_minor.unwrap_or(0))), - None => None, - }, + minimum_tock_kernel_version, ) .unwrap(); if opt.verbose {