UNPKG

wasmux

Version:

WebAssembly toolchain for compiling libc and kernel into system-level WASM modules

269 lines (253 loc) 7.68 kB
export default (mk) => { const headers = [ "include/arpa/inet.h", "include/bits/thread_data.h", "include/bits/waitstatus.h", "include/net/ethernet.h", "include/net/if.h", "include/netinet/in.h", "include/netinet/tcp.h", "include/netpacket/packet.h", "include/sys/epoll.h", "include/sys/eventfd.h", "include/sys/file.h", "include/sys/inotify.h", "include/sys/ioctl.h", "include/sys/ipc.h", "include/sys/klog.h", "include/sys/mman.h", "include/sys/mount.h", "include/sys/param.h", "include/sys/poll.h", "include/sys/prctl.h", "include/sys/random.h", "include/sys/reboot.h", "include/sys/resource.h", "include/sys/select.h", "include/sys/sendfile.h", "include/sys/socket.h", "include/sys/stat.h", "include/sys/statfs.h", "include/sys/statvfs.h", "include/sys/sysinfo.h", "include/sys/sysmacros.h", "include/sys/time.h", "include/sys/timerfd.h", "include/sys/times.h", "include/sys/ttydefaults.h", "include/sys/types.h", "include/sys/uio.h", "include/sys/un.h", "include/sys/utsname.h", "include/sys/vfs.h", "include/sys/wait.h", "include/sys/xattr.h", "include/ar.h", "include/assert.h", "include/byteswap.h", "include/endian.h", "include/err.h", "include/errno.h", "include/float.h", "include/ifaddrs.h", "include/inttypes.h", "include/limits.h", "include/memory.h", "include/paths.h", "include/poll.h", "include/sched.h", "include/setjmp.h", "include/spawn.h", "include/stdarg.h", "include/stddef.h", "include/stdint.h", "include/syscall.h", "include/sysexits.h", "include/syslog.h", "include/ucontext.h", "include/utime.h", ]; const sources = [ "stub/apra/inet.cpp", "stub/net/if_indextoname.cpp", "stub/net/if_nametoindex.cpp", "stub/sys/epoll.cpp", "stub/sys/eventfd.cpp", "stub/sys/inotify.cpp", "stub/sys/mman.cpp", "stub/sys/prctl.cpp", "stub/sys/random.cpp", "stub/sys/resource.cpp", "stub/sys/select.cpp", "stub/sys/sendfile.cpp", "stub/sys/socket.cpp", "stub/sys/stat.cpp", "stub/sys/statfs.cpp", "stub/sys/statvfs.cpp", "stub/sys/sysinfo.cpp", "stub/sys/time.cpp", "stub/sys/timerfd.cpp", "stub/sys/wait.cpp", "stub/sys/xattr.cpp", "stub/access.cpp", "stub/assert.cpp", "stub/atexit.cpp", "stub/err.cpp", "stub/getifaddrs.cpp", "stub/pipe.cpp", "stub/poll.cpp", "stub/progname.cpp", "stub/qsort.cpp", "stub/read.cpp", "stub/sched_getaffinity.cpp", "stub/sched_getcpu.cpp", "stub/sched_setscheduler.cpp", "stub/sched_yield.cpp", "stub/setjmp.cpp", "stub/stack_chk_fail.cpp", "stub/stdlib.cpp", "stub/strtol.cpp", "stub/syslog.cpp", "stub/time.cpp", "stub/ucontext.cpp", "stub/unistd.cpp", "stub/utime.cpp", "syscalls/_exit.cpp", "syscalls/brk.cpp", "syscalls/chdir.cpp", "syscalls/close.cpp", "syscalls/dup2.cpp", "syscalls/execve.cpp", "syscalls/fdatasync.cpp", "syscalls/fstatat.cpp", "syscalls/getcwd.cpp", "syscalls/getegid.cpp", "syscalls/geteuid.cpp", "syscalls/getgid.cpp", "syscalls/getpid.cpp", "syscalls/getppid.cpp", "syscalls/gettid.cpp", "syscalls/gettimeofday.cpp", "syscalls/getuid.cpp", "syscalls/ioctl.cpp", "syscalls/klogctl.cpp", "syscalls/lseek.cpp", "syscalls/mknod.cpp", "syscalls/mount.cpp", "syscalls/read.cpp", "syscalls/readv.cpp", "syscalls/reboot.cpp", "syscalls/sched_get_priority_max.cpp", "syscalls/sched_get_priority_min.cpp", "syscalls/sethostname.cpp", "syscalls/statx.cpp", "syscalls/sync.cpp", "syscalls/syscall.cpp", "syscalls/umount.cpp", "syscalls/umount2.cpp", "syscalls/uname.cpp", "syscalls/vhangup.cpp", "syscalls/waitpid.cpp", "syscalls/write.cpp", "syscalls/writev.cpp", "src/netinet/in6addr_any.cpp", "src/netinet/in6addr_loopback.cpp", "src/sys/futimens.cpp", "src/sys/stat.cpp", "src/sys/unistd/getpgrp.cpp", "src/abort.cpp", "src/exit.cpp", "src/gethostname.cpp", "src/posix_openpt.cpp", "src/sbrk.cpp", "src/thread_data.cpp", "src/usleep.cpp", ]; const includes = [ mk.BINARY_DIR.join("include"), mk.SOURCE_DIR.join("include"), ]; const syscall_h = mk.BINARY_DIR.join("include/sys/syscall.h"); mk.addCustomScript("src/sys/syscall.h.js", { SCRIPT_NAME: "<sys/syscall.h>", SCRIPT_INPUT: mk.PROJECT_SOURCE_DIR.join("data/syscall.js"), SCRIPT_OUTPUT: syscall_h, }); const ctype_h = mk.BINARY_DIR.join("include/ctype.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<ctype.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/ctype.h.in"), SCRIPT_OUTPUT: ctype_h, SCRIPT_INCLUDES: [], }); const wctype_h = mk.BINARY_DIR.join("include/wctype.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<wctype.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/wctype.h.in"), SCRIPT_OUTPUT: wctype_h, SCRIPT_INCLUDES: [], }); const gnu_versions_h = mk.BINARY_DIR.join("include/gnu-versions.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<gnu-versions.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/gnu-versions.h.in"), SCRIPT_OUTPUT: gnu_versions_h, SCRIPT_DEFINES: [], }); const stdlib_h = mk.BINARY_DIR.join("include/stdlib.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<stdlib.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/stdlib.h.in"), SCRIPT_OUTPUT: stdlib_h, SCRIPT_INCLUDES: [], }); const unistd_h = mk.BINARY_DIR.join("include/unistd.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<unistd.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/unistd.h.in"), SCRIPT_OUTPUT: unistd_h, SCRIPT_INCLUDES: [], }); const time_h = mk.BINARY_DIR.join("include/time.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<time.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/time.h.in"), SCRIPT_OUTPUT: time_h, SCRIPT_INCLUDES: [], }); const wchar_h = mk.BINARY_DIR.join("include/wchar.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<wchar.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join("include/wchar.h.in"), SCRIPT_OUTPUT: wchar_h, SCRIPT_INCLUDES: [], }); const features_h = mk.BINARY_DIR.join("include/features.h"); mk.addCustomScript("configure_file", { SCRIPT_NAME: "<features.h>", SCRIPT_INPUT: mk.SOURCE_DIR.join(`features/${mk.WASMUX_LIBC_FEATURES}-features.h`), SCRIPT_OUTPUT: features_h, }); if (mk.WASMUX_LIBC_FEATURES === "glibc") { headers.push("include/gnu/libc-version.h"); sources.push("src/gnu/libc-version.cpp"); } mk.script("<wasmux/thread_data.h>").mergeVariables({ SCRIPT_ENTITIES: [ "int errcode;", "char buffer[256];" ], }); const libc = mk.addStaticLibrary("libc", headers, sources); libc.addSources(syscall_h, ctype_h, wctype_h, gnu_versions_h, stdlib_h, unistd_h, time_h, wchar_h, features_h); libc.addSources(mk.target("wasmux").objects); libc.addPublicLibraries(mk.target("wasmux")); libc.addPublicIncludes(includes); libc.setPrefix(""); mk.install(headers, { destination: mk.INSTALL_INCLUDEDIR, baseDir: "include", }); mk.install([ syscall_h, ctype_h, wctype_h, gnu_versions_h, stdlib_h, unistd_h, time_h, wchar_h, features_h ], { destination: mk.INSTALL_INCLUDEDIR, baseDir: mk.BINARY_DIR.join("include"), }); mk.install(libc, mk.INSTALL_LIBDIR); }