Free Pascal Wiki
Please note that all information detailed here is specific to Free Pascal 3.x and above. It does not apply to the older AROS Free Pascal 1.x port, nor does it apply to the even older 0.99.x and 1.0.x versions of Free Pascal for classic Amiga/m68k.
However, this port is very closely related to the recent supported classic Amiga/m68k and MorphOS platforms as they share some of the same code with AROS in an attempt to unify the support in Free Pascal for these platforms.
- 1 AROS Port
- 1.1 History
- 1.2 Status
- 1.3 Port Notes
- 1.4 Requirements to start developing for AROS
- 1.5 Documentation/Reference
- 1.6 Technical information
- 1.7 Developer information
This port is aimed at AROS (AROS Research Operating System), the open source implementation of the "classic Amiga" operating system, which runs on modern processors like x86-32/x86-64/arm and PPC. Currently x86-32 ABIv0 is the only supported target for Free Pascal.
Because AROS is API compatible with Amiga (and binary compatible with Amiga/m68k), there is much similarity when addressing classic Amiga, MorphOS and AROS (all of which are now supported by Free Pascal).
Free Pascal for AROS has its own Wiki page here (under slow and continues development).
A first port of Free Pascal, version 1.x at the time, was contributed to AROS by sasu in 2002. This port was (partially) based on the support units from the Amiga/m68k port of Free Pascal which in its own turn were mostly based on the work of Nils Sjoholm. Further development of this port for AROS ceased quickly thereafter.
A freshly restarted port was done in 2010 by ALB42, based on Free Pascal 2.5.1 and was announced in the first half of 2011 at aros-exec. Also this port was (partially) based on the Amiga/m68k support units made by Nils Sjoholm.
In August 2014, Chain-Q (porter of Free Pascal to MorphOS and classic Amiga(OS)) started the integrating and unification of all three supported amiga-noid platforms into the FPC 2.7.1 trunk.
With the release of FPC 3.0, AROS/i386 is officially supported as a target.
- 2002-02-19 - Free Pascal 1.1 was committed into AROS Contrib repo 
- 2007-01-02 - Not being actively developed and for saving build time and space, Free Pascal was removed from AROS Contrib. 
- 2011-04-18 - First official announcement of a working port of FPC 2.5 for AROS. 
- 2011-05-30 - Initial release of Free Pascal 2.5.1 for AROS available to public. 
- 2011-06-18 - Start of a native LCL implementation for AROS. 
- 2011-08-06 - Revision 18107 added a fresh new AROS branch in the FPC source-tree. 
- 2014-08-18 - Revision 28445 transferred AROS RTL from the AROS branch into FPC trunk 
- 2014-08-31 - Revision 28547 transferred the AROS Units package units from branch AROS to trunk, effectively adding support for AROS to experimental FPC 2.7.1 compiler. .
- Most FPC RTL functions are supported (see also missing features for more detailed information)
- AROS' support units and implementations are as much source compatible to Amiga/m68k as possible, so theoretically any program you write which uses functionality from these units could therefor be cross-compiled for Amiga/m68k and/or MorphOS (if not using AROS specific functionality).
- The (cross) compiler is available for multiple platforms, including AROS/i386, Windows32/64 and linux32/64
- AROS Binutils are available -> Need to prepare archives + Readme's, add links to sources, etc.
- Support for AROS ABIv1 is not implemented yet. see classic Amiga/m68k for now.
- No WideStrings manager. Will it ever ?
- Dynamic Libraries (in the sense of how Free Pascal implements this functionality). Normal dynamic loading of native .library files is of course supported, using Exec LoadLibrary() and CloseLibrary() functions. Reason for missing is that AROS does not officially supports retrieving Function offsets using symlinks and function names are missing from AROS native libraries.
Future enhancements (requires FPC 3.1.1. Not available in trunk, see also ALB42's blog):
- Support for fpGUI (native and LCL) was started by ALB42 in 2014 (working for most parts)
- Support for Lazarus/MUI widgets was (re)started in 2014 by ALB42 (currently in development, already very usable).
- Support for AROS/X86-64 (ABI-v1) was started in June 2015 by ALB42 and expanded by Chain-Q (seems successful, under development/testing)
- ExecuteProcess() is not supported yet -> yes it is, made available by ALB42, need to lookup revision (future functionality?)
A more elaborating status pages can be viewed on the Free Pascal for AROS wiki - Status Page.
The current (cross) compiler is able to create AROS executables for AROS/i386 (abiv0).
Every operating system derived from or based upon classic Amiga/m68k, is neither Windows nor Linux. This results in paths being treated differently. Amiga/AROS/MorphOS uses the format "Drive Name:Directory 1/Subdirectory/Name of a file.extention" (without the quotes). Please keep this in mind when developing software that is intended to run cross-platform.
Requirements to start developing for AROS
- An AROS ABIv0 i386 installation in case testing of the executables is required.
- Free Pascal for AROS, or (cross)compiler for a supported platform (Windows, Linux, Others ?).
- The AROS binutils (standard installed by most AROS distros)
- No other dependencies required, but for completeness the AROS NDK.
Native development and/or testing executables is possible by installing AROS into a virtual machine, running AROS hosted (as single application) under Linux/Windows or on a dedicated AROS machine. All of which require minimal i386 processor.
- AROS homepage
- AROS wikibook
- AROS Support forums
- Free Pascal for AROS wiki
- Free Pascal for AROS wiki - Introduction to AROS (A Short Introduction for those unfamiliar with AROS).
- Free Pascal for AROS Online reference (not up to date, we could use some help)
- AROS - To identify AROS exclusively
- HASAMIGA - To identify any Amiga-like system (Amiga/m68k, MorphOS and AROS), similar to HASUNIX which is defined across Unix systems.
Supported User Defines
- LCL_MUI (use LCL/MUI widgetset implementation), if omitted use fpGUI//LCL implementation.
Threading is supported on AROS since Free Pascal 3.0, using the AThreads unit. Read there for possible caveats and unsupported features.
AROS support in Free Pascal does not initiate the linker tool ld directly but, instead uses a tool named collect-aros which will complete the last compilation stage with calling the right binutil tools in order to create an valid AROS executable.
Compilation of the binutils and the collect-aros tool require a shell such as bash on Linux and/or MingW.
- AROS source archive from the AROS nightly download page.
- gnu binutils sources from the gnu ftp archive that matches one (or all if you prefer) of the .diff files found in the AROS source archive
Compile binutils from source:
- extract one of the binutils directories from the AROS source archive (or if you prefer all of them). Each directory contains a .diff file which corresponds with the binutils version it applies to.
- extract corresponding matching version of the gnu binutils archive.
- apply the .diff patch.
TODO: replace with bash script
Compile collect-aros tool from source:
- extract the collect-aros directory from the AROS source archive.
TODO: replace with bash script
Compiling the compiler from source
In order to be able to cross-compile you should first create the binutils for your host platform.
Cross compiling from Linux
Create the binutils
Cross compiling from Windows
Create the binutils.