UNPKG

wasmux

Version:

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

95 lines (80 loc) 2.6 kB
import fs from "node:fs"; import os from "node:os"; import bitmake from "bitmake"; const { path } = bitmake; const toolchainUtils = { ASM_COMPILER: "clang", C_COMPILER: "clang", CXX_COMPILER: "clang++", AR: "llvm-ar", RANLIB: "llvm-ranlib", LINKER: "lld-link", NM: "llvm-nm", OBJCOPY: "llvm-objcopy", OBJDUMP: "llvm-objdump", STRIP: "llvm-strip", LLVM_LLC: "llc", }; export default (mk) => { mk.SYSTEM_NAME = "Windows"; mk.SYSTEM_VERSION = 10; mk.SYSTEM_PROCESSOR = "i686"; mk.SIZEOF_VOID_P = 4; mk.WASMUX_TARGET_TRIPLET = "i686-w64-mingw32"; let MINGW_TOOLCHAIN_ROOT = ""; if (mk.MINGW_ROOT) { if (fs.existsSync(path.resolve(mk.MINGW_ROOT, mk.WASMUX_TARGET_TRIPLET))) MINGW_TOOLCHAIN_ROOT = path.resolve(mk.MINGW_ROOT, mk.WASMUX_TARGET_TRIPLET); else if (fs.existsSync(path.resolve(mk.MINGW_ROOT, "x86_64-w64-mingw32"))) MINGW_TOOLCHAIN_ROOT = path.resolve(mk.MINGW_ROOT, "x86_64-w64-mingw32"); } const clangPath = mk.findProgram("clang"); const toolchainPrefix = clangPath ? path.dirname(clangPath) : ""; const toolchainSuffix = (os.platform() === "win32") ? ".exe" : ""; for (const [key, val] of Object.entries(toolchainUtils)) { const filename = val + toolchainSuffix; mk[key] = toolchainPrefix ? path.resolve(toolchainPrefix, filename) : filename; } const compilerFlags = [ "--target=" + mk.WASMUX_TARGET_TRIPLET, "--no-standard-libraries", "-m32", "-D_WIN32_WINNT=0x0601", ]; const linkerFlags = [ "-nostartfiles", "-nostdlib", "-nodefaultlibs", ]; if (MINGW_TOOLCHAIN_ROOT) { compilerFlags.push("-I" + path.resolve(MINGW_TOOLCHAIN_ROOT, "include")); if (fs.existsSync(path.resolve(MINGW_TOOLCHAIN_ROOT, "lib32"))) linkerFlags.push("-L" + path.resolve(MINGW_TOOLCHAIN_ROOT, "lib32")); if (fs.existsSync(path.resolve(MINGW_TOOLCHAIN_ROOT, "lib"))) linkerFlags.push("-L" + path.resolve(MINGW_TOOLCHAIN_ROOT, "lib")); } // win32 linkerFlags.push( "-lkernel32", "-luser32", "-lgdi32", "-lwinspool", "-lshell32", "-lole32", "-loleaut32", "-luuid", "-lcomdlg32", "-ladvapi32", ); if (mk.WASMUX_NO_STDLIB) compilerFlags.push("--no-standard-libraries"); compilerFlags.push( "-fno-builtin-memset", "-Wno-pragma-pack", "-O3", ); mk.ASM_FLAGS.push(...compilerFlags); mk.C_FLAGS.push(...compilerFlags); mk.CXX_FLAGS.push(...compilerFlags, "-fno-exceptions", "-fno-rtti"); mk.EXE_LINKER_FLAGS.push(...linkerFlags); }