# Makefile for the Caml Light toplevel.

CAMLCOMP=../camlrun ../camlcomp
CAMLLINK=../camlrun ../camllink
CAMLRUN=../camlrun
INCLUDES=-stdlib ../lib -I ../compiler -I ../linker
COMPFLAGS=-O fast $(INCLUDES)
LINKFLAGS=-g $(INCLUDES)

EXTERNOBJS=config.zo misc.zo const.zo prim.zo instruct.zo lambda.zo	\
    globals.zo location.zo syntax.zo errors.zo modules.zo builtins.zo	\
    types.zo pr_type.zo ty_error.zo typing.zo ty_decl.zo pr_decl.zo	\
    ty_intf.zo tr_env.zo match.zo trstream.zo front.zo back.zo 		\
    opcodes.zo prim_opc.zo buffcode.zo labels.zo reloc.zo emitcode.zo	\
    primdecl.zo lexer.zo par_aux.zo parser.zo				\
    predef.zo prim_c.zo symtable.zo patch.zo tr_const.zo

OBJS=pr_value.zo load_phr.zo do_phr.zo toplevel.zo version.zo main.zo

PERV1=bool char string vect eq exc fchar filename fstring fvect
PERV2=float hashtbl int io lexing list obj parsing pair ref toplevel printf
PERV3=stream graphics stack queue random sort
SPECIALS=sys unix

all: camltop

camltop: $(OBJS) provide expunge
	$(CAMLRUN) provide -stdlib ../lib $(PERV1) > required
	$(CAMLRUN) provide -stdlib ../lib $(PERV2) >> required
	$(CAMLRUN) provide -stdlib ../lib $(PERV3) >> required
	$(CAMLLINK) $(LINKFLAGS) -o camltop1 -require required -files &&!
stdlib.zo $(EXTERNOBJS) $(OBJS)
!
	$(CAMLRUN) expunge camltop1 camltop <<!
$(PERV1) $(PERV2) $(PERV3) $(SPECIALS)
!
	del camltop1
	del required
	copy toplevel.zi ..\lib

expunge: expunge.zo
	$(CAMLLINK) $(LINKFLAGS) -o expunge stdlib.zo readword.zo expunge.zo

provide: provide.zo
	$(CAMLLINK) $(LINKFLAGS) -o provide stdlib.zo \
                config.zo misc.zo modules.zo provide.zo

clean scratch:
	del *.zi
	del *.zo
	del camltop
	del camltop1
	del expunge
	del provide

install:
	copy camltop $(LIBDIR)\camltop

.mli.zi:
	$(CAMLCOMP) $(COMPFLAGS) {$< }

.ml.zo:
	$(CAMLCOMP) $(COMPFLAGS) {$< }

### EVERYTHING THAT GOES BEYOND THIS COMMENT IS GENERATED
### DO NOT DELETE THIS LINE
do_phr.zo: pr_value.zo ../compiler/typing.zo ../compiler/parser.zi meta.zi \
    ../compiler/location.zi ../compiler/modules.zo ../compiler/const.zo \
    ../compiler/misc.zo load_phr.zo ../compiler/back.zo \
    ../compiler/front.zo ../linker/symtable.zo ../compiler/syntax.zo \
    ../compiler/lexer.zi ../compiler/ty_decl.zo ../compiler/pr_type.zi 
expunge.zo: ../linker/symtable.zo ../linker/readword.zo \
    ../compiler/const.zo 
load_phr.zo: pr_value.zo ../compiler/reloc.zo meta.zi ../linker/tr_const.zo \
    ../compiler/labels.zo ../compiler/misc.zo ../linker/symtable.zo \
    ../linker/patch.zo ../compiler/instruct.zo ../compiler/buffcode.zo \
    ../compiler/emitcode.zo ../compiler/builtins.zo ../compiler/opcodes.zo 
main.zo: meta.zi ../compiler/location.zi ../compiler/modules.zo \
    ../compiler/config.zi version.zo ../compiler/misc.zo do_phr.zo \
    ../linker/symtable.zo 
pr_value.zo: ../compiler/misc.zo ../linker/symtable.zo \
    ../compiler/pr_type.zi ../compiler/modules.zo ../compiler/builtins.zo \
    ../compiler/globals.zo ../compiler/types.zo ../compiler/const.zo 
provide.zo: ../compiler/prim.zo ../compiler/modules.zo \
    ../compiler/config.zi ../compiler/const.zo ../compiler/misc.zo \
    ../compiler/globals.zo 
toplevel.zo: toplevel.zi meta.zi ../compiler/modules.zo \
    ../compiler/emit_phr.zo ../compiler/misc.zo ../linker/symtable.zo \
    ../linker/patch.zo ../compiler/lexer.zi ../compiler/builtins.zo \
    ../compiler/globals.zo pr_value.zo ../compiler/location.zi load_phr.zo \
    do_phr.zo ../compiler/instruct.zo ../compiler/types.zo \
    ../compiler/opcodes.zo 
