| # Copyright 2026 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| # Freestanding libc for wasm32. |
| # |
| # Provides C standard library headers and implementations for building the |
| # IREE runtime as a standalone wasm module. No system libc, no Emscripten — |
| # just enough to compile and link C code targeting wasm32-unknown-unknown. |
| # |
| # Headers are in include/ and work as a -isystem include path via the wasm32 |
| # cc_toolchain. The implementations are linked via the :libc cc_library. |
| # |
| # Components: |
| # dlmalloc Memory allocation (Doug Lea's malloc, MIT-0 license). |
| # sbrk Thin wrapper over wasm memory.grow, initialized from __heap_base. |
| # string memcmp, memchr, strlen, strcmp, strstr, etc. |
| # (memcpy/memmove/memset are wasm builtins via -mbulk-memory.) |
| # strtol Integer/float string-to-number conversion. |
| # ctype ASCII character classification (table-driven). |
| # stdio printf wrappers (eyalroz/printf), stream I/O via JS imports. |
| # stdlib abs, div, rand, getenv. |
| # abort abort/exit/assert_fail via JS imports. |
| # errno Global errno variable. |
| # unistd write() via JS import, other POSIX stubs. |
| |
| load("//build_tools/bazel:iree_wasm_library.bzl", "iree_wasm_cc_library") |
| |
| package(default_visibility = ["//visibility:public"]) |
| |
| filegroup( |
| name = "headers", |
| srcs = glob(["include/**/*.h"]), |
| ) |
| |
| # JS implementation of the iree_syscall wasm imports. |
| # Provides the import object (write, clock_now_ns, exit, assert_fail) |
| # that the C code in syscall_imports.h declares via __attribute__((import_module)). |
| iree_wasm_cc_library( |
| name = "syscall_imports", |
| srcs = ["src/syscall_imports.js"], |
| module = "iree_syscall", |
| ) |
| |
| cc_library( |
| name = "libc", |
| srcs = [ |
| "src/abort.c", |
| "src/aligned_alloc.c", |
| "src/ctype.c", |
| "src/dlmalloc.c", |
| "src/errno.c", |
| "src/sbrk.c", |
| "src/stdio.c", |
| "src/stdlib.c", |
| "src/string.c", |
| "src/strtol.c", |
| "src/syscall_imports.h", |
| "src/unistd.c", |
| ], |
| hdrs = glob(["include/**/*.h"]), |
| includes = ["include"], |
| target_compatible_with = ["@platforms//cpu:wasm32"], |
| deps = [ |
| ":syscall_imports", |
| "@dlmalloc", |
| ], |
| ) |