ocaml/INSTALL.adoc

162 lines
6.0 KiB
Plaintext

= Installing OCaml from sources on a Unix(-like) machine =
== Prerequisites
* The GNU C Compiler (gcc) is recommended, as the bytecode interpreter takes
advantage of GCC-specific features to enhance performance. gcc is the standard
compiler under Linux, OS X, and many other systems.
* If you do not have write access to `/tmp`, you should set the environment
variable `TMPDIR` to the name of some other temporary directory.
* Under HP/UX, the GNU C Compiler (gcc), the GNU Assembler (gas), and GNU Make
are all *required*. The vendor-provided compiler, assembler and make tools
have major problems.
* Under Cygwin, the `gcc-core` and `make` packages are required. `flexdll` is
necessary for shared library support. `libX11-devel` is necessary for graph
library support and `libintl-devel` is necessary for the `ocamlobjinfo` tool
to be able to process `.cmxs` files. `diffutils` is necessary to run the test
suite.
== Configuration
From the top directory, do:
./configure
+
This generates the three configuration files `Makefile.config`,
`runtime/caml/m.h` and `runtime/caml/s.h`.
+
The `configure` script accepts options that can be discovered by running:
./configure --help
+
Some options or variables like (LDFLAGS) may not be taken into account
by the OCaml build system at the moment. Please report an issue if you
discover such a variable or option and this causes troubles to you.
+
Examples:
* Standard installation in `/usr/{bin,lib,man}` instead of `/usr/local`:
./configure --prefix=/usr
* On a Linux x86-64 host, to build a 32-bit version of OCaml:
./configure --build=x86_64-pc-linux-gnu --host=i386-linux \
CC='gcc -m32' AS='as --32' ASPP='gcc -m32 -c' \
PARTIALLD='ld -r -melf_i386'
* For AIX 7.x with the IBM compiler `xlc`:
./configure CC=xlc
+
By default, build is 32-bit. For 64-bit build, please set environment variable `OBJECT_MODE=64`
for _both_ `configure` and `make world` phases. Note, if this variable is set for only one phase,
your build will break (`ocamlrun` segfaults).
+
If something goes wrong during the automatic configuration, or if the generated
files cause errors later on, then look at the template files:
Makefile.config.in
Makefile.common.in
runtime/caml/m.h.in
runtime/caml/s.h.in
+
for guidance on how to edit the generated files by hand.
== Building the compiler
From the top directory, do:
make
This builds the OCaml compiler for the first time. This phase is
fairly verbose; consider redirecting the output to a file:
make > make.log 2>&1 # in sh
make >& make.log # in csh
== (Optional) Running the testsuite
To be sure everything works well, you can run the test suite
that comes with the compiler. To do so, do:
make tests
== Installing the compiler
You can now install the OCaml system. This will create the following commands
(in the binary directory selected during autoconfiguration):
+
[width="70%",frame="topbot",cols="25%,75%"]
|===============================================================================
| `ocamlc` | the batch bytecode compiler
| `ocamlopt` | the batch native-code compiler (if supported)
| `ocamlrun` | the runtime system for the bytecode compiler
| `ocamlyacc` | the parser generator
| `ocamllex` | the lexer generator
| `ocaml` | the interactive, toplevel-based system
| `ocamlmktop` | a tool to make toplevel systems that integrate user-defined C
primitives and OCaml code
| `ocamldebug` | the source-level replay debugger
| `ocamldep` | generator of "make" dependencies for OCaml sources
| `ocamldoc` | the documentation generator
| `ocamlprof` | the execution count profiler
| `ocamlcp` | the bytecode compiler in profiling mode
|===============================================================================
+
From the top directory, become superuser and do:
make install
Installation is complete. Time to clean up. From the toplevel directory,
do:
make clean
After installation, do *not* strip the `ocamldebug` executables.
This is a mixed-mode executable (containing both compiled C
code and OCaml bytecode) and stripping erases the bytecode! Other
executables such as `ocamlrun` can safely be stripped.
== If something goes wrong
Read the "common problems" and "machine-specific hints" section at the end of
this file.
Check the files `m.h` and `s.h` in `runtime/caml/`.
Wrong endianness or alignment constraints in `machine.h` will
immediately crash the bytecode interpreter.
If you get a "segmentation violation" signal, check the limits on the stack size
and data segment size (type `limit` under csh or `ulimit -a` under bash). Make
sure the limit on the stack size is at least 4M.
Try recompiling the runtime system with optimizations turned off (change
`OC_CFLAGS` in `runtime/Makefile`). The runtime system
contains some complex, atypical pieces of C code which can uncover bugs in
optimizing compilers. Alternatively, try another C compiler (e.g. `gcc` instead
of the vendor-supplied `cc`).
You can also use the debug version of the runtime system which is
normally built and installed by default. Run the bytecode program
that causes troubles with `ocamlrund` rather than with `ocamlrun`.
This version of the runtime system contains lots of assertions
and sanity checks that could help you pinpoint the problem.
== Common problems
* The Makefiles assume that make executes commands by calling `/bin/sh`. They
won't work if `/bin/csh` is called instead. You may have to unset the `SHELL`
environment variable, or set it to `/bin/sh`.
* On some systems, localization causes build problems. You should try to set
the C locale (`export LC_ALL=C`) before compiling if you have strange errors
while compiling OCaml.
* On HP 9000/700 machines under HP/UX 9, some versions of `cc` are unable to
compile correctly the runtime system (wrong code is generated for `(x - y)`
where `x` is a pointer and `y` an integer). Fix: use `gcc`.