# Oukseh Lee # # Copyright(c) 2000-2004 Research On Program Analysis System # http://ropas.snu.ac.kr/n # # All rights reserved. This file is distributed under the terms of # an Open Source License. # The main Makefile include config/Makefile CAMLC=boot/ncamlrun boot/nmlc -I boot CAMLOPT=boot/ncamlrun ./nmlo -I stdlib -nontyping COMPFLAGS=$(INCLUDES) LINKFLAGS= CAMLYACC=boot/ocamlyacc NYACC=boot/nyacc YACCFLAGS=-v CAMLLEX=boot/ncamlrun boot/ocamllex NLEX=boot/ncamlrun boot/nlex DEPFLAGS=$(INCLUDES) CAMLRUN=boot/ncamlrun MKDIR=mkdir -p NEWCAMLC=$(CAMLC) -nontyping #-nontyping NMLBOOT_INCLUDES=-I utils -I ocaml/parsing -I ocaml/typing \ -I ocaml/bytecomp -I ocaml/driver \ -I bootcomp -I main ORG_INCLUDES=-I utils -I parser -I ocaml/parsing -I ocaml/typing \ -I typing -I ocaml/bytecomp -I ocaml/driver \ -I n2caml -I lambda -I ocaml/asmcomp -I ocaml/toplevel -I main INCLUDES=$(ORG_INCLUDES) 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=parser/linenum.cmo parser/location.cmo \ ocaml/parsing/longident.cmo \ ocaml/parsing/syntaxerr.cmo ocaml/parsing/parser.cmo \ ocaml/parsing/lexer.cmo ocaml/parsing/parse.cmo ocaml/parsing/printast.cmo TYPING=ocaml/typing/ident.cmo ocaml/typing/path.cmo \ ocaml/typing/primitive.cmo ocaml/typing/types.cmo \ ocaml/typing/btype.cmo \ ocaml/typing/subst.cmo ocaml/typing/predef.cmo \ ocaml/typing/datarepr.cmo ocaml/typing/env.cmo \ ocaml/typing/typedtree.cmo ocaml/typing/ctype.cmo \ ocaml/typing/printtyp.cmo ocaml/typing/includeclass.cmo \ ocaml/typing/mtype.cmo ocaml/typing/includecore.cmo \ ocaml/typing/includemod.cmo ocaml/typing/parmatch.cmo \ ocaml/typing/typetexp.cmo ocaml/typing/typecore.cmo \ ocaml/typing/typedecl.cmo ocaml/typing/typeclass.cmo \ ocaml/typing/typemod.cmo COMP=ocaml/bytecomp/lambda.cmo ocaml/bytecomp/printlambda.cmo \ ocaml/bytecomp/typeopt.cmo ocaml/bytecomp/switch.cmo ocaml/bytecomp/matching.cmo \ ocaml/bytecomp/translobj.cmo ocaml/bytecomp/translcore.cmo \ ocaml/bytecomp/translclass.cmo ocaml/bytecomp/translmod.cmo \ ocaml/bytecomp/simplif.cmo ocaml/bytecomp/runtimedef.cmo BYTECOMP=ocaml/bytecomp/meta.cmo ocaml/bytecomp/instruct.cmo ocaml/bytecomp/bytegen.cmo \ ocaml/bytecomp/printinstr.cmo ocaml/bytecomp/opcodes.cmo ocaml/bytecomp/emitcode.cmo \ ocaml/bytecomp/bytesections.cmo ocaml/bytecomp/dll.cmo ocaml/bytecomp/symtable.cmo \ ocaml/bytecomp/bytelibrarian.cmo ocaml/bytecomp/bytelink.cmo ASMCOMP=ocaml/asmcomp/arch.cmo ocaml/asmcomp/cmm.cmo ocaml/asmcomp/printcmm.cmo \ ocaml/asmcomp/reg.cmo ocaml/asmcomp/mach.cmo ocaml/asmcomp/proc.cmo \ ocaml/asmcomp/clambda.cmo ocaml/asmcomp/compilenv.cmo \ ocaml/asmcomp/closure.cmo ocaml/asmcomp/cmmgen.cmo \ ocaml/asmcomp/printmach.cmo ocaml/asmcomp/selectgen.cmo ocaml/asmcomp/selection.cmo \ ocaml/asmcomp/comballoc.cmo ocaml/asmcomp/liveness.cmo \ ocaml/asmcomp/spill.cmo ocaml/asmcomp/split.cmo \ ocaml/asmcomp/interf.cmo ocaml/asmcomp/coloring.cmo \ ocaml/asmcomp/reloadgen.cmo ocaml/asmcomp/reload.cmo \ ocaml/asmcomp/printlinear.cmo ocaml/asmcomp/linearize.cmo \ ocaml/asmcomp/schedgen.cmo ocaml/asmcomp/scheduling.cmo \ ocaml/asmcomp/emitaux.cmo ocaml/asmcomp/emit.cmo ocaml/asmcomp/asmgen.cmo \ ocaml/asmcomp/asmlink.cmo ocaml/asmcomp/asmlibrarian.cmo NUTILS = utils/nconfig.cmo utils/nmisc.cmo NTYPER = typing/setmap.cmo typing/debug.cmo \ typing/scope.cmo typing/ntypes.cmo typing/printty.cmo \ typing/error.cmo \ typing/unify.cmo typing/nenv.cmo typing/printenv.cmo typing/npredef.cmo \ typing/absyn.cmo typing/infer.cmo typing/dump.cmo \ typing/init.cmo NPARSER=parser/ast_gen.cmo parser/info.cmo \ parser/string_ast.cmo parser/nsyntaxerr.cmo parser/nparser.cmo \ parser/nlexer.cmo parser/postparse.cmo \ parser/nparse.cmo NTOCAML= n2caml/fake.cmo n2caml/ast2fake.cmo n2caml/nconvert.cmo \ n2caml/strtbl.cmo n2caml/strtbl_build.cmo n2caml/n2caml.cmo \ n2caml/absyn2ast.cmo lambda/record.cmo NDRIVER=ocaml/driver/errors.cmo \ ocaml/driver/compile.cmo \ main/nterrors.cmo \ main/ncompile.cmo \ main/main_args.cmo \ main/noption.cmo \ main/nmain.cmo NTOP=ocaml/driver/errors.cmo \ ocaml/driver/compile.cmo \ main/nterrors.cmo main/ncompile.cmo \ main/nty.cmo \ main/genprintval.cmo \ main/toploop.cmo \ ocaml/toplevel/trace.cmo main/topdirs.cmo OPTDRIVER=ocaml/driver/opterrors.cmo ocaml/driver/optcompile.cmo \ main/nterrors.cmo main/ncompile.cmo main/optmain.cmo NTOPMAIN=main/ntopmain.cmo NTOPLIB=main/toplevellib.cma NCOMPOBJS= $(UTILS) $(NUTILS) $(PARSING) \ $(TYPING) $(COMP) $(BYTECOMP) $(NPARSER) $(NTYPER) $(NTOCAML) $(NDRIVER) NTOPLIBS=$(UTILS) $(NUTILS) $(PARSING) $(TYPING) $(NTYPING) \ $(COMP) $(BYTECOMP) $(NPARSER) $(NTYPER) $(NTOCAML) $(NTOP) NOBJS= $(NTOPLIB) $(NTOPMAIN) NOPTOBJS=$(UTILS) $(NUTILS) $(PARSING) $(TYPING) $(COMP) \ $(NPARSER) $(NTYPER) $(NTOCAML) $(ASMCOMP) $(OPTDRIVER) NBOOT=$(UTILS) $(PARSING) $(TYPING) $(COMP) $(BYTECOMP) \ bootcomp/ast_gen.cmo bootcomp/stringinfo.cmo \ bootcomp/string_ast.cmo bootcomp/nsyntaxerr.cmo bootcomp/nparser.cmo \ bootcomp/nlexer.cmo bootcomp/postparse.cmo \ bootcomp/nparse.cmo \ bootcomp/nconvert.cmo \ bootcomp/strtbl.cmo bootcomp/n2caml.cmo \ bootcomp/nerrors.cmo \ bootcomp/ncompile.cmo \ main/main_args.cmo \ ocaml/driver/errors.cmo ocaml/driver/compile.cmo \ bootcomp/nmain.cmo ########################################################### OPTOBJS=$(OPTUTILS) $(PARSING) $(TYPING) $(COMP) $(ASMCOMP) $(NOPT) EXPUNGEOBJS=utils/misc.cmo utils/tbl.cmo \ utils/config.cmo utils/clflags.cmo \ ocaml/typing/ident.cmo ocaml/typing/path.cmo ocaml/typing/types.cmo \ ocaml/typing/btype.cmo \ ocaml/typing/predef.cmo ocaml/bytecomp/runtimedef.cmo \ ocaml/bytecomp/bytesections.cmo \ ocaml/bytecomp/dll.cmo \ ocaml/bytecomp/symtable.cmo ocaml/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 outcometree \ arrayLabels listLabels stringLabels stdLabels \ interop nml_setmaphash_ nml_typing_ ################### poisson ################## all: boot nmlc ocamlmklib nml ntylib otherlibraries ntools rebuild: nmlc nml ntylib:: cd stdlib/nty; $(MAKE) nml-boot:: cd ocaml/byterun; $(MAKE) all cp ocaml/byterun/ocamlrun boot/ncamlrun cd ocaml/yacc; $(MAKE) all cp ocaml/yacc/ocamlyacc boot/ocamlyacc cd tools/yacc; $(MAKE) all cp tools/yacc/nyacc boot/nyacc if test -f boot/libcamlrun.a; then :; else \ ln -s ../ocaml/byterun/libcamlrun.a boot/libcamlrun.a; fi if test -d stdlib/caml; then :; else \ ln -s ../ocaml/byterun stdlib/caml; fi cd stdlib; $(MAKE) COMPILER=../boot/nmlc all cd stdlib; cp $(LIBFILES) ../boot $(MAKE) nboot nboot: $(NBOOT) $(CAMLC) -o nmlc $(NBOOT) boot:: cd ocaml/byterun; $(MAKE) all cp ocaml/byterun/ocamlrun boot/ncamlrun cd ocaml/yacc; $(MAKE) all cp ocaml/yacc/ocamlyacc boot/ocamlyacc cd tools/yacc; $(MAKE) all cp tools/yacc/nyacc boot/nyacc cd stdlib; $(MAKE) COMPILER=../boot/nmlc all cd stdlib; cp $(LIBFILES) ../boot if test -f boot/libcamlrun.a; then :; else \ ln -s ../ocaml/byterun/libcamlrun.a boot/libcamlrun.a; fi if test -d stdlib/caml; then :; else \ ln -s ../ocaml/byterun stdlib/caml; fi nml: $(NOBJS) expunge $(CAMLC) $(LINKFLAGS) -linkall -o nml.tmp $(NOBJS) - $(CAMLRUN) ./expunge nml.tmp nml $(PERVASIVES) rm -f nml.tmp nmlc: $(NCOMPOBJS) $(CAMLC) $(LINKFLAGS) -o nmlc $(NCOMPOBJS) nmlc.opt: $(NCOMPOBJS:.cmo=.cmx) cd ocaml/asmrun; $(MAKE) meta.o dynlink.o $(CAMLOPT) $(LINKFLAGS) -ccopt "$(BYTECCLINKOPTS)" -o nmlc $(NCOMPOBJS:.cmo=.cmx) ocaml/asmrun/meta.o ocaml/asmrun/dynlink.o -cclib "$(DYNLINKOPTS)" nmlo: $(NOPTOBJS) $(NEWCAMLC) $(LINKFLAGS) -o nmlo $(NOPTOBJS) nmlo.opt: $(NOPTOBJS:.cmo=.cmx) $(CAMLOPT) $(LINKFLAGS) -o nmlo $(NOPTOBJS:.cmo=.cmx) LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader ntools:: cd tools; $(MAKE) all ocamlmklib:: cd ocaml/tools; $(MAKE) ocamlmklib opt: runtimeopt nmlo libraryopt otherlibrariesopt opt.opt: nmlc.opt nlex.opt nmakegen.opt nmlo.opt nlex.opt:: cd tools/lex; $(MAKE) opt nmakegen.opt:: cd tools/nmakegen; $(MAKE) opt runtimeopt: cd ocaml/asmrun; $(MAKE) all if test -f stdlib/libasmrun.a; then :; else \ ln -s ../ocaml/asmrun/libasmrun.a stdlib/libasmrun.a; fi clean:: cd ocaml/asmrun; $(MAKE) clean rm -f stdlib/libasmrun.a alldepend:: cd ocaml/asmrun; $(MAKE) depend # Installation install:: 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 if test -f nmlc.exe; then mv nmlc.exe nmlc; else :; fi if test -f nmlo.exe; then mv nmlo.exe nmlo; else :; fi rm -f $(LIBDIR)/lib*.so cd ocaml/byterun; $(MAKE) install if test -r $(LIBDIR)/ld.conf; then :; else echo "$(LIBDIR)" > $(LIBDIR)/ld.conf; fi cp nmlc $(BINDIR)/nmlc$(EXE) cp nml $(BINDIR)/nml$(EXE) cd stdlib; $(MAKE) install cd stdlib/nty; $(MAKE) install cd tools; $(MAKE) install cp main/toplevellib.cma $(LIBDIR)/toplevellib.cma cp expunge $(LIBDIR)/expunge$(EXE) cp ocaml/typing/outcometree.cmi ocaml/typing/outcometree.mli $(LIBDIR) cp main/ntopmain.cmo $(LIBDIR) cp main/toploop.cmi main/topdirs.cmi $(LIBDIR) for i in $(OTHERLIBRARIES); do \ (cd otherlibs/$$i; $(MAKE) install) || exit $$?; done if test -f nmlo; then $(MAKE) installopt; else :; fi installopt: cd ocaml/asmrun; $(MAKE) install cp nmlo $(BINDIR)/nmlo$(EXE) cd stdlib; $(MAKE) installopt set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) installopt); done clean:: partialclean main/toplevellib.cma: $(NTOPLIBS) $(NEWCAMLC) -a -o main/toplevellib.cma $(NTOPLIBS) clean:: rm -f main/toplevellib.cma ######################### poisson ############################ parser/nparser.n: parser/nparser.ny $(NYACC) $(YACCFLAGS) parser/nparser.ny clean:: rm -f parser/nparser.n parser/nparser.output beforedepend:: parser/nparser.n parser/nlexer.n: parser/nlexer.nl $(NLEX) parser/nlexer.nl clean:: rm -f parser/nlexer.n beforedepend:: parser/nlexer.n ############################################################### # The configuration file utils/config.ml: utils/config.mlp config/Makefile @rm -f utils/config.ml sed -e 's|%%DONTYPING%%|$(DONTYPING)|' \ -e 's|%%LIBDIR%%|$(LIBDIR)|' \ -e 's|%%BYTERUN%%|$(BINDIR)/ncamlrun|' \ -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|' \ -e 's|%%EXT_DLL%%|.so|' \ utils/config.mlp > utils/config.ml @chmod -w utils/config.ml clean:: rm -f utils/config.ml beforedepend:: utils/config.ml # The parser ocaml/parsing/parser.mli ocaml/parsing/parser.ml: ocaml/parsing/parser.mly $(CAMLYACC) $(YACCFLAGS) ocaml/parsing/parser.mly clean:: rm -f ocaml/parsing/parser.mli ocaml/parsing/parser.ml ocaml/parsing/parser.output beforedepend:: ocaml/parsing/parser.mli ocaml/parsing/parser.ml # The lexer ocaml/parsing/lexer.ml: ocaml/parsing/lexer.mll $(CAMLLEX) ocaml/parsing/lexer.mll clean:: rm -f ocaml/parsing/lexer.ml beforedepend:: ocaml/parsing/lexer.ml # The auxiliary lexer for counting line numbers parser/linenum.ml: parser/linenum.mll $(CAMLLEX) parser/linenum.mll clean:: rm -f parser/linenum.ml beforedepend:: parser/linenum.ml # The numeric opcodes ocaml/bytecomp/opcodes.ml: ocaml/byterun/instruct.h sed -n -e '/^enum/p' -e 's/,//g' -e '/^ /p' ocaml/byterun/instruct.h | \ awk -f ocaml/tools/make-opcodes > ocaml/bytecomp/opcodes.ml clean:: rm -f ocaml/bytecomp/opcodes.ml beforedepend:: ocaml/bytecomp/opcodes.ml # The predefined exceptions and primitives ocaml/byterun/primitives: cd ocaml/byterun; $(MAKE) primitives ocaml/bytecomp/runtimedef.ml: ocaml/byterun/primitives ocaml/byterun/fail.h (echo 'let builtin_exceptions = [|'; \ sed -n -e 's|.*/\* \("[A-Za-z_]*"\) \*/$$| \1;|p' ocaml/byterun/fail.h | \ sed -e '$$s/;$$//'; \ echo '|]'; \ echo 'let builtin_primitives = [|'; \ sed -e 's/.*/ "&";/' -e '$$s/;$$//' ocaml/byterun/primitives; \ echo '|]') > ocaml/bytecomp/runtimedef.ml clean:: rm -f ocaml/bytecomp/runtimedef.ml beforedepend:: ocaml/bytecomp/runtimedef.ml # Choose the right machine-dependent files ocaml/tools/cvt_emit: ocaml/tools/cvt_emit.mll cd ocaml/tools; $(MAKE) cvt_emit # The "expunge" utility expunge: $(EXPUNGEOBJS) $(CAMLC) $(LINKFLAGS) -o expunge $(EXPUNGEOBJS) clean:: rm -f expunge # The runtime system for the bytecode compiler runtime: cd ocaml/byterun; $(MAKE) all if test -f stdlib/libcamlrun.a; then :; else \ ln -s ../ocaml/byterun/libcamlrun.a stdlib/libcamlrun.a; fi clean:: cd ocaml/byterun; $(MAKE) clean rm -f stdlib/libcamlrun.a alldepend:: cd ocaml/byterun; $(MAKE) depend # The runtime system for the native-code compiler # The library library: cd stdlib; $(MAKE) all library-cross: cd stdlib; $(MAKE) RUNTIME=../byterun/ncamlrun all libraryopt: cd stdlib; $(MAKE) allopt clean:: cd stdlib; $(MAKE) clean alldepend:: cd stdlib; $(MAKE) depend # The extra libraries otherlibraries: set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) all); done otherlibrariesopt: set -e; for i in $(OTHERLIBRARIES); do (cd otherlibs/$$i; $(MAKE) allopt); 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 # Choose the right machine-dependent files ocaml/asmcomp/arch.ml: ocaml/asmcomp/$(ARCH)/arch.ml ln -s $(ARCH)/arch.ml ocaml/asmcomp/arch.ml partialclean:: rm -f ocaml/asmcomp/arch.ml beforedepend:: ocaml/asmcomp/arch.ml ocaml/asmcomp/proc.ml: ocaml/asmcomp/$(ARCH)/proc.ml ln -s $(ARCH)/proc.ml ocaml/asmcomp/proc.ml partialclean:: rm -f ocaml/asmcomp/proc.ml beforedepend:: ocaml/asmcomp/proc.ml ocaml/asmcomp/selection.ml: ocaml/asmcomp/$(ARCH)/selection.ml ln -s $(ARCH)/selection.ml ocaml/asmcomp/selection.ml partialclean:: rm -f ocaml/asmcomp/selection.ml beforedepend:: ocaml/asmcomp/selection.ml ocaml/asmcomp/reload.ml: ocaml/asmcomp/$(ARCH)/reload.ml ln -s $(ARCH)/reload.ml ocaml/asmcomp/reload.ml partialclean:: rm -f ocaml/asmcomp/reload.ml beforedepend:: ocaml/asmcomp/reload.ml ocaml/asmcomp/scheduling.ml: ocaml/asmcomp/$(ARCH)/scheduling.ml ln -s $(ARCH)/scheduling.ml ocaml/asmcomp/scheduling.ml partialclean:: rm -f ocaml/asmcomp/scheduling.ml beforedepend:: ocaml/asmcomp/scheduling.ml # Preprocess the code emitters ocaml/asmcomp/emit.ml: ocaml/asmcomp/$(ARCH)/emit.mlp ocaml/tools/cvt_emit $(CAMLRUN) ocaml/tools/cvt_emit < ocaml/asmcomp/$(ARCH)/emit.mlp > ocaml/asmcomp/emit.ml \ || { rm -f ocaml/asmcomp/emit.ml; exit 2; } partialclean:: rm -f ocaml/asmcomp/emit.ml beforedepend:: ocaml/asmcomp/emit.ml # The replay debugger clean:: rm -f boot/*.cm* boot/*.nty boot/camlheader boot/*.a boot/nyacc boot/ocamlyacc boot/ncamlrun clean:: cd ocaml/yacc; $(MAKE) clean # Default rules .SUFFIXES: .ml .mli .n .cmo .cmi .cmx .ns .nty .ml.cmo: $(CAMLC) $(COMPFLAGS) -c $< .mli.cmi: $(CAMLC) $(COMPFLAGS) -c $< .ml.cmx: $(CAMLOPT) $(COMPFLAGS) -c $< .n.cmo: $(NEWCAMLC) $(COMPFLAGS) -c $< .n.cmx: $(CAMLOPT) $(COMPFLAGS) -c $< .ns.nty: $(NEWCAMLC) $(COMPFLAGS) -c $< clean:: rm -f utils/*.cm[iox] utils/*.[so] utils/*~ rm -f ocaml/parsing/*.cm[iox] ocaml/parsing/*.[so] ocaml/parsing/*~ rm -f ocaml/typing/*.cm[iox] ocaml/typing/*.[so] ocaml/typing/*~ rm -f ocaml/bytecomp/*.cm[iox] ocaml/bytecomp/*.[so] ocaml/bytecomp/*~ rm -f ocaml/asmcomp/*.cm[iox] ocaml/asmcomp/*.[so] ocaml/asmcomp/*~ rm -f ocaml/asmrun/*.cm[iox] ocaml/asmrun/*.[so] ocaml/asmrun/*~ rm -f ocaml/driver/*.cm[iox] ocaml/driver/*.[so] ocaml/driver/*~ rm -f ocaml/toplevel/*.cm[iox] ocaml/toplevel/*.[so] ocaml/toplevel/*~ rm -f ocaml/tools/*.cm[iox] ocaml/tools/*.[so] ocaml/tools/*~ rm -f parser/*.cm[iox] parser/*.[so] parser/*~ rm -f n2caml/*.cm[iox] n2caml/*.[so] n2caml/*~ rm -f typing/*.cm[iox] typing/*.[so] typing/*~ rm -f lambda/*.cm[iox] lambda/*.[so] lambda/*~ rm -f main/*.cm[iox] main/*.[so] main/*~ rm -f *~ rm -f stdlib/caml rm -f nmlc nml nmlo cd tools; $(MAKE) clean cd stdlib/nty; $(MAKE) clean cd ocaml/tools; $(MAKE) clean depend: beforedepend nmakegen -d -f $(INCLUDES) # tools/nmlmake/nmlmake -d $(INCLUDES) test:: cd test/aparser; $(MAKE) cd test/bench; $(MAKE) cd test/bug; $(MAKE) cd test/hw; $(MAKE) test-clean:: cd test/aparser; $(MAKE) clean cd test/bench; $(MAKE) clean cd test/bug; $(MAKE) clean cd test/hw; $(MAKE) clean alldepend:: depend include .depend