3.2 KiB
Native Development with TCC
BoredOS includes a native port of the Tiny C Compiler (TCC), allowing you to compile and run C programs directly within the operating system.
Basic Usage
The compiler is available as tcc. You can use it much like you would on a standard Unix-like system.
Compiling a Simple CLI Program
Create a file named hello.c:
#include <stdio.h>
int main() {
printf("Hello from BoredOS native TCC!\n");
return 0;
}
Compile and run it:
tcc hello.c -o hello.elf
./hello.elf
Developing GUI Applications
To develop applications that use the BoredOS Window Manager and UI library, you need to link against libboredos.
Example GUI App (hello_gui.c)
#include <libc/libui.h>
#include <libc/syscall.h>
int main() {
ui_window_t win = ui_window_create("Hello TCC", 100, 100, 300, 200);
if (!win) return 1;
gui_event_t ev;
while (1) {
if (ui_get_event(win, &ev)) {
if (ev.type == GUI_EVENT_PAINT) {
ui_draw_string(win, 20, 40, "Compiled natively!", 0xFFFFFFFF);
ui_mark_dirty(win, 0, 0, 300, 200);
} else if (ev.type == GUI_EVENT_CLOSE) {
break;
}
}
}
return 0;
}
Compilation Command
tcc hello_gui.c -o hello_gui.elf -lboredos
Note
The compiler automatically searches
/usr/includefor headers and/usr/libfor libraries. The BoredOS SDK headers andlibboredos.aare pre-installed in these locations.
Technical Details
Standard Paths
- Headers:
/usr/include,/usr/local/include - Libraries:
/usr/lib - TCC Internal:
/usr/lib/tcc
Compilation Process
BoredOS TCC generates standard ELF64 binaries. It automatically links with:
crt0.o: Entry point initialization.crti.o/crtn.o: Constructor/Destructor support.libc.a: The BoredOS standard C library.libtcc1.a: TCC runtime support.
Memory & Storage Requirements
- Static Linking Only: BoredOS currently only supports static linking for native binaries.
- Live ISO Mode: You are limited by the 128MB RAMFS capacity. Compiling very large projects may fail if this limit is reached.
- Disk Installation: The compiler writes directly to your persistent disk. Your storage capacity is limited only by the size of your partition, and your work persists across reboots.
- System RAM: The kernel statically reserves 128MB for the internal RAMFS regardless of boot mode, though this does not limit your storage on a disk install.
- No JIT: The
tcc -runfeature is currently unsupported due to kernel memory protection and the lack ofmmapwith execution permissions in userland.
Troubleshooting
I/O Error during compilation
If you encounter an "I/O Error" while writing the output file, you may have run out of space.
- Live ISO: You have exceeded the 128MB RAMFS limit.
- Disk Installation: Your disk partition is full.
Missing Headers
Ensure that you are including headers using the standard syntax: #include <stdio.h>. If you are using custom paths, use the -I flag:
tcc myapp.c -I/root/my_headers -o myapp.elf