# Makefile for the Moscow ML 1.42 version of Caml Light runtime system
# (DOS/Windows)
# Adapted 1994-08-21 for Moscow SML and the corresponding go32 1.12

# NOTE: compiling with gcc for the i386 (Linux or DOS/Windows), the
# option "-fno-defer-pop" is extremely important; its absence causes
# a space leak --- the C stack grows without bounds. PS 1994-09-01

BINDIR=C:\mosml\bin
CC=gcc
CFLAGS=-O -DANSI -DMSDOS -fno-defer-pop
LIBS=-lgrx -lpc -lm
RUNTIME32=go32t.exe

OBJS=interp.o misc.o stacks.o fix_code.o main.o fail.o signals.o \
  freelist.o major_gc.o minor_gc.o memory.o alloc.o roots.o \
  compare.o ints.o floats.o str.o io.o \
  extern.o externcp.o intern.o interncp.o \
  hash.o sys.o meta.o parsing.o lexing.o gc_ctrl.o graph.o msdos.o mosml.o \
  runtime.o md5sum.o


DOBJS=debugger.o

PRIMS=compare.c extern.c externcp.c floats.c gc_ctrl.c hash.c \
  intern.c interncp.c interp.c ints.c io.c lexing.c meta.c parsing.c \
  str.c sys.c graph.c mosml.c msdos.c md5sum.c

all: camlrunm.exe

camlrunm.exe: $(OBJS) prims.o $(RUNTIME32)
	$(CC) $(CFLAGS) -o camlrunm @&&!
prims.o $(OBJS) $(LIBS)
!
	strip camlrunm
	coff2exe -s $(RUNTIME32) camlrunm

camlrund.exe: opnames.h $(OBJS) prims.o $(DOBJS) $(RUNTIME32)
	$(CC) $(CFLAGS) -o camlrund @&&!
prims.o $(OBJS) $(DOBJS) $(LIBS)
!
	coff2exe -s $(RUNTIME32) camlrund 

clean:
	del camlrunm.exe
	del camlrunm
	del camlrund.exe
	del camlrund
	del *.o
	del prims
	del prims.c
	del opnames.h
	del jumptbl.h
	del makefile.bak

install:
	copy camlrunm.exe $(BINDIR)

prims.c: $(PRIMS)
	perl ../tools/findprim prims <<!
$(PRIMS)
!
	perl ../tools/mkprims prims > prims.c

opnames.h : instruct.h
	perl ../tools/mkopnam instruct.h > opnames.h

# jumptbl.h is required only if you have GCC 2.0 or later
jumptbl.h : instruct.h
	perl ../tools/mkjumptbl instruct.h > jumptbl.h

.c.o:
	$(CC) $(CFLAGS) -c {$< }

depend : prims.c opnames.h jumptbl.h
	del makefile.bak
	rename makefile makefile.bak
	perl ../tools/cutdeps makefile.bak > makefile
	gcc -MM $(CFLAGS) *.c >> makefile

### EVERYTHING THAT GOES BEYOND THIS COMMENT WILL BE ERASED WITHOUT WARNING
### DO NOT DELETE THIS LINE
alloc.o: alloc.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  debugger.h major_gc.h freelist.h memory.h gc.h minor_gc.h stacks.h
compare.o: compare.c fail.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h memory.h gc.h major_gc.h freelist.h minor_gc.h str.h
debugger.o: debugger.c
extern.o: extern.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h gc.h intext.h io.h memory.h major_gc.h freelist.h minor_gc.h
externcp.o: externcp.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h gc.h intext.h io.h memory.h major_gc.h freelist.h minor_gc.h \
  reverse.h
fail.o: fail.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  fail.h memory.h gc.h major_gc.h freelist.h minor_gc.h signals.h
fix_code.o: fix_code.c config.h ../config/m.h ../config/s.h misc.h mlvalues.h \
  instruct.h reverse.h
floats.o: floats.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h memory.h gc.h major_gc.h freelist.h minor_gc.h debugger.h
freelist.o: freelist.c config.h ../config/m.h ../config/s.h debugger.h misc.h \
  mlvalues.h freelist.h gc.h gc_ctrl.h major_gc.h
gc_ctrl.o: gc_ctrl.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h debugger.h gc.h gc_ctrl.h major_gc.h freelist.h minor_gc.h
graph.o: graph.c mlvalues.h config.h ../config/m.h ../config/s.h misc.h alloc.h \
  memory.h gc.h major_gc.h freelist.h minor_gc.h fail.h
hash.o: hash.c mlvalues.h config.h ../config/m.h ../config/s.h misc.h memory.h \
  gc.h major_gc.h freelist.h minor_gc.h str.h
intern.o: intern.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h gc.h intext.h io.h memory.h major_gc.h freelist.h minor_gc.h \
  reverse.h
interncp.o: interncp.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h gc.h intext.h io.h memory.h major_gc.h freelist.h minor_gc.h \
  reverse.h
interp.o: interp.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h debugger.h fail.h instruct.h memory.h gc.h major_gc.h freelist.h \
  minor_gc.h prims.h signals.h stacks.h str.h unalignd.h jumptbl.h
ints.o: ints.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  fail.h memory.h gc.h major_gc.h freelist.h minor_gc.h
io.o: io.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h fail.h \
  io.h memory.h gc.h major_gc.h freelist.h minor_gc.h signals.h sys.h
lexing.o: lexing.c mlvalues.h config.h ../config/m.h ../config/s.h misc.h \
  stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h str.h
main.o: main.c version.h alloc.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h exec.h fail.h gc.h globals.h intext.h io.h stacks.h memory.h \
  major_gc.h freelist.h minor_gc.h sys.h
major_gc.o: major_gc.c config.h ../config/m.h ../config/s.h debugger.h misc.h \
  mlvalues.h fail.h freelist.h gc.h gc_ctrl.h globals.h major_gc.h roots.h
memory.o: memory.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h fail.h freelist.h gc.h gc_ctrl.h major_gc.h memory.h minor_gc.h
meta.o: meta.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  globals.h major_gc.h freelist.h memory.h gc.h minor_gc.h prims.h
minor_gc.o: minor_gc.c config.h ../config/m.h ../config/s.h debugger.h misc.h \
  mlvalues.h fail.h gc.h gc_ctrl.h major_gc.h freelist.h memory.h minor_gc.h \
  roots.h
misc.o: misc.c config.h ../config/m.h ../config/s.h debugger.h misc.h mlvalues.h
mosml.o: mosml.c fail.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  memory.h gc.h major_gc.h freelist.h minor_gc.h str.h
msdos.o: msdos.c mlvalues.h config.h ../config/m.h ../config/s.h misc.h \
  signals.h instruct.h fail.h
parsing.o: parsing.c config.h ../config/m.h ../config/s.h mlvalues.h misc.h \
  memory.h gc.h major_gc.h freelist.h minor_gc.h
prims.o: prims.c mlvalues.h config.h ../config/m.h ../config/s.h misc.h prims.h
roots.o: roots.c debugger.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h memory.h gc.h major_gc.h freelist.h minor_gc.h stacks.h
signals.o: signals.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
  mlvalues.h signals.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h
stacks.o: stacks.c config.h ../config/m.h ../config/s.h debugger.h misc.h \
  mlvalues.h fail.h stacks.h memory.h gc.h major_gc.h freelist.h \
  minor_gc.h
str.o: str.c alloc.h misc.h config.h ../config/m.h ../config/s.h mlvalues.h \
  debugger.h
sys.o: sys.c config.h ../config/m.h ../config/s.h alloc.h misc.h mlvalues.h \
  fail.h globals.h instruct.h signals.h stacks.h memory.h gc.h \
  major_gc.h freelist.h minor_gc.h
unix.o: unix.c
