| // 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 |
| |
| // <stdio.h> for wasm32. |
| // IREE uses eyalroz/printf for all formatting; this header provides the |
| // function signatures that the runtime expects. |
| |
| #ifndef IREE_WASM_LIBC_STDIO_H_ |
| #define IREE_WASM_LIBC_STDIO_H_ |
| |
| #include <stdarg.h> |
| #include <stddef.h> |
| |
| // File handle type (opaque — no real filesystem on wasm32 freestanding). |
| typedef struct _iree_wasm_file FILE; |
| |
| // Standard streams (provided by the libc implementation). |
| extern FILE* stdin; |
| extern FILE* stdout; |
| extern FILE* stderr; |
| |
| #define EOF (-1) |
| |
| // Formatted output (provided by eyalroz/printf). |
| int printf(const char* format, ...) __attribute__((format(printf, 1, 2))); |
| int fprintf(FILE* stream, const char* format, ...) |
| __attribute__((format(printf, 2, 3))); |
| int sprintf(char* buffer, const char* format, ...) |
| __attribute__((format(printf, 2, 3))); |
| int snprintf(char* buffer, size_t count, const char* format, ...) |
| __attribute__((format(printf, 3, 4))); |
| int vprintf(const char* format, va_list args); |
| int vfprintf(FILE* stream, const char* format, va_list args); |
| int vsprintf(char* buffer, const char* format, va_list args); |
| int vsnprintf(char* buffer, size_t count, const char* format, va_list args); |
| |
| // Stream I/O. |
| int fputc(int character, FILE* stream); |
| int fputs(const char* string, FILE* stream); |
| int fgetc(FILE* stream); |
| int getchar(void); |
| int ungetc(int character, FILE* stream); |
| size_t fread(void* buffer, size_t size, size_t count, FILE* stream); |
| size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); |
| int fflush(FILE* stream); |
| |
| // File operations (stubs — no real filesystem on wasm32 freestanding). |
| FILE* fopen(const char* pathname, const char* mode); |
| FILE* fdopen(int fd, const char* mode); |
| FILE* freopen(const char* pathname, const char* mode, FILE* stream); |
| int fclose(FILE* stream); |
| int fseek(FILE* stream, long offset, int whence); |
| long ftell(FILE* stream); |
| void rewind(FILE* stream); |
| int feof(FILE* stream); |
| int ferror(FILE* stream); |
| void clearerr(FILE* stream); |
| int fileno(FILE* stream); |
| int remove(const char* pathname); |
| int rename(const char* oldpath, const char* newpath); |
| |
| #define putchar(c) fputc((c), stdout) |
| #define puts(s) fputs((s), stdout) |
| #define getc(stream) fgetc(stream) |
| |
| #endif // IREE_WASM_LIBC_STDIO_H_ |