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 32-bit SPARC v7 or compatible. | 
| CPUSPARC64 | Free Pascal target is a 64-bit SPARC v7 or compatible. | 
| CPUSPARCGEN | 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 | SSE2 instructions on Intel I386 and higher. | 
| FPUSSE3 | SSE3 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 | Support for AT&T assembler .tcfloat type | 
| FPC_HAS_RESSTRINITS | Initialization of resource strings | 
| FPC_HAS_INTERNAL_ROX | Internal ROX command | 
| FPC_HAS_LWSYNC | Support for lightweight 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 |