Documentation Index Fetch the complete documentation index at: https://mintlify.com/TinyCC/tinycc/llms.txt
Use this file to discover all available pages before exploring further.
TinyCC provides extensive configuration options to customize the compiler for different platforms, targets, and use cases.
Configuration script
The configure script detects your system and sets appropriate defaults:
./configure [options]
make
sudo make install
Run ./configure --help to see all available options.
Installation paths
Customize where TinyCC is installed:
Set installation prefix
# Install to /usr/local (default)
./configure --prefix=/usr/local
# Install to custom location
./configure --prefix=/opt/tcc
# Install to user directory
./configure --prefix= $HOME /.local
Configure specific directories
./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--libdir=/usr/lib \
--includedir=/usr/include \
--mandir=/usr/share/man \
--infodir=/usr/share/info
Set TCC directory
The TCC directory contains headers, libraries, and runtime files: # Default: PREFIX/lib/tcc
./configure --tccdir=/usr/lib/tcc
# Custom location
./configure --tccdir=/opt/tcc/lib
Compiler selection
Configure which compiler builds TinyCC:
# Use GCC (default on Linux)
./configure --cc=gcc
Additional compiler flags
# Add custom CFLAGS
./configure --extra-cflags= "-O3 -march=native"
# Add custom LDFLAGS
./configure --extra-ldflags= "-static"
# Add extra libraries
./configure --extra-libs= "-lmylib"
Target configuration
Cross-compilation setup
Configure TinyCC for cross-compilation:
# Enable cross-compiler builds
./configure --enable-cross
# Specify target CPU
./configure --cpu=arm64
# Specify target OS
./configure --targetos=Darwin
# Set cross-compilation prefix
./configure --cross-prefix=aarch64-linux-gnu-
ARM64 Linux
Windows (MinGW)
Android/Termux
macOS
./configure \
--cpu=arm64 \
--cross-prefix=aarch64-linux-gnu- \
--enable-cross
Library configuration
System paths
Specify system include and library paths:
./configure \
--sysroot=/usr/arm-linux-gnueabihf \
--sysincludepaths=/usr/arm-linux-gnueabihf/include \
--libpaths=/usr/arm-linux-gnueabihf/lib \
--crtprefix=/usr/arm-linux-gnueabihf/lib
Use colon-separated paths for multiple directories: --libpaths=/lib:/usr/lib:/opt/lib
ELF interpreter
Set the dynamic linker path:
# Standard Linux
./configure --elfinterp=/lib64/ld-linux-x86-64.so.2
# musl libc
./configure --elfinterp=/lib/ld-musl-x86_64.so.1
# FreeBSD
./configure --elfinterp=/libexec/ld-elf.so.1
Triplet configuration
Set the system library triplet:
# x86_64 Linux
./configure --triplet=x86_64-linux-gnu
# ARM hard float
./configure --triplet=arm-linux-gnueabihf
# ARM64 Linux
./configure --triplet=aarch64-linux-gnu
Feature configuration
Debug features
Backtrace
Bounds checking
DWARF
Debug build
# Enable backtrace support (default)
./configure
# Disable backtrace support
./configure --config-backtrace=no
Library options
# Use libgcc instead of libtcc1.a
./configure --with-libgcc
# Use mmap for executable memory (with SELinux)
./configure --with-selinux
# Build as static library (Windows default)
./configure --enable-static
# Build as shared library (Unix default)
./configure --disable-static
# Disable rpath in shared library
./configure --disable-rpath
# Force old Mach-O format (macOS ≤ 10)
./configure --config-new_macho=no
# Use new Mach-O format (macOS ≥ 11)
./configure --config-new_macho=yes
# Enable code signing
./configure --config-codesign=yes
Build options
Control the build process:
Build targets
# Build native compiler only
make
# Build cross-compilers
make cross
# Build specific cross-compiler
make cross-x86_64
make cross-arm64
# Build documentation
make doc
# Build everything
make all
Build flags
# Build from single source file (faster, smaller)
make ONE_SOURCE=yes
# Build from separate object files (default)
make ONE_SOURCE=no
# Silent build
make SILENT=yes
# Verbose build
make SILENT=no
Runtime configuration
TCC switches
Set default switches passed to TCC:
# Add default switches
./configure --tcc-switches= "-Wl,-rpath=/opt/lib"
# Multiple switches
./configure --tcc-switches= "-I/opt/include -L/opt/lib"
Environment variables
TCC respects these environment variables:
# Include paths
export C_INCLUDE_PATH = "/opt/include:/usr/local/include"
export CPATH = "/opt/include"
# Library paths
export LIBRARY_PATH = "/opt/lib:/usr/local/lib"
# Dynamic linker override
export LD_SO = "/lib/ld-linux-x86-64.so.2"
Advanced configuration
Custom configuration file
Create config-extra.mak for custom settings:
# Custom configuration for cross-compilation
# ARM64 configuration
ROOT-arm64 = /usr/aarch64-linux-gnu
CRT-arm64 = {R}/lib
LIB-arm64 = {B}:{R}/lib
INC-arm64 = {B}/include:{R}/include
DEF-arm64 += -D__linux__
# RISC-V configuration
TRIPLET-riscv64 = riscv64-linux-gnu
ROOT-riscv64 = /usr/riscv64-linux-gnu
# Custom CFLAGS for profiling build
CFLAGS_P = $( CFLAGS ) -pg -static -DTCC_PROFILE
The makefile automatically includes config-extra.mak if present. Use {B} for TCC directory and {R} for sysroot.
Predefined macros
Control how TCC handles predefined macros:
# Don't compile tccdefs.h (include at runtime)
./configure --config-predefs=no
# Compile tccdefs.h into TCC (default, faster)
./configure
Configuration examples
Minimal build
Smallest possible TCC:
./configure \
--config-backtrace=no \
--config-bcheck=no \
--prefix=/opt/tcc-minimal
make
Development build
For TinyCC development:
./configure \
--debug \
--config-dwarf=5 \
--prefix= $HOME /.local
make
Production cross-compiler
Full-featured cross-compiler setup:
./configure \
--prefix=/opt/tcc \
--enable-cross \
--config-dwarf=4 \
--extra-cflags= "-O2"
make
make cross
sudo make install
Static build
Statically linked TCC:
./configure \
--prefix=/opt/tcc-static \
--extra-ldflags= "-static" \
--config-libgcc=yes
make
Verifying configuration
Check configuration after running configure:
# View generated configuration
cat config.mak
cat config.h
# Test TCC version
./tcc -v
# Show TCC search paths
./tcc -vv
# Print configured directories
./tcc -print-search-dirs
Makefile targets
Available make targets:
# Build native TCC
make
# Build cross-compilers
make cross
# Build documentation
make doc
# Build specific cross-compiler
make cross-arm64
Build architecture
Supported build architectures
TinyCC can be built on:
i386 - 32-bit x86 (Linux, Windows)
x86_64 - 64-bit x86 (Linux, Windows, macOS, BSD)
ARM - 32-bit ARM (Linux, BSD)
ARM64 - 64-bit ARM (Linux, macOS, BSD)
RISC-V 64 - 64-bit RISC-V (Linux)
Architecture detection
The configure script auto-detects your CPU:
# Auto-detect (default)
./configure
# Override detection
./configure --cpu=x86_64
./configure --cpu=arm64
./configure --cpu=riscv64
Troubleshooting
Configuration fails
Common configuration errors :
Missing compiler: Install GCC or Clang
Missing headers: Install build-essential or development packages
Cross-compilation errors: Install cross-compiler toolchain
Permission denied: Use sudo for system-wide installation
Fixing configuration issues
# Clean configuration
make distclean
# Reconfigure with verbose output
./configure --help
./configure [options]
# Check compiler availability
which gcc
which clang
# Verify paths exist
ls -la /usr/local/include
ls -la /usr/local/lib
See also