This appendix describes the possible defines when compiling programs using Free Pascal. A brief explanation of the define, and when it is used is also given.
Define | description |
FPC_LINK_DYNAMIC | Defined when the output will be linked dynamically. |
This is defined when using the -XD compiler switch. | |
FPC_LINK_STATIC | Defined when the output will be linked statically. |
This is the default mode. | |
FPC_LINK_SMART | Defined when the output will be smartlinked. |
This is defined when using the -XX compiler switch. | |
FPC_PROFILE | Defined when profiling code is added to program. |
This is defined when using the -pg compiler switch. | |
FPC_CROSSCOMPILING | Defined when the target OS/CPU |
is different from the source OS/CPU. | |
FPC | Always defined for Free Pascal. |
VER2 | Always defined for Free Pascal version 2.x.x. |
VER2_0 | Always defined for Free Pascal version 2.0.x. |
VER2_2 | Always defined for Free Pascal version 2.2.x. |
VER3 | Always defined for Free Pascal version 3.x.x. |
VER3_0 | Always defined for Free Pascal version 3.0.x. |
VER3_2 | Always defined for Free Pascal version 3.2.x. |
FPC_VERSION | Contains the major version number from FPC. |
FPC_RELEASE | Contains the minor version number from FPC. |
FPC_PATCH | Contains the third part of the version number from FPC. |
FPC_FULLVERSION | Contains the entire version number from FPC as a single |
number which can be used for comparing. For FPC 2.2.4 it will contain 20204. | |
ENDIAN_LITTLE | Defined when the Free Pascal target is a little-endian processor |
(80x86, Alpha, ARM). | |
ENDIAN_BIG | Defined when the Free Pascal target is a big-endian processor |
(680x0, PowerPC, SPARC, MIPS). | |
FPC_DELPHI | Free Pascal is in Delphi mode, either using compiler switch -MDelphi or |
using the $MODE DELPHI directive. | |
FPC_OBJFPC | Free Pascal is in OBJFPC mode, either using compiler switch -Mobjfpc or |
using the $MODE OBJFPC directive. | |
FPC_TP | Free Pascal is in Turbo Pascal mode, either using compiler switch -Mtp or |
using the $MODE TP directive. | |
FPC_MACPAS | Free Pascal is in Mac Pascal mode, either using compiler switch -Mmacpas or |
using the $MODE MACPAS directive. | |
Remark The ENDIAN_LITTLE and ENDIAN_BIG defines were added starting from Free Pascal version 1.0.5.
Define | When defined? |
CPU86 | Free Pascal target is an Intel 80x86 or compatible (16 and 32 bit). |
CPU87 | Free Pascal target is an Intel 80x86 or compatible (16 and 32 bit). |
CPU386 | Free Pascal target is an Intel 80386 or later. |
CPUI386 | Free Pascal target is an Intel 80386 or later. |
CPU68K | Free Pascal target is a Motorola 680x0 or compatible. |
CPUM68K | Free Pascal target is a Motorola 680x0 or compatible. |
CPUM68020 | Free Pascal target is a Motorola 68020 or later. |
CPU68 | Free Pascal target is a Motorola 680x0 or compatible. |
CPUSPARC32 | Free Pascal target is a SPARC v7 or compatible. |
CPUSPARC | Free Pascal target is a SPARC v7 or compatible. |
CPUALPHA | Free Pascal target is an Alpha AXP or compatible. |
CPUPOWERPC | Free Pascal target is a 32-bit or 64-bit PowerPC or compatible. |
CPUPOWERPC32 | Free Pascal target is a 32-bit PowerPC or compatible. |
CPUPOWERPC64 | Free Pascal target is a 64-bit PowerPC or compatible. |
CPUX86_64 | Free Pascal target is a AMD64 or Intel 64-bit processor. |
CPUAMD64 | Free Pascal target is a AMD64 or Intel 64-bit processor. |
CPUX64 | Free Pascal target is a AMD64 or Intel 64-bit processor |
CPUIA64 | Free Pascal target is a Intel Itanium 64-bit processor. |
CPUARM | Free Pascal target is an ARM 32-bit processor. |
CPUAARCH64 | Free Pascal target is an ARM 64-bit processor. |
CPUAVR | Free Pascal target is an AVR 16-bit processor. |
CPU16 | Free Pascal target is a 16-bit CPU. |
CPU32 | Free Pascal target is a 32-bit CPU. |
CPU64 | Free Pascal target is a 64-bit CPU. |
CPUI8086 | indicates a 16-bit x86 target (i8086) |
Define | When defined? |
FPUSOFT | Software emulation of FPU (all types). |
FPUSSE64 | SSE64 FPU on Intel I386 and higher, AMD64. |
FPUSSE | SSE instructions on Intel I386 and higher. |
FPUSSE2 | SSE 2 instructions on Intel I386 and higher. |
FPUSSE3 | SSE 3 instructions on Intel I386 and higher, AMD64. |
FPULIBGCC | GCC library FPU emulation on ARM and M68K. |
FPU68881 | 68881 on M68K. |
FPUFPA | FPA on ARM. |
FPUFPA10 | FPA 10 on ARM. |
FPUFPA11 | FPA 11 on ARM. |
FPUVFP | VFP on ARM. |
FPUX87 | X87 FPU on Intel I8086 and higher. |
FPUITANIUM | On Intel Itanium. |
FPUSTANDARD | On PowerPC (32/64 bit). |
FPUHARD | On Sparc. |
Target operating system | Defines |
AIX | AIX, UNIX |
Amiga | AMIGA |
Android | ANDROID |
linux | LINUX, UNIX |
freebsd | FREEBSD, BSD, UNIX, DRAGONFLY |
netbsd | NETBSD, BSD, UNIX |
openbsd | OPENBSD, BSD, UNIX |
sunos | SUNOS, SOLARIS, UNIX |
go32v2 | GO32V2, DPMI |
MS-DOS 16 bit real mode | MSDOS (2.7.1 and higher) |
Haiku | HAIKU |
os2 | OS2 |
NETWARE | NETWARE, NETWLIBC |
Nintendo DS | NDS |
emx | OS2, EMX |
Solaris | SOLARIS |
WII | WII |
Windows (native NT) | NATIVENT |
Windows (16-bit) | WIN16 |
Windows (all) | WINDOWS |
Windows 32-bit | WIN32, MSWINDOWS |
Windows 64-bit | WIN64, MSWINDOWS |
Windows (winCE) | WINCE, UNDER_CE, FPC_OS_UNICODE |
Classic Amiga | AMIGA |
Atari TOS | ATARI |
Classic Macintosh | MACOS |
PalmOS | PALMOS |
BeOS | BEOS, UNIX |
QNX RTP | QNX, UNIX |
Mac OS X | BSD, DARWIN, UNIX, IPHONESYM |
On MS-DOS 16 bit, the memory model used to compile the program is defined in one of the defines FPC_MM_TINY, FPC_MM_SMALL,FPC_MM_MEDIUM, FPC_MM_COMPACT,FPC_MM_LARGE, FPC_MM_HUGE.
Remark The unix define was added starting from Free Pascal version 1.0.5. The BSD operating systems no longer define LINUX starting with version 1.0.7.
Define | Feature |
FPC_HAS_FEATURE_HEAP | Dynamic memory management |
FPC_HAS_FEATURE_INITFINAL | Initialization and Finalization |
FPC_HAS_FEATURE_RTTI | RTTI information |
FPC_HAS_FEATURE_CLASSES | Classses |
FPC_HAS_FEATURE_EXCEPTIONS | Exception support |
FPC_HAS_FEATURE_EXITCODE | Program exit code |
FPC_HAS_FEATURE_ANSISTRINGS | AnsiStrings |
FPC_HAS_FEATURE_WIDESTRINGS | WideStrings |
FPC_HAS_FEATURE_TEXTIO | Text file I/O |
FPC_HAS_FEATURE_CONSOLEIO | Console I/O |
FPC_HAS_FEATURE_FILEIO | Raw file I/O |
FPC_HAS_FEATURE_RANDOM | Random function |
FPC_HAS_FEATURE_VARIANTS | Variant support |
FPC_HAS_FEATURE_OBJECTS | TP object support |
FPC_HAS_FEATURE_DYNARRAYS | Dynamic arrays |
FPC_HAS_FEATURE_THREADING | Threading support |
FPC_HAS_FEATURE_COMMANDARGS | Command-line argument support |
FPC_HAS_FEATURE_PROCESSES | Process execution support |
FPC_HAS_FEATURE_STACKCHECK | Stack checking |
FPC_HAS_FEATURE_DYNLIBS | Dynamic library loading |
FPC_HAS_FEATURE_SOFTFPU | Software FPU emulation |
FPC_HAS_FEATURE_OBJECTIVEC1 | Objective C support |
FPC_HAS_FEATURE_RESOURCES | Resources support |
FPC_HAS_FEATURE_UNICODESTRINGS | Unicode string support |
Define | Feature |
FPC_HAS_WINLIKERESOURCES | Windows-like resource |
FPC_HAS_TYPE_EXTENDED | Extended floating point type |
FPC_HAS_TYPE_DOUBLE | Double floating point type |
FPC_HAS_TYPE_SINGLE | Single floating point type |
FPC_HAS_TYPE_FLOAT128 | 128-bit floating point type |
FPC_HAS_INTERNAL_ABS_SHORTINT | Internal handling of Abs() for shortint (8-bit) |
FPC_HAS_INTERNAL_ABS_SMALLINT | Internal handling of Abs() for smallint (16-bit) |
FPC_HAS_INTERNAL_ABS_LONG | Internal handling of Abs() for longint (32-bit) |
FPC_HAS_INTERNAL_ABS_INT64 | Internal handling of Abs() for int64 (64-bit) |
FPC_HAS_UNICODESTRING | Unicode string type |
FPC_HAS_CPSTRING | Codepage string type |
FPC_HAS_RIP_RELATIVE | relative addressing |
FPC_HAS_CEXTENDED | C extended type |
FPC_HAS_RESSTRINITS | Initialization of resource strings |
FPC_HAS_INTERNAL_ROX | Internal ROX command |
FPC_HAS_LWSYNC | Support for leightweight sync of load/store operations at assembler level. |
FPC_HAS_INTERNAL_SAR | Internal SAR command |
FPC_HAS_OPERATOR_ENUMERATOR | Enumerator operator support |
FPC_HAS_CONSTREF | Constref keyword support |
FPC_HAS_MEMBAR | Memory barrier support |
FPC_HAS_FEATURE_SUPPORT | FPC has support for the various HAS_FEATURE_NNN macros |
FPC_HAS_INTERNAL_BSF | Internal support for BSF |
FPC_HAS_INTERNAL_BSR | Internal support for BSR |
FPC_HAS_FAST_FMA_SINGLE | Fast floating point FMA for single floats |
FPC_HAS_FAST_FMA_DOUBLE | Fast floating point FMA for double floats |
FPC_HAS_INDIRECT_ENTRY_INFORMATION | Indirect entry information support |
FPC_HAS_DYNAMIC_PACKAGES | Dynamic packages support |
FPC_HAS_INDIRECT_VAR_ACCESS | Indirect variable access |