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