1 Installing Objective Caml on a Unix machine
2 -------------------------------------------
6 * The GNU C compiler gcc is recommended, as the bytecode
7 interpreter takes advantage of gcc-specific features to enhance
10 * Under HP/UX, the GNU C compiler gcc, the GNU assembler gas, and GNU make
11 are all *required*. The vendor-provided compiler, assembler and make
14 * Under MacOS X up to version 10.2.8, you must raise the limit on the
15 stack size with one of the following commands:
17 limit stacksize 64M # if your shell is zsh or tcsh
18 ulimit -s 65536 # if your shell is bash
20 * If you do not have write access to /tmp, you should set the environment
21 variable TMPDIR to the name of some other temporary directory.
24 INSTALLATION INSTRUCTIONS
26 1- Configure the system. From the top directory, do:
30 This generates the three configuration files "Makefile", "m.h" and "s.h"
31 in the config/ subdirectory.
33 The "configure" script accepts the following options:
35 -bindir <dir> (default: /usr/local/bin)
36 Directory where the binaries will be installed
38 -libdir <dir> (default: /usr/local/lib/ocaml)
39 Directory where the Caml library will be installed
41 -mandir <dir> (default: /usr/local/man/man1)
42 Directory where the manual pages will be installed
44 -prefix <dir> (default: /usr/local)
45 Set bindir, libdir and mandir to
46 <dir>/bin, <dir>/lib/ocaml, <dir>/man/man1 respectively.
48 -cc <C compiler and options> (default: gcc if available, cc otherwise)
49 C compiler to use for building the system
51 -libs <extra libraries> (default: none)
52 Extra libraries to link with the system
55 Do not use the curses library.
57 -host <hosttype> (default: determined automatically)
58 The type of the host machine, in GNU's "configuration name"
59 format (CPU-COMPANY-SYSTEM). This info is generally determined
60 automatically by the "configure" script, and rarely ever
61 needs to be provided by hand. The installation instructions
62 for gcc or emacs contain a complete list of configuration names.
64 -x11include <include_dir> (default: determined automatically)
65 -x11lib <lib_dir> (default: determined automatically)
66 Location of the X11 include directory (e.g. /usr/X11R6/include)
67 and the X11 library directory (e.g. /usr/X11R6/lib).
69 -tkdefs <cpp flags> (default: none)
70 -tklibs <flags and libraries> (default: determined automatically)
71 These options specify where to find the Tcl/Tk libraries for
72 LablTk. "-tkdefs" helps to find the headers, and "-tklibs"
73 the C libraries. "-tklibs" may contain either only -L/path and
74 -Wl,... flags, in which case the library names are determined
75 automatically, or the actual libraries, which are used as given.
76 Example: for a Japanese tcl/tk whose headers are in specific
77 directories and libraries in /usr/local/lib, you can use
78 ./configure -tklibs "-L/usr/local/lib -ltk8.0jp -ltcl8.0jp"
79 -tkdefs "-I/usr/local/include/tcl8.0jp -I/usr/local/include/tk8.0jp"
82 Build LablTk without using X11. This option is needed on Cygwin.
85 Do not attempt to build LablTk.
88 Do not attempt to use POSIX threads.
91 Attempt to use POSIX threads (this is the default).
94 Do not configure support for shared libraries
97 -dllibs <flags and libraries>
98 These options specify where to find the libraries for dynamic
99 linking (i.e. use of shared libraries). "-dldefs" specifies
100 options for finding the header files, and "-dllibs" for finding
103 -binutils <directory>
104 This option specifies where to find the GNU binutils (objcopy
108 Verbose output of the configuration tests. Use it if the outcome
109 of configure is not what you were expecting.
112 ./configure -prefix /usr/bin
113 ./configure -bindir /usr/bin -libdir /usr/lib/ocaml -mandir /usr/man/manl
114 ./configure -cc "acc -fast" -libs "-lucb"
115 # For Sun Solaris with the acc compiler
116 ./configure -cc "xlc_r -D_AIX43 -Wl,-bexpall,-brtl -qmaxmem=8192"
117 # For AIX 4.3 with the IBM compiler
119 If something goes wrong during the automatic configuration, or if the
120 generated files cause errors later on, then look at the template files
122 config/Makefile-templ
126 for guidance on how to edit the generated files by hand.
128 2- From the top directory, do:
132 This builds the Objective Caml bytecode compiler for the first time.
133 This phase is fairly verbose; consider redirecting the output to a file:
135 make world > log.world 2>&1 # in sh
136 make world >& log.world # in csh
138 3- (Optional) To be sure everything works well, you can try to
139 bootstrap the system --- that is, to recompile all Objective Caml
140 sources with the newly created compiler. From the top directory, do:
146 make bootstrap > log.bootstrap 2>&1 # in sh
147 make bootstrap >& log.bootstrap # in csh
149 The "make bootstrap" checks that the bytecode programs compiled with
150 the new compiler are identical to the bytecode programs compiled with
151 the old compiler. If this is the case, you can be pretty sure the
152 system has been correctly compiled. Otherwise, this does not
153 necessarily mean something went wrong. The best thing to do is to try
154 a second bootstrapping phase: just do "make bootstrap" again. It will
155 either crash almost immediately, or re-re-compile everything correctly
156 and reach the fixpoint.
158 4- If your platform is supported by the native-code compiler (as
159 reported during the autoconfiguration), you can now build the
160 native-code compiler. From the top directory, do:
164 make opt > log.opt 2>&1 # in sh
165 make opt >& log.opt # in csh
167 5- (Optional) If you want to compile fast versions of the Objective
168 Caml compilers, you can compile them with the native-code compiler
169 (they are compiled to bytecode by default). Just do:
173 Later, you can compile your programs to bytecode using ocamlc.opt
174 instead of ocamlc, and to native-code using ocamlopt.opt instead of
175 ocamlopt. The ".opt" compilers should run faster than the normal
176 compilers, especially on large input files, but they may take longer
177 to start due to increased code size. If compilation times are an issue on
178 your programs, try the ".opt" compilers to see if they make a
179 significant difference.
181 An alternative, and faster approach to steps 2 to 5 is
183 make world.opt # to build using native-code compilers
185 The result is equivalent to "make world opt opt.opt", but this may
186 fail if anything goes wrong in native-code generation.
188 Another alternative, is to use the experimental build system that use
189 ocamlbuild instead of make (it replaces steps 2 to 5):
193 6- You can now install the Objective Caml system. This will create the
194 following commands (in the binary directory selected during
197 ocamlc the batch bytecode compiler
198 ocamlopt the batch native-code compiler (if supported)
199 ocamlrun the runtime system for the bytecode compiler
200 ocamlyacc the parser generator
201 ocamllex the lexer generator
202 ocaml the interactive, toplevel-based system
203 ocamlmktop a tool to make toplevel systems that integrate
204 user-defined C primitives and Caml code
205 ocamldebug the source-level replay debugger
206 ocamldep generator of "make" dependencies for Caml sources
207 ocamldoc documentation generator
208 ocamlprof execution count profiler
209 ocamlcp the bytecode compiler in profiling mode
211 and also, if you built them during step 5,
213 ocamlc.opt the batch bytecode compiler compiled with ocamlopt
214 ocamlopt.opt the batch native-code compiler compiled with ocamlopt
215 ocamllex.opt the lexer generator compiled with ocamlopt
217 From the top directory, become superuser and do:
219 umask 022 # make sure to give read & execute permission to all
222 In the ocamlbuild setting instead of make install do:
226 7- Installation is complete. Time to clean up. From the toplevel
227 directory, do "make clean".
229 8- (Optional) The emacs/ subdirectory contains Emacs-Lisp files for an
230 Objective Caml editing mode and an interface for the debugger. To
231 install these files, change to the emacs/ subdirectory and do
233 make EMACSDIR=<directory where to install the files> install
237 In the latter case, the destination directory defaults to the
238 "site-lisp" directory of your Emacs installation.
240 9- After installation, do *not* strip the ocamldebug and ocamlbrowser
241 executables. (These are mixed-mode executables, containing both
242 compiled C code and Caml bytecode; stripping erases the bytecode!)
243 Other executables such as ocamlrun can safely be stripped.
245 IF SOMETHING GOES WRONG:
247 Read the "common problems" and "machine-specific hints" section at the
250 Check the files m.h and s.h in config/. Wrong endianness or alignment
251 constraints in m.h will immediately crash the bytecode interpreter.
253 If you get a "segmentation violation" signal, check the limits on the
254 stack size and data segment size (type "limit" under csh or
255 "ulimit -a" under bash). Make sure the limit on the stack size is
258 Try recompiling the runtime system with optimizations turned off
259 (change CFLAGS in byterun/Makefile and asmrun/Makefile).
260 The runtime system contains some complex, atypical pieces of C code
261 that can uncover bugs in optimizing compilers. Alternatively, try
262 another C compiler (e.g. gcc instead of the vendor-supplied cc).
264 You can also build a debug version of the runtime system. Go to the
265 byterun/ directory and do "make ocamlrund". Then, copy ocamlrund to
266 ../boot/ocamlrun, and try again. This version of the runtime system
267 contains lots of assertions and sanity checks that could help you
268 pinpoint the problem.
273 * The Makefiles do not support parallel make (e.g. make -j2).
274 Fix: do not pass the -j option to make, and be patient.
276 * The Makefiles use the "include" directive, which is not supported by
277 all versions of make. Use GNU make if this is a problem.
279 * The Makefiles assume that make executes commands by calling /bin/sh. They
280 won't work if /bin/csh is called instead. You may have to unset the SHELL
281 environment variable, or set it to /bin/sh.
283 * On some systems, localization causes build problems. You should
284 try to set the C locale (export LC_ALL=C) before compiling if you have
285 strange errors while compiling OCaml.
287 * gcc 2.7.2.1 generates incorrect code for the runtime system in -O mode
288 on some Intel x86 platforms (e.g. Linux RedHat 4.1 and 4.2).
289 If this causes a problem, the solution is to upgrade to 2.7.2.3 or above.
291 * Some versions of gcc 2.96 for the Intel x86 (as found in RedHat 7.2,
292 Mandrake 8.0 and Mandrake 8.1) generates incorrect code for the runtime
293 system. The "configure" script tries to work around this problem.
295 * On HP 9000/700 machines under HP/UX 9. Some versions of cc are
296 unable to compile correctly the runtime system (wrong code is
297 generated for (x - y) where x is a pointer and y an integer).