summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabrice Le Fessant <Fabrice.Le_fessant@inria.fr>2001-03-26 11:08:00 +0000
committerFabrice Le Fessant <Fabrice.Le_fessant@inria.fr>2001-03-26 11:08:00 +0000
commit79be2d767e0dac2516c246abad8dd574edb8c5c2 (patch)
treee36ce31a1b3822003da8a35faded3e52db66d299
parent40e7d220d7c2ebe6523accba1df40a7ab89bb27b (diff)
downloadocaml-79be2d767e0dac2516c246abad8dd574edb8c5c2.tar.gz
*** empty log message ***
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3474 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--Makefile566
1 files changed, 555 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index 99f23e123a..a0fa8266f6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,559 @@
-include Makefile.ocaml
+#########################################################################
+# #
+# Objective Caml #
+# #
+# Xavier Leroy, projet Cristal, INRIA Rocquencourt #
+# #
+# Copyright 1999 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. #
+# #
+#########################################################################
-ASMTOP=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) \
- driver/errors.cmo driver/compile.cmo toplevel/genprintval.cmo
+# $Id$
-toplevellib.cmxa: $(ASMTOP:.cmo=.cmx)
- $(CAMLOPT) -a -o toplevellib.cmxa $(ASMTOP:.cmo=.cmx)
- cp toplevellib.cmxa toplevellib.a $(LIBDIR)/
+# The main Makefile
-INTERFACES=parsing/asttypes.cmi
+include config/Makefile
-install_top:
- mkdir -p $(LIBDIR)/ocamlsrc
- cp -f $(ASMTOP:.cmo=.cmi) $(COMPOBJS:.cmo=.cmi) \
- $(INTERFACES) $(LIBDIR)/ocamlsrc \ No newline at end of file
+CAMLC=boot/ocamlrun boot/ocamlc -I boot
+CAMLOPT=boot/ocamlrun ./ocamlopt -I stdlib
+COMPFLAGS=$(INCLUDES)
+LINKFLAGS=
+CAMLYACC=boot/ocamlyacc
+YACCFLAGS=-v
+CAMLLEX=boot/ocamlrun boot/ocamllex
+CAMLDEP=boot/ocamlrun tools/ocamldep
+DEPFLAGS=$(INCLUDES)
+CAMLRUN=byterun/ocamlrun
+SHELL=/bin/sh
+MKDIR=mkdir -p
+
+INCLUDES=-I utils -I parsing -I typing -I bytecomp -I asmcomp -I driver -I toplevel
+
+UTILS=utils/misc.cmo utils/tbl.cmo utils/config.cmo \
+ utils/clflags.cmo utils/terminfo.cmo utils/ccomp.cmo utils/warnings.cmo
+
+OPTUTILS=$(UTILS)
+
+PARSING=parsing/linenum.cmo parsing/location.cmo parsing/longident.cmo \
+ parsing/syntaxerr.cmo parsing/pstream.cmo parsing/parser.cmo \
+ parsing/lexer.cmo parsing/parse.cmo parsing/printast.cmo
+
+TYPING=typing/ident.cmo typing/path.cmo \
+ typing/primitive.cmo typing/types.cmo \
+ typing/btype.cmo \
+ typing/subst.cmo typing/predef.cmo \
+ typing/datarepr.cmo typing/env.cmo \
+ typing/typedtree.cmo typing/ctype.cmo \
+ typing/printtyp.cmo typing/includeclass.cmo \
+ typing/mtype.cmo typing/includecore.cmo \
+ typing/includemod.cmo typing/parmatch.cmo \
+ typing/typetexp.cmo typing/typecore.cmo \
+ typing/typedecl.cmo typing/typeclass.cmo \
+ typing/typemod.cmo
+
+COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \
+ bytecomp/typeopt.cmo bytecomp/switch.cmo bytecomp/matching.cmo \
+ bytecomp/translobj.cmo bytecomp/translcore.cmo \
+ bytecomp/translclass.cmo bytecomp/translmod.cmo \
+ bytecomp/simplif.cmo bytecomp/runtimedef.cmo
+
+BYTECOMP=bytecomp/meta.cmo bytecomp/instruct.cmo bytecomp/bytegen.cmo \
+ bytecomp/printinstr.cmo bytecomp/opcodes.cmo bytecomp/emitcode.cmo \
+ bytecomp/bytesections.cmo bytecomp/symtable.cmo \
+ bytecomp/bytelibrarian.cmo bytecomp/bytelink.cmo
+
+ASMCOMP=asmcomp/arch.cmo asmcomp/cmm.cmo asmcomp/printcmm.cmo \
+ asmcomp/reg.cmo asmcomp/mach.cmo asmcomp/proc.cmo \
+ asmcomp/clambda.cmo asmcomp/compilenv.cmo \
+ asmcomp/closure.cmo asmcomp/cmmgen.cmo \
+ asmcomp/printmach.cmo asmcomp/selectgen.cmo asmcomp/selection.cmo \
+ asmcomp/comballoc.cmo asmcomp/liveness.cmo \
+ asmcomp/spill.cmo asmcomp/split.cmo \
+ asmcomp/interf.cmo asmcomp/coloring.cmo \
+ asmcomp/reloadgen.cmo asmcomp/reload.cmo \
+ asmcomp/printlinear.cmo asmcomp/linearize.cmo \
+ asmcomp/schedgen.cmo asmcomp/scheduling.cmo \
+ asmcomp/emitaux.cmo asmcomp/emit.cmo asmcomp/asmgen.cmo \
+ asmcomp/asmlink.cmo asmcomp/asmlibrarian.cmo
+
+DRIVER=driver/errors.cmo driver/compile.cmo driver/main_args.cmo \
+ driver/main.cmo
+
+OPTDRIVER=driver/opterrors.cmo driver/optcompile.cmo driver/optmain.cmo
+
+TOPLEVEL=driver/errors.cmo driver/compile.cmo \
+ toplevel/genprintval.cmo toplevel/toploop.cmo \
+ toplevel/trace.cmo toplevel/topdirs.cmo
+
+TOPLEVELLIB=toplevel/toplevellib.cma
+TOPLEVELMAIN=toplevel/topmain.cmo
+
+COMPOBJS=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) $(DRIVER)
+
+TOPLIB=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) $(TOPLEVEL)
+
+TOPOBJS=toplevel/toplevellib.cma $(TOPLEVELMAIN)
+
+OPTOBJS=$(OPTUTILS) $(PARSING) $(TYPING) $(COMP) $(ASMCOMP) $(OPTDRIVER)
+
+EXPUNGEOBJS=utils/misc.cmo utils/tbl.cmo \
+ utils/config.cmo utils/clflags.cmo \
+ typing/ident.cmo typing/path.cmo typing/types.cmo typing/btype.cmo \
+ typing/predef.cmo bytecomp/runtimedef.cmo bytecomp/bytesections.cmo \
+ bytecomp/symtable.cmo toplevel/expunge.cmo
+
+PERVASIVES=arg array buffer callback char digest filename format gc hashtbl \
+ lexing list map obj parsing pervasives printexc printf queue random \
+ set sort stack string stream sys oo genlex topdirs toploop weak lazy \
+ marshal int32 int64 nativeint
+
+# Recompile the system using the bootstrap compiler
+all: runtime ocamlc ocamllex ocamlyacc ocamltools library ocaml \
+ otherlibraries $(DEBUGGER)
+
+# The compilation of ocaml will fail if the runtime has changed.
+# Never mind, just do make bootstrap to reach fixpoint again.
+
+# Compile everything the first time
+world: coldstart all
+
+# Complete bootstrapping cycle
+bootstrap:
+# Save the original bootstrap compiler
+ $(MAKE) backup
+# Promote the new compiler but keep the old runtime
+# This compiler runs on boot/ocamlrun and produces bytecode for
+# byterun/ocamlrun
+ $(MAKE) promote-cross
+# Rebuild ocamlc and ocamllex (run on byterun/ocamlrun)
+ $(MAKE) partialclean
+ $(MAKE) ocamlc ocamllex
+# Rebuild the library (using byterun/ocamlrun ./ocamlc)
+ $(MAKE) library-cross
+# Promote the new compiler and the new runtime
+ $(MAKE) promote
+# Rebuild everything, including ocaml and the tools
+ $(MAKE) partialclean
+ $(MAKE) all
+# Check if fixpoint reached
+ $(MAKE) compare
+
+LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader
+
+# Start up the system from the distribution compiler
+coldstart:
+ cd byterun; $(MAKE) all
+ cp byterun/ocamlrun$(EXE) boot/ocamlrun$(EXE)
+ cd yacc; $(MAKE) all
+ cp yacc/ocamlyacc$(EXE) boot/ocamlyacc$(EXE)
+ cd stdlib; $(MAKE) COMPILER=../boot/ocamlc all
+ cd stdlib; cp $(LIBFILES) ../boot
+ if test -f boot/libcamlrun.a; then :; else \
+ ln -s ../byterun/libcamlrun.a boot/libcamlrun.a; fi
+ if test -d stdlib/caml; then :; else \
+ ln -s ../byterun stdlib/caml; fi
+
+# Build the core system: the minimum needed to make depend and bootstrap
+core : runtime ocamlc ocamllex ocamlyacc ocamltools library
+
+# Save the current bootstrap compiler
+MAXSAVED=boot/Saved/Saved.prev/Saved.prev/Saved.prev/Saved.prev/Saved.prev
+backup:
+ if test -d boot/Saved; then : ; else mkdir boot/Saved; fi
+ if test -d $(MAXSAVED); then rm -r $(MAXSAVED); else : ; fi
+ mv boot/Saved boot/Saved.prev
+ mkdir boot/Saved
+ mv boot/Saved.prev boot/Saved/Saved.prev
+ cp boot/ocamlrun$(EXE) boot/Saved
+ mv boot/ocamlc boot/ocamllex boot/ocamlyacc$(EXE) boot/Saved
+ cd boot; cp $(LIBFILES) Saved
+
+# Promote the newly compiled system to the rank of cross compiler
+# (Runs on the old runtime, produces code for the new runtime)
+promote-cross:
+ cp ocamlc boot/ocamlc
+ cp lex/ocamllex boot/ocamllex
+ cp yacc/ocamlyacc$(EXE) boot/ocamlyacc$(EXE)
+ cd stdlib; cp $(LIBFILES) ../boot
+
+# Promote the newly compiled system to the rank of bootstrap compiler
+# (Runs on the new runtime, produces code for the new runtime)
+promote: promote-cross
+ cp byterun/ocamlrun$(EXE) boot/ocamlrun$(EXE)
+
+# Restore the saved bootstrap compiler if a problem arises
+restore:
+ mv boot/Saved/* boot
+ rmdir boot/Saved
+ mv boot/Saved.prev boot/Saved
+
+# Check if fixpoint reached
+compare:
+ @if cmp boot/ocamlc ocamlc && cmp boot/ocamllex lex/ocamllex; \
+ then echo "Fixpoint reached, bootstrap succeeded."; \
+ else echo "Fixpoint not reached, try one more bootstrapping cycle."; \
+ fi
+
+# Remove old bootstrap compilers
+cleanboot:
+ rm -rf boot/Saved/Saved.prev/*
+
+# Compile the native-code compiler
+opt: runtimeopt ocamlopt libraryopt otherlibrariesopt
+
+# Native-code versions of the tools
+opt.opt: ocamlc.opt ocamlopt.opt ocamllex.opt
+
+# Installation
+install: FORCE
+ if test -d $(BINDIR); then : ; else $(MKDIR) $(BINDIR); fi
+ if test -d $(LIBDIR); then : ; else $(MKDIR) $(LIBDIR); fi
+ if test -d $(MANDIR); then : ; else $(MKDIR) $(MANDIR); fi
+ cd byterun; $(MAKE) install
+ cp ocamlc $(BINDIR)/ocamlc$(EXE)
+ cp ocaml $(BINDIR)/ocaml$(EXE)
+ cd stdlib; $(MAKE) install
+ cp lex/ocamllex $(BINDIR)/ocamllex$(EXE)
+ cp yacc/ocamlyacc$(EXE) $(BINDIR)/ocamlyacc$(EXE)
+ cp toplevel/toplevellib.cma $(LIBDIR)/toplevellib.cma
+ cp expunge $(LIBDIR)/expunge$(EXE)
+ cp toplevel/topmain.cmo $(LIBDIR)
+ cp toplevel/toploop.cmi toplevel/topdirs.cmi $(LIBDIR)
+ cd tools; $(MAKE) install
+ -cd man; $(MAKE) install
+ set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) install); done
+ if test -f ocamlopt; then $(MAKE) installopt; else :; fi
+ if test -f debugger/ocamldebug; then (cd debugger; $(MAKE) install); else :; fi
+
+# Installation of the native-code compiler
+installopt:
+ cd asmrun; $(MAKE) install
+ cp ocamlopt $(BINDIR)/ocamlopt$(EXE)
+ cd stdlib; $(MAKE) installopt
+ set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) installopt); done
+ if test -f ocamlc.opt; then cp ocamlc.opt $(BINDIR)/ocamlc.opt$(EXE); else :; fi
+ if test -f ocamlopt.opt; then cp ocamlopt.opt $(BINDIR)/ocamlopt.opt$(EXE); else :; fi
+ if test -f lex/ocamllex.opt; then cp lex/ocamllex.opt $(BINDIR)/ocamllex.opt$(EXE); else :; fi
+
+clean:: partialclean
+
+# The compiler
+
+ocamlc: $(COMPOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlc $(COMPOBJS)
+
+partialclean::
+ rm -f ocamlc
+
+# The native-code compiler
+
+ocamlopt: $(OPTOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlopt $(OPTOBJS)
+
+partialclean::
+ rm -f ocamlopt
+
+# The toplevel
+
+ocaml: $(TOPOBJS) expunge
+ $(CAMLC) $(LINKFLAGS) -linkall -o ocaml.tmp $(TOPOBJS)
+ - $(CAMLRUN) ./expunge ocaml.tmp ocaml $(PERVASIVES)
+ rm -f ocaml.tmp
+
+toplevel/toplevellib.cma: $(TOPLIB)
+ $(CAMLC) -a -o $@ $(TOPLIB)
+
+partialclean::
+ rm -f ocaml toplevel/toplevellib.cma
+
+# The configuration file
+
+utils/config.ml: utils/config.mlp config/Makefile
+ @rm -f utils/config.ml
+ sed -e 's|%%LIBDIR%%|$(LIBDIR)|' \
+ -e 's|%%BYTERUN%%|$(BINDIR)/ocamlrun|' \
+ -e 's|%%BYTECC%%|$(BYTECC) $(BYTECCCOMPOPTS)|' \
+ -e 's|%%BYTELINK%%|$(BYTECC) $(BYTECCLINKOPTS)|' \
+ -e 's|%%NATIVECC%%|$(NATIVECC) $(NATIVECCCOMPOPTS)|' \
+ -e 's|%%NATIVELINK%%|$(NATIVECC) $(NATIVECCLINKOPTS)|' \
+ -e 's|%%PARTIALLD%%|ld -r $(NATIVECCLINKOPTS)|' \
+ -e 's|%%BYTECCLIBS%%|$(BYTECCLIBS)|' \
+ -e 's|%%NATIVECCLIBS%%|$(NATIVECCLIBS)|' \
+ -e 's|%%RANLIBCMD%%|$(RANLIBCMD)|' \
+ -e 's|%%ARCH%%|$(ARCH)|' \
+ -e 's|%%MODEL%%|$(MODEL)|' \
+ -e 's|%%SYSTEM%%|$(SYSTEM)|' \
+ -e 's|%%EXT_OBJ%%|.o|' \
+ -e 's|%%EXT_ASM%%|.s|' \
+ -e 's|%%EXT_LIB%%|.a|' \
+ utils/config.mlp > utils/config.ml
+ @chmod -w utils/config.ml
+
+partialclean::
+ rm -f utils/config.ml
+
+beforedepend:: utils/config.ml
+
+# The parser
+
+parsing/parser.mli parsing/parser.ml: parsing/parser.mly
+ $(CAMLYACC) $(YACCFLAGS) parsing/parser.mly
+
+partialclean::
+ rm -f parsing/parser.mli parsing/parser.ml parsing/parser.output
+
+beforedepend:: parsing/parser.mli parsing/parser.ml
+
+# The lexer
+
+parsing/lexer.ml: parsing/lexer.mll
+ $(CAMLLEX) parsing/lexer.mll
+
+partialclean::
+ rm -f parsing/lexer.ml
+
+beforedepend:: parsing/lexer.ml
+
+# The auxiliary lexer for counting line numbers
+
+parsing/linenum.ml: parsing/linenum.mll
+ $(CAMLLEX) parsing/linenum.mll
+
+partialclean::
+ rm -f parsing/linenum.ml
+
+beforedepend:: parsing/linenum.ml
+
+# The bytecode compiler compiled with the native-code compiler
+
+ocamlc.opt: $(COMPOBJS:.cmo=.cmx)
+ cd asmrun; $(MAKE) meta.o
+ $(CAMLOPT) $(LINKFLAGS) -o ocamlc.opt $(COMPOBJS:.cmo=.cmx) asmrun/meta.o
+
+partialclean::
+ rm -f ocamlc.opt
+
+# The native-code compiler compiled with itself
+
+ocamlopt.opt: $(OPTOBJS:.cmo=.cmx)
+ $(CAMLOPT) $(LINKFLAGS) -o ocamlopt.opt $(OPTOBJS:.cmo=.cmx)
+
+partialclean::
+ rm -f ocamlopt.opt
+
+$(OPTOBJS:.cmo=.cmx): ocamlopt
+
+# The numeric opcodes
+
+bytecomp/opcodes.ml: byterun/instruct.h
+ sed -n -e '/^enum/p' -e 's/,//g' -e '/^ /p' byterun/instruct.h | \
+ awk -f tools/make-opcodes > bytecomp/opcodes.ml
+
+partialclean::
+ rm -f bytecomp/opcodes.ml
+
+beforedepend:: bytecomp/opcodes.ml
+
+# The predefined exceptions and primitives
+
+byterun/primitives:
+ cd byterun; $(MAKE) primitives
+
+bytecomp/runtimedef.ml: byterun/primitives byterun/fail.h
+ (echo 'let builtin_exceptions = [|'; \
+ sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$$| \1;|p' byterun/fail.h | \
+ sed -e '$$s/;$$//'; \
+ echo '|]'; \
+ echo 'let builtin_primitives = [|'; \
+ sed -e 's/.*/ "&";/' -e '$$s/;$$//' byterun/primitives; \
+ echo '|]') > bytecomp/runtimedef.ml
+
+partialclean::
+ rm -f bytecomp/runtimedef.ml
+
+beforedepend:: bytecomp/runtimedef.ml
+
+# Choose the right machine-dependent files
+
+asmcomp/arch.ml: asmcomp/$(ARCH)/arch.ml
+ ln -s $(ARCH)/arch.ml asmcomp/arch.ml
+
+partialclean::
+ rm -f asmcomp/arch.ml
+
+beforedepend:: asmcomp/arch.ml
+
+asmcomp/proc.ml: asmcomp/$(ARCH)/proc.ml
+ ln -s $(ARCH)/proc.ml asmcomp/proc.ml
+
+partialclean::
+ rm -f asmcomp/proc.ml
+
+beforedepend:: asmcomp/proc.ml
+
+asmcomp/selection.ml: asmcomp/$(ARCH)/selection.ml
+ ln -s $(ARCH)/selection.ml asmcomp/selection.ml
+
+partialclean::
+ rm -f asmcomp/selection.ml
+
+beforedepend:: asmcomp/selection.ml
+
+asmcomp/reload.ml: asmcomp/$(ARCH)/reload.ml
+ ln -s $(ARCH)/reload.ml asmcomp/reload.ml
+
+partialclean::
+ rm -f asmcomp/reload.ml
+
+beforedepend:: asmcomp/reload.ml
+
+asmcomp/scheduling.ml: asmcomp/$(ARCH)/scheduling.ml
+ ln -s $(ARCH)/scheduling.ml asmcomp/scheduling.ml
+
+partialclean::
+ rm -f asmcomp/scheduling.ml
+
+beforedepend:: asmcomp/scheduling.ml
+
+# Preprocess the code emitters
+
+asmcomp/emit.ml: asmcomp/$(ARCH)/emit.mlp tools/cvt_emit
+ $(CAMLRUN) tools/cvt_emit < asmcomp/$(ARCH)/emit.mlp > asmcomp/emit.ml \
+ || { rm -f asmcomp/emit.ml; exit 2; }
+
+partialclean::
+ rm -f asmcomp/emit.ml
+
+beforedepend:: asmcomp/emit.ml
+
+tools/cvt_emit: tools/cvt_emit.mll
+ cd tools; $(MAKE) CAMLC="../$(CAMLRUN) ../ocamlc -I ../stdlib" cvt_emit
+
+# The "expunge" utility
+
+expunge: $(EXPUNGEOBJS)
+ $(CAMLC) $(LINKFLAGS) -o expunge $(EXPUNGEOBJS)
+
+partialclean::
+ rm -f expunge
+
+# The runtime system for the bytecode compiler
+
+runtime:
+ cd byterun; $(MAKE) all
+ if test -f stdlib/libcamlrun.a; then :; else \
+ ln -s ../byterun/libcamlrun.a stdlib/libcamlrun.a; fi
+clean::
+ cd byterun; $(MAKE) clean
+ rm -f stdlib/libcamlrun.a
+alldepend::
+ cd byterun; $(MAKE) depend
+
+# The runtime system for the native-code compiler
+
+runtimeopt:
+ cd asmrun; $(MAKE) all
+ if test -f stdlib/libasmrun.a; then :; else \
+ ln -s ../asmrun/libasmrun.a stdlib/libasmrun.a; fi
+clean::
+ cd asmrun; $(MAKE) clean
+ rm -f stdlib/libasmrun.a
+alldepend::
+ cd asmrun; $(MAKE) depend
+
+# The library
+
+library: ocamlc
+ cd stdlib; $(MAKE) all
+library-cross:
+ cd stdlib; $(MAKE) RUNTIME=../byterun/ocamlrun all
+libraryopt:
+ cd stdlib; $(MAKE) allopt
+partialclean::
+ cd stdlib; $(MAKE) clean
+alldepend::
+ cd stdlib; $(MAKE) depend
+
+# The lexer and parser generators
+
+ocamllex: ocamlyacc ocamlc
+ cd lex; $(MAKE) all
+ocamllex.opt: ocamlopt
+ cd lex; $(MAKE) allopt
+partialclean::
+ cd lex; $(MAKE) clean
+alldepend::
+ cd lex; $(MAKE) depend
+
+ocamlyacc:
+ cd yacc; $(MAKE) all
+clean::
+ cd yacc; $(MAKE) clean
+
+# Tools
+
+ocamltools: ocamlc ocamlyacc ocamllex
+ cd tools; $(MAKE) all
+partialclean::
+ cd tools; $(MAKE) clean
+alldepend::
+ cd tools; $(MAKE) depend
+
+# The extra libraries
+
+otherlibraries:
+ set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) RUNTIME=$(RUNTIME) all); done
+otherlibrariesopt:
+ set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) allopt); done
+partialclean::
+ for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) partialclean); done
+clean::
+ for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) clean); done
+alldepend::
+ for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) depend); done
+
+# The replay debugger
+
+ocamldebugger: ocamlc ocamlyacc ocamllex
+ cd debugger; $(MAKE) all
+partialclean::
+ cd debugger; $(MAKE) clean
+alldepend::
+ cd debugger; $(MAKE) depend
+
+# Default rules
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+
+.ml.cmo:
+ $(CAMLC) $(COMPFLAGS) -c $<
+
+.mli.cmi:
+ $(CAMLC) $(COMPFLAGS) -c $<
+
+.ml.cmx:
+ $(CAMLOPT) $(COMPFLAGS) -c $<
+
+partialclean::
+ rm -f utils/*.cm[iox] utils/*.[so] utils/*~
+ rm -f parsing/*.cm[iox] parsing/*.[so] parsing/*~
+ rm -f typing/*.cm[iox] typing/*.[so] typing/*~
+ rm -f bytecomp/*.cm[iox] bytecomp/*.[so] bytecomp/*~
+ rm -f asmcomp/*.cm[iox] asmcomp/*.[so] asmcomp/*~
+ rm -f driver/*.cm[iox] driver/*.[so] driver/*~
+ rm -f toplevel/*.cm[iox] toplevel/*.[so] toplevel/*~
+ rm -f tools/*.cm[iox] tools/*.[so] tools/*~
+ rm -f *~
+
+depend: beforedepend
+ (for d in utils parsing typing bytecomp asmcomp driver toplevel; \
+ do $(CAMLDEP) $(DEPFLAGS) $$d/*.mli $$d/*.ml; \
+ done) > .depend
+
+alldepend:: depend
+
+FORCE:
+
+include .depend