Configuration

From Freepascal Amiga wiki
Revision as of 14:08, 30 May 2014 by Molly (talk | contribs) (typos removed)
Jump to navigation Jump to search

The Freepascal compiler is basically nothing more then a command-line program that you can execute from the shell by typing the "fpc" (without quotes) and pressing enter. Providing no options to the command-line compiler will result in the compiler showing which options it accepts in order to configure the compiler.

When a project needs to be compiled, several options need to be provided to f.e. make sure the compiler is able to produce a working executable.

Those options can also be provided by using the fpc.cfg file (that, by default, resides in the same drawer as the fpc command).

In case you need to override an option that is already in place in the fpc.cfg configuration file, then you can simply provide it as an option to the fpc command.

Please note that FP-IDE (that is included in the AROS distribution of FPC) uses it's own fp.cfg file (when the IDE resides in it's own drawer) and therefore does not use the default fpc.cfg file (that is found in the drawer where the fpc command resides).

AROS freepascal adds one extra define on top of fpc's default defines, and can be used to provide special configuration options for aros. The define is AROS.

Other then that, configuration of the compiler is basically the same as the normal compiler configuration (used on other platforms).

Details on how to configure the compiler can be read in the offical FreePascal user manual, chapter 5 - Compiler configuration.



Starting with Icaros Desktop vx.x, Icaros Desktop provides an AROS package for Freepascal that takes care of adding an assign and a path for Freepascal.

The package provides an assign named "FreePascal:" and a path to the "FreePascal:bin" drawer (both without quotes).

The (new) default fpc.cfg (which can now be addressed as being stored in the FreePascal:bin drawer) as well as the fp.cfg configuration file for FP-IDE both have been modified to make use of the package configuration, and makes it possible to compile pascal source-code from both FP-IDE and the command-line out of the box, without having to make any (manual) modifications to the configuration files.

In case you do not use Icaros Desktop as your configuration and have problems making adjustments to the configuration files used by Freepascal, then it might be an idea to add the package assign and path to your distribution and use/copy the configuration files provided with Icaros Desktop x.x. Alternatively the new configurations files are listed here for your convenience (TODO: paste new configuration files here).


The default fpc.cfg file (used by fpc)

Below you can see the default fpc.cfg file that is provided in the Freepascal archive for AROS.

You'll have to make sure that the lines starting with -Fu entries in this configuration point to paths that match your configuration and fpc setup.

#
# Config file generated by fpcmkcfg on 5-7-12 - 11:39:44
# Example fpc.cfg for Free Pascal Compiler
#

# ----------------------
# Defines (preprocessor)
# ----------------------

#
# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
#
# -d is the same as #DEFINE
# -u is the same as #UNDEF
#

#
# Some examples (for switches see below, and the -? helppages)
#
# Try compiling with the -dRELEASE or -dDEBUG on the commandline
#

# For a release compile with optimizes and strip debuginfo
#IFDEF RELEASE
  -O2
  -Xs
  #WRITE Compiling Release Version
#ENDIF

# For a debug version compile with debuginfo and all codegeneration checks on
#IFDEF DEBUG
  -gl
  -Crtoi
  #WRITE Compiling Debug Version
#ENDIF

# assembling
#ifdef darwin
# use pipes instead of temporary files for assembling
-ap
#endif

# ----------------
# Parsing switches
# ----------------

# Pascal language mode
#      -Mfpc      free pascal dialect (default)
#      -Mobjfpc   switch some Delphi 2 extensions on
#      -Mdelphi   tries to be Delphi compatible
#      -Mtp       tries to be TP/BP 7.0 compatible
#      -Mgpc      tries to be gpc compatible
#      -Mmacpas   tries to be compatible to the macintosh pascal dialects
#
# Turn on Object Pascal extensions by default
#-Mobjfpc

# Assembler reader mode
#      -Rdefault  use default assembler
#      -Ratt      read AT&T style assembler
#      -Rintel    read Intel style assembler
#
# All assembler blocks are AT&T styled by default
#-Ratt

# Semantic checking
#      -S2        same as -Mobjfpc
#      -Sc        supports operators like C (*=,+=,/= and -=)
#      -Sa        include assertion code.
#      -Sd        same as -Mdelphi
#      -Se<x>     error options. <x> is a combination of the following:
#         <n> : compiler stops after <n> errors (default is 1)
#         w   : compiler stops also after warnings
#         n   : compiler stops also after notes
#         h   : compiler stops also after hints
#      -Sg        allow LABEL and GOTO
#      -Sh        Use ansistrings
#      -Si        support C++ styled INLINE
#      -Sk        load fpcylix unit
#      -SI<x>     set interface style to <x>
#         -SIcom    COM compatible interface (default)
#         -SIcorba  CORBA compatible interface
#      -Sm        support macros like C (global)
#      -So        same as -Mtp
#      -Sp        same as -Mgpc
#      -Ss        constructor name must be init (destructor must be done)
#      -Sx        enable exception keywords (default in Delphi/ObjFPC modes)
#
# Allow goto, inline, C-operators, C-vars
-Sgic

# ---------------
# Code generation
# ---------------

# Uncomment the next line if you always want static/dynamic units by default
# (can be overruled with -CD, -CS at the commandline)
#-CS
#-CD

# Set the default heapsize to 8Mb
#-Ch8000000

# Set default codegeneration checks (iocheck, overflow, range, stack)
#-Ci
#-Co
#-Cr
#-Ct

# Optimizer switches
# -Os        generate smaller code
# -Oa=N      set alignment to N
# -O1        level 1 optimizations (quick optimizations, debuggable)
# -O2        level 2 optimizations (-O1 + optimizations which make debugging more difficult)
# -O3        level 3 optimizations (-O2 + optimizations which also may make the program slower rather than faster)
# -Oo<x>     switch on optimalization x. See fpc -i for possible values
# -OoNO<x>   switch off optimalization x. See fpc -i for possible values
# -Op<x>     set target cpu for optimizing, see fpc -i for possible values

#ifdef darwin
#ifdef cpui386
-Cppentiumm
-Oppentiumm
#endif
#endif

# -----------------------
# Set Filenames and Paths
# -----------------------

# Both slashes and backslashes are allowed in paths

# path to the messagefile, not necessary anymore but can be used to override
# the default language
#-Fr//$fpcversion/msg/errore.msg
#-Fr//$fpcversion/msg/errorn.msg
#-Fr//$fpcversion/msg/errores.msg
#-Fr//$fpcversion/msg/errord.msg
#-Fr//$fpcversion/msg/errorr.msg

# searchpath for units and other system dependent things
-FuDevelopment:units/i386-aros/*
-FuDevelopment:lazarus/components/lazutils/lib/i386-aros
-FuDevelopment:lazarus/lcl/units/i386-aros
-FuDevelopment:lazarus/lcl/units/i386-aros/fpgui
#IFDEF FPCAPACHE_1_3
-Fu//$fpcversion/units/$fpctarget/httpd13/
#ELSE
#IFDEF FPCAPACHE_2_0
-Fu//$fpcversion/units/$fpctarget/httpd20
#ELSE
-Fu//$fpcversion/units/$fpctarget/httpd22
#ENDIF
#ENDIF

# searchpath for fppkg user-specific packages
-Fu$LOCAL_APPDATA/FreePascal/fppkg/units/$FPCTARGET/*

# path to the gcclib


# searchpath for libraries
#-Fl//$fpcversion/lib
#-Fl/lib;/usr/lib

# searchpath for tools
-FD//$fpcversion/bin/$FPCTARGET

#IFNDEF CPUI386
#IFNDEF CPUAMD64
#DEFINE NEEDCROSSBINUTILS
#ENDIF
#ENDIF

#IFNDEF aros
#DEFINE NEEDCROSSBINUTILS
#ENDIF

# binutils prefix for cross compiling
#IFDEF FPC_CROSSCOMPILING
#IFDEF NEEDCROSSBINUTILS
  -XP$FPCTARGET-
#ENDIF
#ENDIF


# -------------
# Linking
# -------------

# generate always debugging information for GDB (slows down the compiling
# process)
#      -gc        generate checks for pointers
#      -gd        use dbx
#      -gg        use gsym
#      -gh        use heap trace unit (for memory leak debugging)
#      -gl        use line info unit to show more info for backtraces
#      -gv        generates programs tracable with valgrind
#      -gw        generate dwarf debugging info
#
# Enable debuginfo and use the line info unit by default
#-gl

# always pass an option to the linker
#-k-s
# Always strip debuginfo from the executable
-Xs


# -------------
# Miscellaneous
# -------------

# Write always a nice FPC logo ;)
-l

# Verbosity
#      e : Show errors (default)       d : Show debug info
#      w : Show warnings               u : Show unit info
#      n : Show notes                  t : Show tried/used files
#      h : Show hints                  s : Show time stamps
#      i : Show general info           q : Show message numbers
#      l : Show linenumbers            c : Show conditionals
#      a : Show everything             0 : Show nothing (except errors)
#      b : Write file names messages   r : Rhide/GCC compatibility mode
#          with full path              x : Executable info (Win32 only)
#      v : write fpcdebug.txt with     p : Write tree.log with parse tree
#          lots of debugging info
#
# Display Info, Warnings and Notes
-viwn
# If you don't want so much verbosity use
#-vw

the default fp.cfg file (used by fp IDE)

Below you can see the default configuration file used by the fp-IDE. Normally you would not (and shouldn't) edit this file manually, but by using the GUI in fp-IDE.

# Automatically created file, don't edit.
#IFDEF NORMAL
 -Taros
 -Mfpc
 -O2
 -Cp80386
 -Op80386
 -Rdefault
 -FuDevelopment:units/i386-aros/*
 -Fu/Development/lib
 -FuDevelopment:lazarus/components/lazutils/lib/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros/fpgui
 -Fu//$fpcversion/units/$fpctarget/httpd13/
 -Fu//$fpcversion/units/$fpctarget/httpd20
 -Fu//$fpcversion/units/$fpctarget/httpd22
 -Fu$LOCAL_APPDATA/FreePascal/fppkg/units/$FPCTARGET/*
 -Fl/Development/lib
 -Fo/Development/lib
 -FDDevelopment:bin
 -XS
 -g-
 -p-
 -b-
#ENDIF

#IFDEF DEBUG
 -Taros
 -Mfpc
 -vi
 -Sg
 -Cr
 -CpPENTIUMM
 -OpPENTIUMM
 -Rdefault
 -ap
 -FuDevelopment:units/i386-aros/*
 -FuDevelopment:lazarus/components/lazutils/lib/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros/fpgui
 -Fu//$fpcversion/units/$fpctarget/httpd13/
 -Fu//$fpcversion/units/$fpctarget/httpd20
 -Fu//$fpcversion/units/$fpctarget/httpd22
 -Fu$LOCAL_APPDATA/FreePascal/fppkg/units/$FPCTARGET/*
 -FDDevelopment:bin
 -XS
 -gl
 -p-
 -b-
 
 -XP$FPCTARGET-
 -l
#ENDIF

#IFDEF RELEASE
 -Taros
 -Mfpc
 -O2
 -Cp80386
 -Op80386
 -Rdefault
 -FuDevelopment:units/i386-aros/*
 -FuDevelopment:lazarus/components/lazutils/lib/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros
 -FuDevelopment:lazarus/lcl/units/i386-aros/fpgui
 -Fu//$fpcversion/units/$fpctarget/httpd13/
 -Fu//$fpcversion/units/$fpctarget/httpd20
 -Fu//$fpcversion/units/$fpctarget/httpd22
 -Fu$LOCAL_APPDATA/FreePascal/fppkg/units/$FPCTARGET/*
 -FDDevelopment:bin
 -XS
 -g-
 -p-
 -b-
#ENDIF