Next: , Previous: Invoking Build, Up: Building SCM

2.3.2 Build Options

The options to build specify what, where, and how to build a SCM program or dynamically linked module. These options are unrelated to the SCM command line options.

— Build Option: -p platform-name
— Build Option: —platform=platform-name

specifies that the compilation should be for a computer/operating-system combination called platform-name. Note The case of platform-name is distinguised. The current platform-names are all lower-case.

The platforms defined by table platform in build.scm are:

     Table: platform
     name              processor         operating-system  compiler
     #f                processor-family  operating-system  #f
     symbol            processor-family  operating-system  symbol
     symbol            symbol            symbol            symbol
     ================= ================= ================= =================
     *unknown*         *unknown*         unix              cc
     acorn-unixlib     acorn             *unknown*         cc
     aix               powerpc           aix               cc
     alpha-elf         alpha             unix              cc
     alpha-linux       alpha             linux             gcc
     amiga-aztec       m68000            amiga             cc
     amiga-dice-c      m68000            amiga             dcc
     amiga-gcc         m68000            amiga             gcc
     amiga-sas         m68000            amiga             lc
     atari-st-gcc      m68000            atari-st          gcc
     atari-st-turbo-c  m68000            atari-st          tcc
     borland-c         i8086             ms-dos            bcc
     darwin            powerpc           unix              cc
     djgpp             i386              ms-dos            gcc
     freebsd           *unknown*         unix              cc
     gcc               *unknown*         unix              gcc
     gnu-win32         i386              unix              gcc
     highc             i386              ms-dos            hc386
     hp-ux             hp-risc           hp-ux             cc
     irix              mips              irix              gcc
     linux             *unknown*         linux             gcc
     linux-aout        i386              linux             gcc
     linux-ia64        ia64              linux             gcc
     microsoft-c       i8086             ms-dos            cl
     microsoft-c-nt    i386              ms-dos            cl
     microsoft-quick-c i8086             ms-dos            qcl
     ms-dos            i8086             ms-dos            cc
     netbsd            *unknown*         unix              gcc
     openbsd           *unknown*         unix              gcc
     os/2-cset         i386              os/2              icc
     os/2-emx          i386              os/2              gcc
     osf1              alpha             unix              cc
     plan9-8           i386              plan9             8c
     sunos             sparc             sunos             cc
     svr4              *unknown*         unix              cc
     svr4-gcc-sun-ld   sparc             sunos             gcc
     turbo-c           i8086             ms-dos            tcc
     unicos            cray              unicos            cc
     unix              *unknown*         unix              cc
     vms               vax               vms               cc
     vms-gcc           vax               vms               gcc
     watcom-9.0        i386              ms-dos            wcc386p
— Build Option: -f pathname

specifies that the build options contained in pathname be spliced into the argument list at this point. The use of option files can separate functional features from platform-specific ones.

The Makefile calls out builds with the options in ‘.opt’ files:

Options for Makefile targets dlls, myturtle, and
Options for udgdbscm and gdbscm.
Options for libscm.a.
Options for pgscm, which instruments C functions.
Options for targets udscm4 and dscm4 (scm).
Options for targets udscm5 and dscm5 (scm).

The Makefile creates options files it depends on only if they do not already exist.

— Build Option: -o filename
— Build Option: —outname=filename

specifies that the compilation should produce an executable or object name of filename. The default is ‘scm’. Executable suffixes will be added if neccessary, e.g. ‘scm’ ⇒ ‘scm.exe’.

— Build Option: -l libname ...
— Build Option: —libraries=libname

specifies that the libname should be linked with the executable produced. If compile flags or include directories (‘-I’) are needed, they are automatically supplied for compilations. The ‘c’ library is always included. SCM features specify any libraries they need; so you shouldn't need this option often.

— Build Option: -D definition ...
— Build Option: —defines=definition

specifies that the definition should be made in any C source compilations. If compile flags or include directories (‘-I’) are needed, they are automatically supplied for compilations. SCM features specify any flags they need; so you shouldn't need this option often.

— Build Option: —compiler-options=flag

specifies that that flag will be put on compiler command-lines.

— Build Option: —linker-options=flag

specifies that that flag will be put on linker command-lines.

— Build Option: -s pathname
— Build Option: —scheme-initial=pathname

specifies that pathname should be the default location of the SCM initialization file Init5e7.scm. SCM tries several likely locations before resorting to pathname (see File-System Habitat). If not specified, the current directory (where build is building) is used.

— Build Option: -c pathname ...
— Build Option: —c-source-files=pathname

specifies that the C source files pathname ... are to be compiled.

— Build Option: -j pathname ...
— Build Option: —object-files=pathname

specifies that the object files pathname ... are to be linked.

— Build Option: -i call ...
— Build Option: —initialization=call

specifies that the C functions call ... are to be invoked during initialization.

— Build Option: -t build-what
— Build Option: —type=build-what

specifies in general terms what sort of thing to build. The choices are:

executable program.
library module.
archived dynamically linked library object files.
dynamically linked library object file.

The default is to build an executable.

— Build Option: -h batch-syntax
— Build Option: –batch-dialect=batch-syntax

specifies how to build. The default is to create a batch file for the host system. The SLIB file batch.scm knows how to create batch files for:

— Build Option: -w batch-filename
— Build Option: –script-name=batch-filename

specifies where to write the build script. The default is to display it on (current-output-port).

— Build Option: -F feature ...
— Build Option: —features=feature

specifies to build the given features into the executable. The defined features are:

Alias for ARRAYS
array-map! and array-for-each (arrays must also be featured).
Use if you want arrays, uniform-arrays and uniform-vectors.
Large precision integers.
Treating strings as byte-vectors.
Byte/number conversions
Define this for extra checking of interrupt masking and some simple checks for proper use of malloc and free. This is for debugging C code in sys.c, eval.c, repl.c and makes the interpreter several times slower than usual.
Normally, the number of arguments arguments to interpreted closures (from LAMBDA) are checked if the function part of a form is not a symbol or only the first time the form is executed if the function part is a symbol. defining ‘reckless’ disables any checking. If you want to have SCM always check the number of arguments to interpreted closures define feature ‘cautious’.
If you only need straight stack continuations, executables compile with this feature will run faster and use less storage than not having it. Machines with unusual stacks need this. Also, if you incorporate new C code into scm which uses VMS system services or library routines (which need to unwind the stack in an ordrly manner) you may need to use this feature.
Use if you want to use compiled closures.
For the curses screen management package.
Turns on the features ‘cautious’ and ‘careful-interrupt-masking’; uses -g flags for debugging SCM source code.
Sequence comparison
SCM normally converts references to local variables to ILOCs, which make programs run faster. If SCM is badly broken, try using this option to disable the MEMOIZE_LOCALS feature.
Convert a running scheme program into an executable file.
Be able to load compiled files while running.
interface to the editline or GNU readline library.
Use if you want floats to display in engineering notation (exponents always multiples of 3) instead of scientific notation.
make_gsubr for arbitrary (< 11) arguments to C functions.
Commonly available I/O extensions: exec, line I/O, file positioning, file delete and rename, and directory functions.
Use if you want floating point numbers.
Lightweight – no features
C level support for hygienic and referentially transparent macros (syntax-rules macros).
Client connections to the mysql databases.
Use if you want segments of unused heap to not be freed up after garbage collection. This may increase time in GC for *very* large working sets.
No features
Posix functions available on all Unix-like systems. fork and process functions, user and group IDs, file permissions, and link.
If your scheme code runs without any errors you can disable almost all error checking by compiling all files with ‘reckless’.
The Record package provides a facility for user to define their own record data types. See SLIB for documentation.
String regular expression matching.
These procedures were specified in the Revised^2 Report on Scheme but not in R4RS.
Use if you want to run code from:

Harold Abelson and Gerald Jay Sussman with Julie Sussman. Structure and Interpretation of Computer Programs. The MIT Press, Cambridge, Massachusetts, USA, 1985.

Differences from R5RS are:

  • (eq? '() '#f)
  • (define a 25) returns the symbol a.
  • (set! a 36) returns 36.

Use if you want all inexact real numbers to be single precision. This only has an effect if SINGLES is also defined (which is the default). This does not affect complex numbers.
BSD socket interface. Socket addr functions require inexacts or bignums for 32-bit precision.
Use if you want the ticks and ticks-interrupt functions.
Turtle graphics calls for both Borland-C and X11 from
Those unix features which have not made it into the Posix specs: nice, acct, lstat, readlink, symlink, mknod and sync.
WB database with relational wrapper.
Microsoft Windows executable.
Alias for Xlib feature.
Interface to Xlib graphics routines.