= Installing OCaml from sources on a Unix(-like) machine = == Prerequisites * A C Compiler is required. 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 and many other systems. However `clang` - used in Mac OS, BSDs and others - also works fine. * GNU `make`, as well as POSIX-compatible `awk` and `sed` are required. * A POSIX-compatible `diff` is necessary to run the test suite. * If you do not have write access to `/tmp`, you should set the environment variable `TMPDIR` to the name of some other temporary directory. == Prerequisites (special cases) * Under Cygwin, the `gcc-core` package is required. `flexdll` is also necessary for shared library support. == 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). + * For Solaris/Illumos on SPARC machines with Sun PRO compiler only 64-bit bytecode target is supported (32-bit fails due to alignment issues; the optimization is preset to `-O4` for inlining): ./configure CC="cc -m64" + 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.build_config.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`.