wasmux
Version:
WebAssembly toolchain for compiling libc and kernel into system-level WASM modules
225 lines (208 loc) • 7.14 kB
JavaScript
export default (mk) => {
const headers = [
"include/wasmux/arch-generic/log.h",
"include/wasmux/arch-generic/string.h",
"include/wasmux/cxx/MemoryManager.h",
"include/wasmux/cxx/New.h",
"include/wasmux/cxx/StaticStorage.h",
"include/wasmux/cxx/TypeTraits.h",
"include/wasmux/align.h",
"include/wasmux/assert.h",
"include/wasmux/atomic.h",
"include/wasmux/bits.h",
"include/wasmux/bitset.h",
"include/wasmux/bulk-memory.h",
"include/wasmux/byteorder.h",
"include/wasmux/compiler.h",
"include/wasmux/cpu_set.h",
"include/wasmux/eventfd.h",
"include/wasmux/eventpoll.h",
"include/wasmux/export.h",
"include/wasmux/fcntl.h",
"include/wasmux/fs.h",
"include/wasmux/fsblkcnt.h",
"include/wasmux/fsfilcnt.h",
"include/wasmux/if_packet.h",
"include/wasmux/if.h",
"include/wasmux/init.h",
"include/wasmux/inotify.h",
"include/wasmux/int-types.h",
"include/wasmux/ioctl.h",
"include/wasmux/ioctls.h",
"include/wasmux/limits-base.h",
"include/wasmux/limits.h",
"include/wasmux/log.h",
"include/wasmux/math.h",
"include/wasmux/mman.h",
"include/wasmux/mount.h",
"include/wasmux/mutex.h",
"include/wasmux/notify_waiter.h",
"include/wasmux/nullptr.h",
"include/wasmux/platform.h",
"include/wasmux/posix_types.h",
"include/wasmux/prctl.h",
"include/wasmux/reboot.h",
"include/wasmux/route.h",
"include/wasmux/sched.h",
"include/wasmux/section.h",
"include/wasmux/signal.h",
"include/wasmux/signalfd.h",
"include/wasmux/sizeof.h",
"include/wasmux/sleep_ms.h",
"include/wasmux/socket.h",
"include/wasmux/sockios.h",
"include/wasmux/sprintf.h",
"include/wasmux/stack_pointer.h",
"include/wasmux/stat.h",
"include/wasmux/statfs.h",
"include/wasmux/statvfs.h",
"include/wasmux/stdarg.h",
"include/wasmux/string.h",
"include/wasmux/swab.h",
"include/wasmux/sys_ni.h",
"include/wasmux/syscalls.h",
"include/wasmux/sysinfo.h",
"include/wasmux/tcp.h",
"include/wasmux/termios.h",
"include/wasmux/thread_local.h",
"include/wasmux/time.h",
"include/wasmux/time64.h",
"include/wasmux/timerfd.h",
"include/wasmux/types.h",
"include/wasmux/uio.h",
"include/wasmux/wainst_names.h",
"include/wasmux/wasm_header.h",
"include/wasmux/wasm_module.h",
"include/wasmux/wasm_page.h",
"include/wasmux/wasm_symbols.h",
"include/wasmux/widechar.h",
];
const sources = [
"src/fs/fcntl.cpp",
"src/kernel/sys.cpp",
"src/kernel/sys_ni.cpp",
"src/kernel/wamm.cpp",
"src/bulk-memory.cpp",
"src/bulk-memory.S",
"src/byteorder.cpp",
"src/log.cpp",
"src/mutex.S",
"src/notify_waiter.cpp",
"src/sleep_ms.cpp",
"src/sprintf.c",
"src/string.c",
"src/TypesCheck.cpp",
"src/wasm_module.cpp",
];
const includes = [
mk.BINARY_DIR.join("include"),
mk.SOURCE_DIR.join("include"),
];
if (mk.WASMUX_WEI) {
headers.push(
"include/wasmux/web/arraybuffer.h",
"include/wasmux/web/console.h",
"include/wasmux/web/getcurrenttimer.h",
"include/wasmux/web/getrandombytes.h",
"include/wasmux/web/object.h",
"include/wasmux/web/string.h",
"include/wasmux/web/terminal.h",
"include/wasmux/web/webassembly.h",
"include/wasmux/web/worker.h",
"include/wasmux/web/xmlhttprequest.h",
"include/wasmux/wei/alert.h",
"include/wasmux/wei/file_system.h",
"include/wasmux/wei/main_loop.h",
"include/wasmux/wei/main_thread.h",
"include/wasmux/wei/memory_alloc.h",
"include/wasmux/wei/user_access.h",
"include/wasmux/wei/worker_instance.h",
"include/wasmux/wei/worker_thread.h",
"include/wasmux/wei.h",
);
sources.push(
"src/web/arraybuffer.cpp",
"src/web/console.cpp",
"src/web/getcurrenttimer.cpp",
"src/web/getrandombytes.cpp",
"src/web/object.cpp",
"src/web/string.cpp",
"src/web/terminal.cpp",
"src/web/webassembly.cpp",
"src/web/worker.cpp",
"src/web/xmlhttprequest.cpp",
"src/wei/alert.cpp",
"src/wei/file_system.cpp",
"src/wei/main_loop.cpp",
"src/wei/main_thread.cpp",
"src/wei/memory_alloc.cpp",
"src/wei/memory_heap.cpp",
"src/wei/memory_heap.h",
"src/wei/user_access.cpp",
"src/wei/wei.cpp",
"src/wei/worker_instance.cpp",
"src/wei/worker_instanceInit.S",
"src/wei/worker_thread.cpp",
);
const webcall_nums_h = mk.BINARY_DIR.join("include/wasmux/webcall-nums.h");
mk.addCustomScript("src/wei/webcall-nums.h.js", {
SCRIPT_NAME: "<wasmux/webcall-nums.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/webcalls.js"),
SCRIPT_OUTPUT: webcall_nums_h,
});
sources.push(webcall_nums_h);
const webcall_main_h = mk.BINARY_DIR.join("include/wasmux/webcall-main.h");
mk.addCustomScript("src/wei/webcall-main.h.js", {
SCRIPT_NAME: "<wasmux/webcall-main.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/webcalls.js"),
SCRIPT_OUTPUT: webcall_main_h,
});
sources.push(webcall_main_h);
const webcall_worker_h = mk.BINARY_DIR.join("include/wasmux/webcall-worker.h");
mk.addCustomScript("src/wei/webcall-worker.h.js", {
SCRIPT_NAME: "<wasmux/webcall-worker.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/webcalls.js"),
SCRIPT_OUTPUT: webcall_worker_h,
});
sources.push(webcall_worker_h);
}
const syscall_nums_h = mk.BINARY_DIR.join("include/wasmux/syscall-nums.h");
mk.addCustomScript("include/wasmux/syscall-nums.h.mjs", {
SCRIPT_NAME: "<wasmux/syscall-nums.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/syscall.js"),
SCRIPT_OUTPUT: syscall_nums_h,
});
sources.push(syscall_nums_h);
const syscall_list_h = mk.BINARY_DIR.join("include/wasmux/syscall-list.h");
mk.addCustomScript("include/wasmux/syscall-list.h.mjs", {
SCRIPT_NAME: "<wasmux/syscall-list.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/syscall.js"),
SCRIPT_OUTPUT: syscall_list_h,
});
sources.push(syscall_list_h);
const errno_h = mk.BINARY_DIR.join("include/wasmux/errno.h");
mk.addCustomScript("src/errno.h.js", {
SCRIPT_NAME: "<wasmux/errno.h>",
SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/errno.js"),
SCRIPT_OUTPUT: errno_h,
});
sources.push(errno_h);
const thread_data_h = mk.BINARY_DIR.join("include/wasmux/thread_data.h");
mk.addCustomScript("configure_file", {
SCRIPT_NAME: "<wasmux/thread_data.h>",
SCRIPT_INPUT: mk.SOURCE_DIR.join("include/wasmux/thread_data.h.in"),
SCRIPT_OUTPUT: thread_data_h,
SCRIPT_ENTITIES: [],
});
sources.push(thread_data_h);
const wasmux = mk.addStaticLibrary("wasmux", headers, sources);
wasmux.addPublicIncludes(includes);
mk.install(headers, {
destination: mk.INSTALL_INCLUDEDIR,
baseDir: "include",
});
mk.install([ errno_h, thread_data_h ], {
destination: mk.INSTALL_INCLUDEDIR,
baseDir: mk.BINARY_DIR.join("include"),
});
}