#
# makefile to make the mini compiler
#
RELEASE = 1

VERSION = 0

MACHINE = $(shell uname -m)

OSTYPE = $(shell uname -s)

OSREL = $(shell uname -r)

TOP = $(HOME)/mini

BDIR = $(TOP)/bin

LDIR = $(TOP)/lib

IDIR = $(TOP)/include

ETCDIR = $(TOP)/etc

CC = gcc

VBTREE = /usr/local/kun
#VBTREE = $(HOME)
#VBTREE = /home/vb/vbpub

CDLC = $(VBTREE)/bin/cdlc

CDLFLAGS = -L $(VBTREE)/include/ -W

LIBS =

LDFLAGS = -L$(VBTREE)/lib

LDLIBS = -lcdlrts -lm

SRCS =	main.k3 \
	options.k3 \
	ast.k3 \
	lexer.k3 \
	parser.k3 \
	checker.k3 \
	ident.k3 \
	tokens.k3 \
	imc.k3 \
	imcgen.k3 \
	tgtgen.k3 \
	tgtgencommon.k3 \
	tgtgenintel.k3 \
	tgtgensparc.k3 \
	errors.k3

OBJS =	main.o \
	options.o \
	ast.o \
	lexer.o \
	parser.o \
	checker.o \
	ident.o \
	tokens.o \
	imc.o \
	imcgen.o \
	tgtgen.o \
	tgtgencommon.o \
	tgtgenintel.o \
	tgtgensparc.o \
	errors.o \
	config.o

EXTSRCS =

DOC =

PRELUDE = mini-std.prl

PROG = mini-compile

MAKEFILE = Makefile

JUNK =	tmp core config.k3

.SUFFIXES: .k3

help:
	@echo "Possible make targets:"
	@echo "all		Create local running programs."
	@echo "clean		Free disk space."
	@echo "install		Install relevant files."

all: $(PROG)

install: $(PROG) $(PRELUDE)
	cp $(PROG) $(BDIR)
	strip $(BDIR)/$(PROG)
	cp $(PRELUDE) $(ETCDIR)

clean:
	rm -f $(JUNK) $(OBJS) $(PROG)

# Non-standard make rules
###
$(PROG): $(OBJS) $(LIBS)
	$(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS) $(LDLIBS)

%.o: %.k3
	$(CDLC) $(CDLFLAGS) $<

main.o: main.k3 ast.k3 parser.k3 checker.k3 imcgen.k3 \
	errors.k3 config.k3
errors.o: errors.k3 config.k3
tokens.o: tokens.k3
ast.o: ast.k3 tokens.k3
checker.o: ast.k3 ident.k3 tokens.k3 options.k3 errors.k3
parser.o: ast.k3 parser.k3 tokens.k3 lexer.k3 options.k3 errors.k3
lexer.o: lexer.k3 tokens.k3 errors.k3 options.k3 config.k3
config.o: config.k3
options.o: options.k3 errors.k3 config.k3
ident.o: ident.k3 ast.k3 imc.k3 tokens.k3 errors.k3 
imc.o: imc.k3 ast.k3 ident.k3 tokens.k3 errors.k3
imcgen.o: imcgen.k3 imc.k3 ast.k3 ident.k3 tokens.k3 errors.k3 options.k3
tgtgen.o: tgtgen.k3 tgtgencommon.k3 imc.k3 ast.k3
tgtgencommon.o: tgtgencommon.k3 errors.k3
tgtgensparc.o: tgtgensparc.k3 tgtgencommon.k3 imc.k3
tgtgenintel.o: tgtgenintel.k3 tgtgencommon.k3 imc.k3

# generation of config.k3
config.k3: $(MAKEFILE)
	echo 'MODULE config.' > $@
	echo '' >> $@
	echo 'DEFINES' >> $@
	echo '   FUNCTION get default machine name (TEXT>),' >> $@
	echo '   FUNCTION get default os type (TEXT>),' >> $@
	echo '   FUNCTION get default os release (TEXT>),' >> $@
	echo '   FUNCTION get default prelude directory (TEXT>),' >> $@
	echo '   FUNCTION get prelude name (TEXT>).' >> $@
	echo '' >> $@
	echo 'FUNCTION get default machine name (TEXT>):' >> $@
	echo '   [ "'$(MACHINE)'" -> TEXT ].' >> $@
	echo '' >> $@
	echo 'FUNCTION get default os type (TEXT>):' >> $@
	echo '   [ "'$(OSTYPE)'" -> TEXT ].' >> $@
	echo '' >> $@
	echo 'FUNCTION get default os release (TEXT>):' >> $@
	echo '   [ "'$(OSREL)'" -> TEXT ].' >> $@
	echo '' >> $@
	echo 'FUNCTION get default prelude directory (TEXT>):' >> $@
	echo '   [ "'$(ETCDIR)'" -> TEXT ].' >> $@
	echo '' >> $@
	echo 'FUNCTION get prelude name (TEXT>):' >> $@
	echo '   [ "'$(PRELUDE)'" -> TEXT ].' >> $@
