9.2.5 The Foreign Resource Linker

The foreign resource linker, splfr, is used for creating foreign resources (see Foreign Resources). splfr reads terms from a Prolog file, applying op declarations and extracting any foreign_resource/2 fact with first argument matching the resource name and all foreign/[2,3] facts. Based on this information, it generates the necessary glue code, and combines it with any additional C or object files provided by the user into a linked foreign resource. The output file name will be the resource name with a suitable extension. splfr is invoked as

     % splfr [ Option | InputFile ] ...

The input to splfr can be divided into Options and InputFiles and they can be arbitrarily mixed on the command line. Anything not interpreted as an option will be interpreted as an input file. Exactly one of the input files should be a Prolog file. The following options are available:

--help
-v
--verbose
--version
--config=ConfigFile
--cflag=CFlag
-LD
--sicstus=Executable
--with_jdk=DIR
--with_tcltk=DIR
--with_tcl=DIR
--with_tk=DIR
--with_bdb=DIR
--keep
These are treated the same as for the spld tool. See The Application Builder, for details.
--resource=ResourceName
Specify the resource's name. This defaults to the basename of the Prolog source file found on the command line.
-o, --output=OutputFileName
Specify output file name. This defaults to the name of the resource, suffixed with the platform's standard shared object suffix (i.e. `.so' on most UNIX dialects, `.dll' under Windows). The use of this option is discouraged, except to change the output directory.
--manual
Do not generate any glue code. This option can only be used when the interface code is generated manually as described in Runtime Utilities. You should probably not use this option.
-S
--static
Create a statically linked foreign resource instead of a dynamically linked one, which is the default. A statically linked foreign resource is a single object file, which can be pre-linked into a Prolog system. See also the spld tool, The Application Builder.
--no-rpath
Under UNIX, the default is to embed into the shared object all linker library directories for use by the dynamic linker. For most UNIX linkers this corresponds to adding a -Rpath for each -Lpath. The --no-rpath option inihibits this.
--nocompile
Do not compile, just generate code. This may be useful in Makefiles, for example to generate the header file in a separate step. Implies --keep.
--namebase=namebase
namebase will be used as part of the name of generated files. The default name base is the resource name (e.g. as specified with --resource). If --static is specified, the default namebase is the resource name followed by `_s'.
--header=headername
Specify the name of the generated header file. The default if is namebase_glue.h. All C files that define foreign functions or that call SICStus API functions should include this file. Among other things the generated header file includes prototypes corresponding to the foreign/3 declarations in the prolog code.
--multi-sp-aware
--exclusive-access
--context-hook=name
--no-context-hook
Specifies various degrees of support for more than one SICStus in the same process. See Foreign Resources and Multiple SICStus Run-Times, for details.
--moveable
Do not embed paths into the foreign resource.

On platforms that support it, i.e. some versions of UNIX, the default behavior of splfr is to add each directory dir specified with -Ldir to the search path used by the run-time loader (using the SysV ld -R option or similar). The option --moveable turns off this behavior. For additional details, see the corresponding option to spld (see The Application Builder).

The key input to splfr is the SourceFile. The contents of this file determines how the foreign resource's interface will look like. When the source-file is read in, foreign_resource/2 facts with first argument matching the name of this resource (i.e. ResourceName) is extracted together with all foreign/[2,3] facts.