2011-07-27 07:17:02 -07:00
|
|
|
.\"***********************************************************************
|
|
|
|
.\"* *
|
|
|
|
.\"* OCaml *
|
|
|
|
.\"* *
|
|
|
|
.\"* Xavier Leroy, projet Cristal, INRIA Rocquencourt *
|
|
|
|
.\"* *
|
|
|
|
.\"* Copyright 1996 Institut National de Recherche en Informatique et *
|
|
|
|
.\"* en Automatique. All rights reserved. This file is distributed *
|
|
|
|
.\"* under the terms of the Q Public License version 1.0. *
|
|
|
|
.\"* *
|
|
|
|
.\"***********************************************************************
|
|
|
|
.\"
|
1996-05-10 06:27:26 -07:00
|
|
|
.TH OCAMLOPT 1
|
1995-11-02 08:54:37 -08:00
|
|
|
|
|
|
|
.SH NAME
|
|
|
|
|
2011-04-26 05:16:50 -07:00
|
|
|
ocamlopt \- The OCaml native-code compiler
|
1995-11-02 08:54:37 -08:00
|
|
|
|
|
|
|
.SH SYNOPSIS
|
2008-09-15 07:05:30 -07:00
|
|
|
|
1996-04-30 07:53:58 -07:00
|
|
|
.B ocamlopt
|
1995-11-02 08:54:37 -08:00
|
|
|
[
|
2008-09-15 07:05:30 -07:00
|
|
|
.I options
|
1995-11-02 08:54:37 -08:00
|
|
|
]
|
2008-09-15 07:05:30 -07:00
|
|
|
.IR filename \ ...
|
1995-11-02 08:54:37 -08:00
|
|
|
|
1999-02-25 06:25:54 -08:00
|
|
|
.B ocamlopt.opt
|
2008-09-15 07:05:30 -07:00
|
|
|
(same options)
|
1999-02-25 06:25:54 -08:00
|
|
|
|
1995-11-02 08:54:37 -08:00
|
|
|
.SH DESCRIPTION
|
2008-09-15 07:05:30 -07:00
|
|
|
|
2011-04-26 05:16:50 -07:00
|
|
|
The OCaml high-performance
|
2008-09-15 07:05:30 -07:00
|
|
|
native-code compiler
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlopt (1)
|
2011-06-15 05:24:26 -07:00
|
|
|
compiles OCaml source files to native code object files and link these
|
1995-11-02 08:54:37 -08:00
|
|
|
object files to produce standalone executables.
|
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
The
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlopt (1)
|
1995-11-02 08:54:37 -08:00
|
|
|
command has a command-line interface very close to that
|
2008-09-15 07:05:30 -07:00
|
|
|
of
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlc (1).
|
2004-07-13 05:25:21 -07:00
|
|
|
It accepts the same types of arguments and processes them
|
|
|
|
sequentially:
|
1995-11-02 08:54:37 -08:00
|
|
|
|
|
|
|
Arguments ending in .mli are taken to be source files for
|
|
|
|
compilation unit interfaces. Interfaces specify the names exported by
|
|
|
|
compilation units: they declare value names with their types, define
|
|
|
|
public data types, declare abstract data types, and so on. From the
|
2008-09-15 07:05:30 -07:00
|
|
|
file
|
|
|
|
.IR x .mli,
|
|
|
|
the
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlopt (1)
|
1995-11-02 08:54:37 -08:00
|
|
|
compiler produces a compiled interface
|
2008-09-15 07:05:30 -07:00
|
|
|
in the file
|
|
|
|
.IR x .cmi.
|
1995-11-02 08:54:37 -08:00
|
|
|
The interface produced is identical to that
|
2008-09-15 07:05:30 -07:00
|
|
|
produced by the bytecode compiler
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlc (1).
|
1995-11-02 08:54:37 -08:00
|
|
|
|
|
|
|
Arguments ending in .ml are taken to be source files for compilation
|
|
|
|
unit implementations. Implementations provide definitions for the
|
|
|
|
names exported by the unit, and also contain expressions to be
|
2008-09-15 07:05:30 -07:00
|
|
|
evaluated for their side-effects. From the file
|
|
|
|
.IR x .ml,
|
|
|
|
the
|
2002-08-06 01:22:45 -07:00
|
|
|
.BR ocamlopt (1)
|
2008-09-15 07:05:30 -07:00
|
|
|
compiler produces two files:
|
|
|
|
.IR x .o,
|
|
|
|
containing native object code, and
|
|
|
|
.IR x .cmx,
|
1995-11-02 08:54:37 -08:00
|
|
|
containing extra information for linking and
|
|
|
|
optimization of the clients of the unit. The compiled implementation
|
2008-09-15 07:05:30 -07:00
|
|
|
should always be referred to under the name
|
|
|
|
.IR x .cmx
|
|
|
|
(when given a .o file,
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlopt (1)
|
2011-06-15 05:24:26 -07:00
|
|
|
assumes that it contains code compiled from C, not from OCaml).
|
1995-11-02 08:54:37 -08:00
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
The implementation is checked against the interface file
|
|
|
|
.IR x .mli
|
|
|
|
(if it exists) as described in the manual for
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlc (1).
|
1995-11-02 08:54:37 -08:00
|
|
|
|
|
|
|
Arguments ending in .cmx are taken to be compiled object code. These
|
|
|
|
files are linked together, along with the object files obtained
|
2011-06-15 05:24:26 -07:00
|
|
|
by compiling .ml arguments (if any), and the OCaml standard
|
1995-11-02 08:54:37 -08:00
|
|
|
library, to produce a native-code executable program. The order in
|
|
|
|
which .cmx and .ml arguments are presented on the command line is
|
|
|
|
relevant: compilation units are initialized in that order at
|
|
|
|
run-time, and it is a link-time error to use a component of a unit
|
2008-09-15 07:05:30 -07:00
|
|
|
before having initialized it. Hence, a given
|
|
|
|
.IR x .cmx
|
1995-11-02 08:54:37 -08:00
|
|
|
file must come
|
2008-09-15 07:05:30 -07:00
|
|
|
before all .cmx files that refer to the unit
|
1995-11-02 08:54:37 -08:00
|
|
|
.IR x .
|
|
|
|
|
|
|
|
Arguments ending in .cmxa are taken to be libraries of object code.
|
|
|
|
Such a library packs in two files
|
2008-09-15 07:05:30 -07:00
|
|
|
.IR lib .cmxa
|
|
|
|
and
|
|
|
|
.IR lib .a
|
1995-11-02 08:54:37 -08:00
|
|
|
a set of object files (.cmx/.o files). Libraries are build with
|
1996-04-30 07:53:58 -07:00
|
|
|
.B ocamlopt \-a
|
1995-11-02 08:54:37 -08:00
|
|
|
(see the description of the
|
|
|
|
.B \-a
|
|
|
|
option below). The object
|
|
|
|
files contained in the library are linked as regular .cmx files (see
|
|
|
|
above), in the order specified when the library was built. The only
|
|
|
|
difference is that if an object file contained in a library is not
|
|
|
|
referenced anywhere in the program, then it is not linked in.
|
|
|
|
|
|
|
|
Arguments ending in .c are passed to the C compiler, which generates
|
|
|
|
a .o object file. This object file is linked with the program.
|
|
|
|
|
|
|
|
Arguments ending in .o or .a are assumed to be C object files and
|
|
|
|
libraries. They are linked with the program.
|
|
|
|
|
|
|
|
The output of the linking phase is a regular Unix executable file. It
|
2008-09-15 07:05:30 -07:00
|
|
|
does not need
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlrun (1)
|
1995-11-02 08:54:37 -08:00
|
|
|
to run.
|
|
|
|
|
1999-02-25 06:25:54 -08:00
|
|
|
.B ocamlopt.opt
|
|
|
|
is the same compiler as
|
|
|
|
.BR ocamlopt ,
|
|
|
|
but compiled with itself instead of with the bytecode compiler
|
|
|
|
.BR ocamlc (1).
|
|
|
|
Thus, it behaves exactly like
|
|
|
|
.BR ocamlopt ,
|
|
|
|
but compiles faster.
|
|
|
|
.B ocamlopt.opt
|
2011-04-26 05:16:50 -07:00
|
|
|
is not available in all installations of OCaml.
|
1999-02-25 06:25:54 -08:00
|
|
|
|
1995-11-02 08:54:37 -08:00
|
|
|
.SH OPTIONS
|
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
The following command-line options are recognized by
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlopt (1).
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
|
|
|
.B \-a
|
|
|
|
Build a library (.cmxa/.a file) with the object files (.cmx/.o
|
|
|
|
files) given on the command line, instead of linking them into an
|
2008-09-15 07:05:30 -07:00
|
|
|
executable file. The name of the library must be set with the
|
1995-11-02 08:54:37 -08:00
|
|
|
.B \-o
|
2008-09-15 07:05:30 -07:00
|
|
|
option.
|
1995-11-02 08:54:37 -08:00
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
If
|
|
|
|
.BR \-cclib \ or \ \-ccopt
|
|
|
|
options are passed on the command
|
|
|
|
line, these options are stored in the resulting .cmxa library. Then,
|
|
|
|
linking with this library automatically adds back the
|
2012-07-26 12:21:54 -07:00
|
|
|
.BR \-cclib \ and \ \-ccopt
|
2008-09-15 07:05:30 -07:00
|
|
|
options as if they had been provided on the
|
|
|
|
command line, unless the
|
|
|
|
.B \-noautolink
|
2015-02-08 03:18:29 -08:00
|
|
|
option is given. Additionally, a substring
|
|
|
|
.B $CAMLORIGIN
|
|
|
|
inside a
|
|
|
|
.BR \ \-ccopt
|
|
|
|
options will be replaced by the full path to the .cma library,
|
|
|
|
excluding the filename.
|
2008-09-15 07:05:30 -07:00
|
|
|
.TP
|
2012-08-03 03:22:35 -07:00
|
|
|
.B \-absname
|
|
|
|
Show absolute filenames in error messages.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-annot
|
|
|
|
Dump detailed information about the compilation (types, bindings,
|
|
|
|
tail-calls, etc). The information for file
|
|
|
|
.IR src .ml
|
|
|
|
is put into file
|
|
|
|
.IR src .annot.
|
|
|
|
In case of a type error, dump all the information inferred by the
|
|
|
|
type-checker before the error. The
|
|
|
|
.IR src .annot
|
|
|
|
file can be used with the emacs commands given in
|
|
|
|
.B emacs/caml\-types.el
|
|
|
|
to display types and other annotations interactively.
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
2013-09-04 08:12:37 -07:00
|
|
|
.B \-bin\-annot
|
|
|
|
Dump detailed information about the compilation (types, bindings,
|
|
|
|
tail-calls, etc) in binary format. The information for file
|
|
|
|
.IR src .ml
|
|
|
|
is put into file
|
|
|
|
.IR src .cmt.
|
|
|
|
In case of a type error, dump
|
|
|
|
all the information inferred by the type-checker before the error.
|
|
|
|
The annotation files produced by
|
|
|
|
.B \-bin\-annot
|
|
|
|
contain more information
|
|
|
|
and are much more compact than the files produced by
|
|
|
|
.BR \-annot .
|
2012-02-19 10:35:30 -08:00
|
|
|
.TP
|
1995-11-02 08:54:37 -08:00
|
|
|
.B \-c
|
|
|
|
Compile only. Suppress the linking phase of the
|
|
|
|
compilation. Source code files are turned into compiled files, but no
|
|
|
|
executable file is produced. This option is useful to
|
|
|
|
compile modules separately.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.BI \-cc \ ccomp
|
|
|
|
Use
|
|
|
|
.I ccomp
|
|
|
|
as the C linker called to build the final executable and as the C
|
|
|
|
compiler for compiling .c source files.
|
|
|
|
.TP
|
|
|
|
.BI \-cclib\ \-l libname
|
1995-11-02 08:54:37 -08:00
|
|
|
Pass the
|
2008-09-15 07:05:30 -07:00
|
|
|
.BI \-l libname
|
1995-11-02 08:54:37 -08:00
|
|
|
option to the linker. This causes the given C library to be linked
|
|
|
|
with the program.
|
|
|
|
.TP
|
|
|
|
.BI \-ccopt \ option
|
|
|
|
Pass the given option to the C compiler and linker. For instance,
|
2008-09-15 07:05:30 -07:00
|
|
|
.BI \-ccopt\ \-L dir
|
1995-11-02 08:54:37 -08:00
|
|
|
causes the C linker to search for C libraries in
|
2008-09-15 07:05:30 -07:00
|
|
|
directory
|
1995-11-02 08:54:37 -08:00
|
|
|
.IR dir .
|
1999-02-25 06:25:54 -08:00
|
|
|
.TP
|
1995-11-02 08:54:37 -08:00
|
|
|
.B \-compact
|
|
|
|
Optimize the produced code for space rather than for time. This
|
|
|
|
results in smaller but slightly slower programs. The default is to
|
|
|
|
optimize for speed.
|
2008-09-15 07:05:30 -07:00
|
|
|
.TP
|
|
|
|
.B \-config
|
|
|
|
Print the version number of
|
|
|
|
.BR ocamlopt (1)
|
|
|
|
and a detailed summary of its configuration, then exit.
|
|
|
|
.TP
|
|
|
|
.BI \-for\-pack \ module\-path
|
|
|
|
Generate an object file (.cmx and .o files) that can later be included
|
|
|
|
as a sub-module (with the given access path) of a compilation unit
|
|
|
|
constructed with
|
|
|
|
.BR \-pack .
|
|
|
|
For instance,
|
|
|
|
.B ocamlopt\ \-for\-pack\ P\ \-c\ A.ml
|
|
|
|
will generate a.cmx and a.o files that can later be used with
|
|
|
|
.BR "ocamlopt -pack -o P.cmx a.cmx" .
|
|
|
|
.TP
|
|
|
|
.B \-g
|
|
|
|
Add debugging information while compiling and linking. This option is
|
|
|
|
required in order to produce stack backtraces when
|
|
|
|
the program terminates on an uncaught exception (see
|
|
|
|
.BR ocamlrun (1)).
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
|
|
|
.B \-i
|
|
|
|
Cause the compiler to print all defined names (with their inferred
|
|
|
|
types or their definitions) when compiling an implementation (.ml
|
2008-09-15 07:05:30 -07:00
|
|
|
file). No compiled files (.cmo and .cmi files) are produced.
|
|
|
|
This can be useful to check the types inferred by the
|
1995-11-02 08:54:37 -08:00
|
|
|
compiler. Also, since the output follows the syntax of interfaces, it
|
|
|
|
can help in writing an explicit interface (.mli file) for a file:
|
|
|
|
just redirect the standard output of the compiler to a .mli file,
|
|
|
|
and edit that file to remove all declarations of unexported names.
|
|
|
|
.TP
|
|
|
|
.BI \-I \ directory
|
|
|
|
Add the given directory to the list of directories searched for
|
2014-01-22 06:01:10 -08:00
|
|
|
compiled interface files (.cmi), compiled object code files (.cmx),
|
|
|
|
and libraries (.cmxa). By default, the current directory is searched
|
|
|
|
first, then the standard library directory. Directories added with \-I
|
|
|
|
are searched after the current directory, in the order in which they
|
|
|
|
were given on the command line, but before the standard library
|
|
|
|
directory. See also option
|
|
|
|
.BR \-nostdlib .
|
1995-11-02 08:54:37 -08:00
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
If the given directory starts with
|
|
|
|
.BR + ,
|
|
|
|
it is taken relative to the
|
|
|
|
standard library directory. For instance,
|
2014-12-13 14:36:00 -08:00
|
|
|
.B \-I\ +compiler-libs
|
2008-09-15 07:05:30 -07:00
|
|
|
adds the subdirectory
|
2014-12-13 14:36:00 -08:00
|
|
|
.B compiler-libs
|
2008-09-15 07:05:30 -07:00
|
|
|
of the standard library to the search path.
|
|
|
|
.TP
|
2013-09-04 08:12:37 -07:00
|
|
|
.BI \-impl \ filename
|
|
|
|
Compile the file
|
|
|
|
.I filename
|
|
|
|
as an implementation file, even if its extension is not .ml.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.BI \-inline \ n
|
|
|
|
Set aggressiveness of inlining to
|
|
|
|
.IR n ,
|
|
|
|
where
|
|
|
|
.I n
|
|
|
|
is a positive
|
|
|
|
integer. Specifying
|
|
|
|
.B \-inline 0
|
|
|
|
prevents all functions from being
|
|
|
|
inlined, except those whose body is smaller than the call site. Thus,
|
|
|
|
inlining causes no expansion in code size. The default aggressiveness,
|
|
|
|
.BR \-inline\ 1 ,
|
|
|
|
allows slightly larger functions to be inlined, resulting
|
|
|
|
in a slight expansion in code size. Higher values for the
|
|
|
|
.B \-inline
|
|
|
|
option cause larger and larger functions to become candidate for
|
|
|
|
inlining, but can result in a serious increase in code size.
|
|
|
|
.TP
|
|
|
|
.BI \-intf \ filename
|
|
|
|
Compile the file
|
|
|
|
.I filename
|
|
|
|
as an interface file, even if its extension is not .mli.
|
|
|
|
.TP
|
|
|
|
.BI \-intf\-suffix \ string
|
|
|
|
Recognize file names ending with
|
|
|
|
.I string
|
|
|
|
as interface files (instead of the default .mli).
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
2013-09-17 05:45:05 -07:00
|
|
|
.B \-keep-locs
|
|
|
|
Keep locations in generated .cmi files.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-labels
|
|
|
|
Labels are not ignored in types, labels may be used in applications,
|
|
|
|
and labelled parameters can be given in any order. This is the default.
|
|
|
|
.TP
|
|
|
|
.B \-linkall
|
|
|
|
Force all modules contained in libraries to be linked in. If this
|
|
|
|
flag is not given, unreferenced modules are not linked in. When
|
|
|
|
building a library
|
|
|
|
.RB ( \-a
|
|
|
|
flag), setting the
|
|
|
|
.B \-linkall
|
|
|
|
flag forces all
|
|
|
|
subsequent links of programs involving that library to link all the
|
|
|
|
modules contained in the library.
|
|
|
|
.TP
|
2014-05-06 17:34:20 -07:00
|
|
|
.B \-no-alias-deps
|
|
|
|
Do not record dependencies for module aliases.
|
|
|
|
.TP
|
2013-09-04 08:12:37 -07:00
|
|
|
.B \-no\-app\-funct
|
|
|
|
Deactivates the applicative behaviour of functors. With this option,
|
|
|
|
each functor application generates new types in its result and
|
|
|
|
applying the same functor twice to the same argument yields two
|
|
|
|
incompatible structures.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-noassert
|
|
|
|
Do not compile assertion checks. Note that the special form
|
|
|
|
.B assert\ false
|
|
|
|
is always compiled because it is typed specially.
|
|
|
|
This flag has no effect when linking already-compiled files.
|
|
|
|
.TP
|
|
|
|
.B \-noautolink
|
|
|
|
When linking .cmxa libraries, ignore
|
|
|
|
.BR \-cclib \ and \ \-ccopt
|
|
|
|
options potentially contained in the libraries (if these options were
|
|
|
|
given when building the libraries). This can be useful if a library
|
|
|
|
contains incorrect specifications of C libraries or C options; in this
|
|
|
|
case, during linking, set
|
|
|
|
.B -noautolink
|
|
|
|
and pass the correct C libraries and options on the command line.
|
|
|
|
.TP
|
|
|
|
.B \-nodynlink
|
|
|
|
Allow the compiler to use some optimizations that are valid only for code
|
|
|
|
that is never dynlinked.
|
|
|
|
.TP
|
2014-01-22 06:01:10 -08:00
|
|
|
.B -nostdlib
|
|
|
|
Do not automatically add the standard library directory the list of
|
|
|
|
directories searched for compiled interface files (.cmi), compiled
|
|
|
|
object code files (.cmx), and libraries (.cmxa). See also option
|
|
|
|
.BR \-I .
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-nolabels
|
|
|
|
Ignore non-optional labels in types. Labels cannot be used in
|
|
|
|
applications, and parameter order becomes strict.
|
|
|
|
.TP
|
|
|
|
.BI \-o \ exec\-file
|
1995-11-02 08:54:37 -08:00
|
|
|
Specify the name of the output file produced by the linker. The
|
2008-09-15 07:05:30 -07:00
|
|
|
default output name is a.out, in keeping with the Unix tradition. If the
|
1995-11-02 08:54:37 -08:00
|
|
|
.B \-a
|
2008-09-15 07:05:30 -07:00
|
|
|
option is given, specify the name of the library produced. If the
|
|
|
|
.B \-pack
|
|
|
|
option is given, specify the name of the packed object file produced.
|
|
|
|
If the
|
|
|
|
.B \-output\-obj
|
|
|
|
option is given, specify the name of the output file produced. If the
|
|
|
|
.B \-shared
|
|
|
|
option is given, specify the name of plugin file produced.
|
2014-05-10 17:17:05 -07:00
|
|
|
This can also be used when compiling an interface or implementation
|
|
|
|
file, without linking, in which case it sets the name of the cmi or
|
|
|
|
cmo file, and also sets the module name to the file name up to the
|
|
|
|
first dot.
|
|
|
|
.TP
|
|
|
|
.BI \-open \ module
|
|
|
|
Opens the given module before processing the interface or
|
|
|
|
implementation files. If several
|
|
|
|
.B \-open
|
|
|
|
options are given, they are processed in order, just as if
|
2014-05-10 17:25:57 -07:00
|
|
|
the statements open! module1;; ... open! moduleN;; were added
|
2014-05-10 17:17:05 -07:00
|
|
|
at the top of each file.
|
2008-09-15 07:05:30 -07:00
|
|
|
.TP
|
|
|
|
.B \-output\-obj
|
|
|
|
Cause the linker to produce a C object file instead of an executable
|
2011-06-15 05:24:26 -07:00
|
|
|
file. This is useful to wrap OCaml code as a C library,
|
2012-07-30 11:04:46 -07:00
|
|
|
callable from any C program. The name of the output object file
|
2012-03-08 11:52:03 -08:00
|
|
|
must be set with the
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-o
|
|
|
|
option.
|
|
|
|
This option can also be used to produce a compiled shared/dynamic
|
|
|
|
library (.so extension).
|
|
|
|
.TP
|
|
|
|
.B \-p
|
|
|
|
Generate extra code to write profile information when the program is
|
|
|
|
executed. The profile information can then be examined with the
|
|
|
|
analysis program
|
|
|
|
.BR gprof (1).
|
|
|
|
The
|
|
|
|
.B \-p
|
|
|
|
option must be given both at
|
|
|
|
compile-time and at link-time. Linking object files not compiled with
|
|
|
|
.B \-p
|
|
|
|
is possible, but results in less precise profiling.
|
|
|
|
|
|
|
|
See the
|
|
|
|
.BR gprof (1)
|
|
|
|
man page for more information about the profiles.
|
|
|
|
|
|
|
|
Full support for
|
|
|
|
.BR gprof (1)
|
|
|
|
is only available for certain platforms
|
|
|
|
(currently: Intel x86/Linux and Alpha/Digital Unix).
|
|
|
|
On other platforms, the
|
|
|
|
.B \-p
|
|
|
|
option will result in a less precise
|
|
|
|
profile (no call graph information, only a time profile).
|
|
|
|
.TP
|
|
|
|
.B \-pack
|
|
|
|
Build an object file (.cmx and .o files) and its associated compiled
|
|
|
|
interface (.cmi) that combines the .cmx object
|
|
|
|
files given on the command line, making them appear as sub-modules of
|
|
|
|
the output .cmx file. The name of the output .cmx file must be
|
|
|
|
given with the
|
|
|
|
.B \-o
|
|
|
|
option. For instance,
|
|
|
|
.B ocamlopt\ -pack\ -o\ P.cmx\ A.cmx\ B.cmx\ C.cmx
|
|
|
|
generates compiled files P.cmx, P.o and P.cmi describing a
|
|
|
|
compilation unit having three sub-modules A, B and C,
|
|
|
|
corresponding to the contents of the object files A.cmx, B.cmx and
|
|
|
|
C.cmx. These contents can be referenced as P.A, P.B and P.C
|
|
|
|
in the remainder of the program.
|
|
|
|
|
|
|
|
The .cmx object files being combined must have been compiled with
|
|
|
|
the appropriate
|
|
|
|
.B \-for\-pack
|
|
|
|
option. In the example above,
|
|
|
|
A.cmx, B.cmx and C.cmx must have been compiled with
|
|
|
|
.BR ocamlopt\ \-for\-pack\ P .
|
1995-11-02 08:54:37 -08:00
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
Multiple levels of packing can be achieved by combining
|
|
|
|
.B \-pack
|
|
|
|
with
|
|
|
|
.BR \-for\-pack .
|
|
|
|
See
|
2011-04-26 05:16:50 -07:00
|
|
|
.IR "The OCaml user's manual" ,
|
2008-09-15 07:05:30 -07:00
|
|
|
chapter "Native-code compilation" for more details.
|
|
|
|
.TP
|
|
|
|
.BI \-pp \ command
|
|
|
|
Cause the compiler to call the given
|
|
|
|
.I command
|
|
|
|
as a preprocessor for each source file. The output of
|
|
|
|
.I command
|
|
|
|
is redirected to
|
|
|
|
an intermediate file, which is compiled. If there are no compilation
|
|
|
|
errors, the intermediate file is deleted afterwards.
|
|
|
|
.TP
|
2012-06-13 03:02:28 -07:00
|
|
|
.BI \-ppx \ command
|
2013-09-04 08:12:37 -07:00
|
|
|
After parsing, pipe the abstract syntax tree through the preprocessor
|
2012-06-13 03:02:28 -07:00
|
|
|
.IR command .
|
2014-10-04 03:39:29 -07:00
|
|
|
The module
|
|
|
|
.BR Ast_mapper (3)
|
|
|
|
implements the external interface of a preprocessor.
|
2012-06-13 03:02:28 -07:00
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-principal
|
|
|
|
Check information path during type-checking, to make sure that all
|
|
|
|
types are derived in a principal way. All programs accepted in
|
|
|
|
.B \-principal
|
|
|
|
mode are also accepted in default mode with equivalent
|
|
|
|
types, but different binary signatures.
|
|
|
|
.TP
|
2011-06-20 14:42:19 -07:00
|
|
|
.B \-rectypes
|
|
|
|
Allow arbitrary recursive types during type-checking. By default,
|
|
|
|
only recursive types where the recursion goes through an object type
|
|
|
|
are supported. Note that once you have created an interface using this
|
|
|
|
flag, you must use it again for all dependencies.
|
|
|
|
.TP
|
2011-03-17 09:18:05 -07:00
|
|
|
.BI \-runtime\-variant \ suffix
|
|
|
|
Add
|
|
|
|
.I suffix
|
|
|
|
to the name of the runtime library that will be used by the program.
|
|
|
|
If OCaml was configured with option
|
|
|
|
.BR \-with\-debug\-runtime ,
|
|
|
|
then the
|
|
|
|
.B d
|
|
|
|
suffix is supported and gives a debug version of the runtime.
|
|
|
|
.TP
|
1995-11-02 08:54:37 -08:00
|
|
|
.B \-S
|
|
|
|
Keep the assembly code produced during the compilation. The assembly
|
2008-09-15 07:05:30 -07:00
|
|
|
code for the source file
|
|
|
|
.IR x .ml
|
|
|
|
is saved in the file
|
|
|
|
.IR x .s.
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
2014-04-29 04:56:17 -07:00
|
|
|
.B \-safe\-string
|
|
|
|
Enforce the separation between types
|
|
|
|
.BR string \ and\ bytes ,
|
|
|
|
thereby making strings read-only. This will become the default in
|
|
|
|
a future version of OCaml.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-shared
|
|
|
|
Build a plugin (usually .cmxs) that can be dynamically loaded with
|
|
|
|
the
|
|
|
|
.B Dynlink
|
|
|
|
module. The name of the plugin must be
|
|
|
|
set with the
|
|
|
|
.B \-o
|
2011-06-15 05:24:26 -07:00
|
|
|
option. A plugin can include a number of OCaml
|
2008-09-15 07:05:30 -07:00
|
|
|
modules and libraries, and extra native objects (.o, .a files).
|
|
|
|
Building native plugins is only supported for some
|
|
|
|
operating system. Under some systems (currently,
|
2011-06-15 05:24:26 -07:00
|
|
|
only Linux AMD 64), all the OCaml code linked in a plugin must have
|
2008-09-15 07:05:30 -07:00
|
|
|
been compiled without the
|
|
|
|
.B \-nodynlink
|
|
|
|
flag. Some constraints might also
|
|
|
|
apply to the way the extra native objects have been compiled (under
|
|
|
|
Linux AMD 64, they must contain only position-independent code).
|
|
|
|
.TP
|
2013-09-04 08:12:37 -07:00
|
|
|
.B \-short\-paths
|
|
|
|
When a type is visible under several module-paths, use the shortest
|
|
|
|
one when printing the type's name in inferred interfaces and error and
|
|
|
|
warning messages.
|
|
|
|
.TP
|
2011-06-20 14:42:19 -07:00
|
|
|
.B \-strict\-sequence
|
|
|
|
The left-hand part of a sequence must have type unit.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-thread
|
|
|
|
Compile or link multithreaded programs, in combination with the
|
|
|
|
system threads library described in
|
2011-04-26 05:16:50 -07:00
|
|
|
.IR "The OCaml user's manual" .
|
1995-11-02 08:54:37 -08:00
|
|
|
.TP
|
|
|
|
.B \-unsafe
|
2008-09-15 07:05:30 -07:00
|
|
|
Turn bound checking off for array and string accesses (the
|
|
|
|
.BR v.(i) and s.[i]
|
|
|
|
constructs). Programs compiled with
|
|
|
|
.B \-unsafe
|
|
|
|
are therefore
|
1995-11-02 08:54:37 -08:00
|
|
|
faster, but unsafe: anything can happen if the program accesses an
|
2008-09-15 07:05:30 -07:00
|
|
|
array or string outside of its bounds. Additionally, turn off the
|
|
|
|
check for zero divisor in integer division and modulus operations.
|
|
|
|
With
|
|
|
|
.BR \-unsafe ,
|
|
|
|
an integer division (or modulus) by zero can halt the
|
|
|
|
program or continue with an unspecified result instead of raising a
|
|
|
|
.B Division_by_zero
|
|
|
|
exception.
|
|
|
|
.TP
|
2014-04-29 04:56:17 -07:00
|
|
|
.B \-unsafe\-string
|
|
|
|
Identify the types
|
|
|
|
.BR string \ and\ bytes ,
|
|
|
|
thereby making strings writable. For reasons of backward compatibility,
|
|
|
|
this is the default setting for the moment, but this will change in a future
|
|
|
|
version of OCaml.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-v
|
|
|
|
Print the version number of the compiler and the location of the
|
|
|
|
standard library directory, then exit.
|
|
|
|
.TP
|
|
|
|
.B \-verbose
|
|
|
|
Print all external commands before they are executed, in particular
|
|
|
|
invocations of the assembler, C compiler, and linker.
|
|
|
|
.TP
|
2014-01-22 06:01:10 -08:00
|
|
|
.BR \-version \ or\ \-vnum
|
2008-09-15 07:05:30 -07:00
|
|
|
Print the version number of the compiler in short form (e.g. "3.11.0"),
|
|
|
|
then exit.
|
|
|
|
.TP
|
|
|
|
.BI \-w \ warning\-list
|
2013-09-04 08:12:37 -07:00
|
|
|
Enable, disable, or mark as fatal the warnings specified by the argument
|
2008-09-15 07:05:30 -07:00
|
|
|
.IR warning\-list .
|
2010-01-29 07:02:52 -08:00
|
|
|
See
|
|
|
|
.BR ocamlc (1)
|
|
|
|
for the syntax of
|
|
|
|
.IR warning-list .
|
2008-09-15 07:05:30 -07:00
|
|
|
.TP
|
|
|
|
.BI \-warn\-error \ warning\-list
|
2013-09-04 08:12:37 -07:00
|
|
|
Mark as fatal the warnings specified in the argument
|
2009-11-02 04:17:49 -08:00
|
|
|
.IR warning\-list .
|
|
|
|
The compiler will stop with an error when one of these
|
2008-09-15 07:05:30 -07:00
|
|
|
warnings is emitted. The
|
|
|
|
.I warning\-list
|
|
|
|
has the same meaning as for
|
2009-11-02 04:17:49 -08:00
|
|
|
the
|
|
|
|
.B \-w
|
|
|
|
option: a
|
|
|
|
.B +
|
2013-09-04 08:12:37 -07:00
|
|
|
sign (or an uppercase letter) marks the corresponding warnings as fatal, a
|
2009-11-02 04:17:49 -08:00
|
|
|
.B \-
|
2013-09-04 08:12:37 -07:00
|
|
|
sign (or a lowercase letter) turns them back into non-fatal warnings, and a
|
2009-11-02 04:17:49 -08:00
|
|
|
.B @
|
2013-09-04 08:12:37 -07:00
|
|
|
sign both enables and marks as fatal the corresponding warnings.
|
2009-11-02 04:17:49 -08:00
|
|
|
|
2012-01-27 03:25:02 -08:00
|
|
|
Note: it is not recommended to use the
|
2009-11-02 04:17:49 -08:00
|
|
|
.B \-warn\-error
|
2012-01-27 03:25:02 -08:00
|
|
|
option in production code, because it will almost certainly prevent
|
|
|
|
compiling your program with later versions of OCaml when they add new
|
2014-05-07 07:04:47 -07:00
|
|
|
warnings or modify existing warnings.
|
2009-11-02 04:17:49 -08:00
|
|
|
|
2008-09-15 07:05:30 -07:00
|
|
|
The default setting is
|
2013-09-04 08:12:37 -07:00
|
|
|
.B \-warn\-error\ -a (all warnings are non-fatal).
|
|
|
|
.TP
|
|
|
|
.B \-warn\-help
|
|
|
|
Show the description of all available warning numbers.
|
|
|
|
.TP
|
2008-09-15 07:05:30 -07:00
|
|
|
.B \-where
|
|
|
|
Print the location of the standard library, then exit.
|
|
|
|
.TP
|
|
|
|
.BI \- \ file
|
|
|
|
Process
|
|
|
|
.I file
|
|
|
|
as a file name, even if it starts with a dash (-) character.
|
|
|
|
.TP
|
|
|
|
.BR \-help \ or \ \-\-help
|
|
|
|
Display a short usage summary and exit.
|
|
|
|
|
|
|
|
.SH OPTIONS FOR THE IA32 ARCHITECTURE
|
|
|
|
|
|
|
|
The IA32 code generator (Intel Pentium, AMD Athlon) supports the
|
|
|
|
following additional option:
|
|
|
|
.TP
|
|
|
|
.B \-ffast\-math
|
|
|
|
Use the IA32 instructions to compute
|
|
|
|
trigonometric and exponential functions, instead of calling the
|
|
|
|
corresponding library routines. The functions affected are:
|
|
|
|
.BR atan ,
|
|
|
|
.BR atan2 ,
|
|
|
|
.BR cos ,
|
|
|
|
.BR log ,
|
|
|
|
.BR log10 ,
|
|
|
|
.BR sin ,
|
|
|
|
.B sqrt
|
|
|
|
and
|
|
|
|
.BR tan .
|
|
|
|
The resulting code runs faster, but the range of supported arguments
|
|
|
|
and the precision of the result can be reduced. In particular,
|
|
|
|
trigonometric operations
|
|
|
|
.BR cos ,
|
|
|
|
.BR sin ,
|
|
|
|
.B tan
|
2008-12-03 10:09:09 -08:00
|
|
|
have their range reduced to [\-2^64, 2^64].
|
2008-09-15 07:05:30 -07:00
|
|
|
|
|
|
|
.SH OPTIONS FOR THE AMD64 ARCHITECTURE
|
|
|
|
|
|
|
|
The AMD64 code generator (64-bit versions of Intel Pentium and AMD
|
|
|
|
Athlon) supports the following additional options:
|
|
|
|
.TP
|
|
|
|
.B \-fPIC
|
|
|
|
Generate position-independent machine code. This is the default.
|
|
|
|
.TP
|
|
|
|
.B \-fno\-PIC
|
|
|
|
Generate position-dependent machine code.
|
|
|
|
|
|
|
|
.SH OPTIONS FOR THE SPARC ARCHITECTURE
|
|
|
|
The Sparc code generator supports the following additional options:
|
|
|
|
.TP
|
|
|
|
.B \-march=v8
|
|
|
|
Generate SPARC version 8 code.
|
|
|
|
.TP
|
|
|
|
.B \-march=v9
|
|
|
|
Generate SPARC version 9 code.
|
|
|
|
.P
|
|
|
|
The default is to generate code for SPARC version 7, which runs on all
|
|
|
|
SPARC processors.
|
1995-11-02 08:54:37 -08:00
|
|
|
|
2014-04-12 03:52:50 -07:00
|
|
|
.SH OPTIONS FOR THE ARM ARCHITECTURE
|
|
|
|
The ARM code generator supports the following additional options:
|
|
|
|
.TP
|
|
|
|
.B \-farch=armv4|armv5|armv5te|armv6|armv6t2|armv7
|
|
|
|
Select the ARM target architecture
|
|
|
|
.TP
|
|
|
|
.B \-ffpu=soft|vfpv2|vfpv3\-d16|vfpv3
|
|
|
|
Select the floating-point hardware
|
|
|
|
.TP
|
|
|
|
.B \-fPIC
|
|
|
|
Generate position-independent machine code.
|
|
|
|
.TP
|
|
|
|
.B \-fno\-PIC
|
|
|
|
Generate position-dependent machine code. This is the default.
|
|
|
|
.TP
|
|
|
|
.B \-fthumb
|
|
|
|
Enable Thumb/Thumb-2 code generation
|
|
|
|
.TP
|
|
|
|
.B \-fno\-thumb
|
|
|
|
Disable Thumb/Thumb-2 code generation
|
|
|
|
.P
|
|
|
|
The default values for target architecture, floating-point hardware
|
|
|
|
and thumb usage were selected at configure-time when building
|
2014-08-22 06:45:02 -07:00
|
|
|
.B ocamlopt
|
|
|
|
itself. This configuration can be inspected using
|
|
|
|
.BR ocamlopt\ \-config .
|
2014-04-12 03:52:50 -07:00
|
|
|
Target architecture depends on the "model" setting, while
|
|
|
|
floating-point hardware and thumb support are determined from the ABI
|
|
|
|
setting in "system" (
|
2014-08-22 06:45:02 -07:00
|
|
|
.BR linux_eabi or linux_eabihf ).
|
2014-04-12 03:52:50 -07:00
|
|
|
|
1995-11-02 08:54:37 -08:00
|
|
|
.SH SEE ALSO
|
1996-04-30 07:53:58 -07:00
|
|
|
.BR ocamlc (1).
|
1995-11-02 08:54:37 -08:00
|
|
|
.br
|
2011-04-26 05:16:50 -07:00
|
|
|
.IR "The OCaml user's manual" ,
|
1995-11-02 08:54:37 -08:00
|
|
|
chapter "Native-code compilation".
|