wasmux
Version:
WebAssembly toolchain for compiling libc and kernel into system-level WASM modules
64 lines (52 loc) • 1.47 kB
JavaScript
export default (mk) => {
const headers = [
];
const sources = [
"InstanceExit.cpp",
"InstancePerform.cpp",
"StartKernel.cpp",
"KernelVersion.cpp",
"syscall_stubs.c",
];
const includes = [
mk.BINARY_DIR.join("include"),
mk.SOURCE_DIR.join("include"),
];
const libraries = [
mk.target("wasmux"),
];
if (mk.SYSTEM_PROCESSOR.match(/wasm(32|64)/)) {
sources.push("StartKernel.S");
}
const worker_S = mk.BINARY_DIR.join("worker.S");
mk.addCustomScript("mkcustsec.mjs", {
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("es6/worker.js"),
SCRIPT_OUTPUT: worker_S,
SCRIPT_SECTION: mk.WASMUX_WORKER_SECTION,
});
sources.push(worker_S);
if (mk.SYSTEM_NAME === "Windows") {
sources.push(
"StartWindows.cpp",
"kernel.lds",
);
mk.EXE_LINKER_FLAGS.push(
"-Wl,--stack,65536",
"-Wl,--script=" + mk.SOURCE_DIR.join("kapsule.lds"),
);
}
mk.EXE_LINKER_FLAGS.push(
"-Wl,--Map=" + mk.BINARY_DIR.join("kapsule.map"),
);
const kapsule = mk.addExecutable("kapsule", headers, sources);
kapsule.addIncludes(includes);
kapsule.addLibraries(libraries);
mk.install(kapsule, "/boot");
if (mk.SYSTEM_PROCESSOR.match(/wasm(32|64)/)) {
kapsule.addLinkOptions("-Wl,--export=_start_kernel");
const waeditor = mk.findProgram("waeditor");
if (waeditor) {
kapsule.addPostBuild(waeditor, [ "--add-user-memory", kapsule.targetFile ]);
}
}
}