Tools used by fbc

External tools the FreeBASIC compiler (fbc) may invoke during the 
compilation process.

Description
   FreeBASIC uses several tools for compiling source code in addition to 
   the fbc compiler.  The exact tools used by fbc and how they are invoked 
   depends on how fbc was configured, the host platform (where fbc is 
   running), the target platform (where the produced executable will be 
   run), and other options (like environment variables and command line 
   options).

   FreeBASIC (fbc) may have been configured in one of two ways: either as 
   standalone or prefixed.  The standalone version searches directories 
   relative to where the executable is located.  The prefixed version has a 
   hardcoded path configured in to the compiler indicating where it expects 
   to find additional tools and libraries.  For more information on 
   configuring FreeBASIC, see the INSTALL text file located in the 
   src/compiler directory of the FreeBASIC sources.

   You can check if your installed version of fbc is "standalone" or 
   "prefixed" by invoking fbc with the -version command line option.

Standalone
   If fbc was configured as "standalone", it will search for files relative 
   to where the fbc executable is located.  fbc is at the "top" of the 
   directory tree and searches sub-directories below it.  The "top" 
   directory (which defaults to the location where fbc is located) can be 
   overridden with the -prefix command line option.  "topdir" shown in the 
   directories below represents the directory where the fbc executable is 
   located, or the directory specified with the -prefix command line option 
   (if it was given). "<target>" refers to the target platform having the 
   same name as specified by the -target option.

   If not cross compiling, fbc looks in these locations: 
      * /topdir/inc
      * /topdir/lib/<target>
      * /topdir/bin/<target>
      * gcc is queried for missing libraries (currently on linux/freebsd 
        only) 

   If cross compiling, fbc looks in the these locations: 
      * /topdir/inc
      * /topdir/lib/<target>
      * /topdir/bin/<target>
      * gcc is not queried (only target library directory is used)

Prefixed
   If fbc was configured as "prefixed", it will search for files relative 
   to the configured prefix (hardcoded in the fbc executable).  "prefix" 
   shown in the directories below represents the configured prefix, or the 
   directory specified with the -prefix command line option (if it was 
   given).  "<target>" refers to the target platform having the same name 
   as specified by the -target option.

   If not cross compiling, fbc looks in these locations: 
      * /prefix/include/freebasic
      * /prefix/lib/freebasic/<target>
      * /prefix/bin/freebasic/<target>
      * gcc is queried for missing libraries (currently on linux/freebsd 
        only) 

   If cross compiling, fbc looks in the these locations: 
      * /prefix/include/freebasic
      * /prefix/lib/freebasic/<target>
      * /prefix/bin/freebasic/<target>
      * gcc is not queried (only target library directory is used)

GCC Queries
   If fbc is unable to locate a file, it may invoke gcc -print-file-name=<
   file> to query the location of the file.  The following are files that 
   may be located using gcc:
      * crt1.o
      * crtbegin.o
      * crtend.o
      * crti.o
      * crtn.o
      * gcrt1.o
      * libgcc.a
      * libsupc++.a
      * libc.so (Linux only)

Finding Binaries
   fbc will invoke additional tools (binary executables) as part of the 
   compiling and linking process.  The following is a list of tools 
   (executables) that may be invoked by fbc depending on the host platform, 
   target, or type of executable or library to be produced:
      * as
      * ar
      * ld
      * gcc
      * GoRC
      * dlltool
      * pexports
      * cxbe

   fbc will search for these tools in the following manner:
      * If an environment variable (having same name as the tool without 
        any extension, all in uppercase) has been set, it explicitly 
        indicates the path and name of the executable to be invoked.
      * If the file (or a symlink) exists in prefix/bin/freebasic/<target>
        , or ./bin/<target> for the standalone version, then use it.
      * On Linux, if the tool could not be found in prefix/bin/freebasic/<
        target>, or ./bin/<target> for the standalone version, fbc tries to 
        invoke it anyway as it may be installed on the system and located 
        on the PATH.

   "<target>" refers to the target platform having the same name as 
   specified by the -target option.

See also
   * Running FreeBASIC
   * Compiler Command Line Options
   * Compiler FAQ

