(&self, moon_pkg: &mut Source, imports: Option<&Imports>, link: bool)
| 163 | } |
| 164 | |
| 165 | fn write_moon_pkg(&self, moon_pkg: &mut Source, imports: Option<&Imports>, link: bool) { |
| 166 | // Disable warning for invalid inline wasm |
| 167 | moon_pkg.push_str("{\n\"warn-list\": \"-44\""); |
| 168 | // Dependencies |
| 169 | if let Some(imports) = imports { |
| 170 | moon_pkg.push_str(",\n\"import\": [\n"); |
| 171 | moon_pkg.indent(1); |
| 172 | let mut deps = imports |
| 173 | .packages |
| 174 | .iter() |
| 175 | .map(|(k, v)| { |
| 176 | format!( |
| 177 | "{{ \"path\" : \"{}/{}\", \"alias\" : \"{}\" }}", |
| 178 | self.project_name, |
| 179 | k.replace(".", "/"), |
| 180 | v |
| 181 | ) |
| 182 | }) |
| 183 | .collect::<Vec<_>>(); |
| 184 | deps.sort(); |
| 185 | uwrite!(moon_pkg, "{}", deps.join(",\n")); |
| 186 | moon_pkg.deindent(1); |
| 187 | moon_pkg.push_str("\n]"); |
| 188 | } |
| 189 | // Link target |
| 190 | if link { |
| 191 | let memory_name = self.pkg_resolver.resolve.wasm_export_name( |
| 192 | ManglingAndAbi::Legacy(LiftLowerAbi::Sync), |
| 193 | WasmExport::Memory, |
| 194 | ); |
| 195 | moon_pkg.push_str(",\n\"link\": {\n\"wasm\": {\n"); |
| 196 | moon_pkg.push_str(&format!("\"export-memory-name\": \"{memory_name}\",\n")); |
| 197 | moon_pkg.push_str("\"heap-start-address\": 16,\n"); |
| 198 | moon_pkg.push_str("\"exports\": [\n"); |
| 199 | moon_pkg.indent(1); |
| 200 | let mut exports = self |
| 201 | .export |
| 202 | .iter() |
| 203 | .map(|(export_name, (func_name, _))| format!("\"{func_name}:{export_name}\"")) |
| 204 | .collect::<Vec<_>>(); |
| 205 | exports.push(format!( |
| 206 | "\"mbt_ffi_cabi_realloc:{}\"", |
| 207 | self.pkg_resolver.resolve.wasm_export_name( |
| 208 | ManglingAndAbi::Legacy(LiftLowerAbi::Sync), |
| 209 | WasmExport::Realloc, |
| 210 | ), |
| 211 | )); |
| 212 | exports.sort(); |
| 213 | uwrite!(moon_pkg, "{}", exports.join(",\n")); |
| 214 | moon_pkg.deindent(1); |
| 215 | moon_pkg.push_str("\n]\n}\n}\n"); |
| 216 | } |
| 217 | moon_pkg.push_str("\n}\n"); |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | /// World generator implementation for MoonBit. |
no test coverage detected