The TruePascal Compiler
tpc writes every byte of your program - no linker, no toolchain, nothing to install.
One compiler, nineteen targets
The same source and the same front end. Only the last step differs.
Target
Switch
Output
Windows
-Twin64
PE32+ .exe
Linux
-Tlinux
static ELF64
FreeBSD
-Tfreebsd
static ELF64
FreeBSD on ARM64
-Tfreebsd-aarch64
ELF (ARMv8-A)
The browser
-Twasm
.wasm module
ARM64 / Android
-Taarch64
ARMv8-A 64-bit
Raspberry Pi Pico
-Tpico
.uf2 (RP2040)
Raspberry Pi Pico 2
-Tpico2, -Tpico2-riscv
.uf2 (RP2350, Arm or RISC-V)
ESP32-C3 / ESP32-C6
-Tesp32c3, -Tesp32c6
Espressif flash image (.bin)
ESP32-P4
-Tesp32p4
Espressif flash image (.bin)
ESP32-S3 / ESP32 (Xtensa)
-Tesp32s3, -Tesp32
Espressif flash image (.bin)
Arduino Due
-Tdue
flash image (.bin, Cortex-M3)
Raspberry Pi Zero W
-Tpizero
kernel .img (ARM1176)
PC with no OS
-Tefi-x64
UEFI app (PE32+)
Bare-metal OS apps (ARM64)
-Tefi-a64
UEFI program (ARM64)
Raspberry Pi 3B+ / 4B, own boot
-Tpi-a64
kernel8.img on the card
Linux also builds a static-PIE image (-Tlinux-pie) for hardened systems that randomise load addresses; on ARM64 every binary is position independent already.
Linux and FreeBSD binaries are static and reach the kernel directly - no libc and no interpreter, so there is nothing to install on the machine that runs them.
What is inside tpc
It is one program, and everything it needs it carries.
No linker
tpc emits machine code and then writes the container around it - a PE image, an ELF, a .wasm module, a .uf2. Every byte of the output file is placed by tpc.
One invocation
One source file. tpc follows the uses clauses itself. No unit paths to configure, no project file, no separate compilation step.
Its own runtime
The runtime, the standard library and an SQLite engine travel inside the compiler rather than as libraries to link, so nothing ships beside your program.
Both dialects
Object Pascal in {$MODE DELPHI} and {$MODE OBJFPC} spellings, long strings by default, and the {$Q+}, {$R+} and {$I+} check switches.
Real debugging
Built with -gl a runtime error reports the file and the line, not just an address. tpc writes its own DWARF and ships a debugger.
Self-hosting
tpc compiles its own source - about 420,000 lines of Pascal across 243 files. That is the primary test: the compiler is its own hardest program.
How we know it works
Measured, not asserted.
354
gates, run on every version
490
corpus programs, compared byte for byte
12%
faster than dcc64 on identical work
A ninety-seven version optimisation series took the self-compile from 14,521 ms to 1,393 ms - 10.4 times faster - with every gate green.
Built with TruePascal IDE
(c) 2026 TruePascal IDE - truepascal.com