Skip to content

Commit fe5c116

Browse files
committed
feat(xtask): add support for building MASOS apps
1 parent 1e915d8 commit fe5c116

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

xtask/src/archive.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,25 @@ impl Archive {
4848
Ok(())
4949
}
5050

51+
pub fn retain_masos_symbols(&self) -> Result<()> {
52+
eprintln!("Retaining MASOS symbols");
53+
let sh = crate::sh()?;
54+
55+
let explicit_symbols = self.explicit_symbols().iter().copied();
56+
let syscall_symbols = self.syscall_symbols()?;
57+
let syscall_symbols = syscall_symbols.iter().map(String::as_str);
58+
let builtin_symbols = sh.read_file("hermit-builtins/exports")?;
59+
let builtin_symbols = builtin_symbols.lines();
60+
61+
let symbols = explicit_symbols
62+
.chain(syscall_symbols)
63+
.chain(builtin_symbols)
64+
.collect();
65+
self.retain_symbols(symbols)?;
66+
67+
Ok(())
68+
}
69+
5170
fn explicit_symbols(&self) -> &[&str] {
5271
&["_start", "__bss_start", "mcount", "runtime_entry"]
5372
}

xtask/src/build.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,17 @@ impl Build {
4242
sh.remove_path(&dist_archive)?;
4343
dist_archive.create()?;
4444

45-
self.build_kernel()?;
45+
if self
46+
.cargo_build
47+
.features()
48+
.any(|feature| feature == "masos")
49+
{
50+
self.build_builtins(true)?;
51+
} else {
52+
self.build_kernel()?;
4653

47-
self.build_builtins()?;
54+
self.build_builtins(false)?;
55+
}
4856

4957
eprintln!("Setting OSABI");
5058
dist_archive.set_osabi()?;
@@ -82,7 +90,7 @@ impl Build {
8290
Ok(())
8391
}
8492

85-
fn build_builtins(&self) -> Result<()> {
93+
fn build_builtins(&self, masos: bool) -> Result<()> {
8694
eprintln!("Building hermit-builtins");
8795
let mut cargo = crate::cargo();
8896
cargo
@@ -92,6 +100,9 @@ impl Build {
92100
.arg(self.cargo_build.artifact.builtins_profile_path_component())
93101
.args(self.cargo_build.artifact.arch.builtins_cargo_args())
94102
.args(self.cargo_build.builtins_target_dir_arg());
103+
if masos {
104+
cargo.arg("--features=masos");
105+
}
95106

96107
eprintln!("$ {cargo:?}");
97108
let status = cargo.status()?;
@@ -100,7 +111,11 @@ impl Build {
100111
let builtins_archive = self.cargo_build.artifact.builtins_archive();
101112
let dist_archive = self.cargo_build.artifact.dist_archive();
102113

103-
builtins_archive.retain_builtin_symbols()?;
114+
if masos {
115+
builtins_archive.retain_masos_symbols()?;
116+
} else {
117+
builtins_archive.retain_builtin_symbols()?;
118+
}
104119
dist_archive.append(&builtins_archive)?;
105120

106121
Ok(())

0 commit comments

Comments
 (0)