#
# Makefile for IMP80 compiler
#
# Bob Eager   August 2002
#
#
# Product name
#
PRODUCT		= imp
#
# Compiler setup
#
CC		= gcc
#!IFDEF DEBUG
DBUG		= -DDEBUG
#!ELSE
#DBUG		=
#!ENDIF
#!IFDEF	PROD
#CFLAGS		= $(DBUG) -Fi -G5 -O -Q -Si -Tl30
#!ELSE
CFLAGS		= -g -Wall $(DBUG)
#!ENDIF
#
# Names of object files
#
OBJ1 =		asm.o global.o
OBJ2 =		global2.o lput.o main.o message.o misc.o
OBJ3 =		ncode.o pass1.o table.o
OBJ4 =		cgen.o code.o expop.o pass2.o
#
# Names of source files
#
CFILES1 =	asm.c global.c
CFILES2 =	global2.c lput.c main.c misc.c
CFILES3 =	ncode.c pass1.c table.c
CFILES4 =	cgen.c code.c expop.c pass2.c
#
# Names of directories and files
#
ASMDIR =	../genop
ASMFILE =	a86.dat
MESDIR =	../compmess
MESFILE =	messages.txt
PSFILE =	ps86.dat
PSLIST =	ps86.lst
SNDIR =		../gensn
SNINFO =	snames.dat
SYNDIR =	../genps
#
# Names of generated files
#
ASM =		asm.h
ASMLIST =	a86.lst
MESSAGE =	message.c
OPCODE =	opcode.h
SCOMM =		scomms.h
SNAMES =	snames.h
SNTABS =	sntabs.h
SYNTAX =	syntax.h
#
# Names of listing files
#
LIST =		a86.lst ps86.lst
#
# Other files
#
MAKEFILE	= makefile
README		= readme.txt
#
# Final executable file
#
EXE =		$(PRODUCT)
#
#-----------------------------------------------------------------------------
#
$(EXE):		$(OBJ1) $(OBJ2) $(OBJ3) $(DEF) $(LNK)
#!IFDEF	PROD
#		ilink /nologo /exepack:2 @$(LNK)
#		lxlite $(EXE)
#		eautil $(EXE) nul /s
#!ELSE
		$(CC) -o $(EXE) $(OBJ1) $(OBJ2) $(OBJ3)
#!ENDIF
#
# Object files
#
asm.o:	$(ASM) $(OPCODE) imp.h asm.c

code.o:	imp.h asm.h global.h global2.h lput.h $(OPCODE) code.c

#cgen.o:	imp.h global.h global2.h cgen.c

expop.o:	imp.h global.h expop.c

global.o:	global.h imp.h global.c

global2.o:	global2.h imp.h $(OPCODE) global2.c

lput.o:	lput.h lput.c

main.o:	imp.h global.h global2.h lput.h $(OPCODE) $(SNTABS) \
		$(SNDIR)/$(SNINFO) $(SNTABS) $(SNAMES) \
		main.c

message.o:	imp.h $(MESSAGE) $(MESDIR)/$(MESFILE)

misc.o:	imp.h global.h global2.h $(OPCODE) misc.c

ncode.o:	imp.h global.h ncode.c

pass1.o:	imp.h global.h $(OPCODE) pass1.c \
		$(SYNTAX) $(SYNDIR)/$(PSFILE)

pass2.o:	imp.h global.h pass2.c

table.o:	table.c

test.o:	test.c

#
# Generated files
#
$(ASM):		$(ASMDIR)/$(ASMFILE)
		$(ASMDIR)/genop $(ASMDIR)/$(ASMFILE) $(ASM) $(OPCODE) $(ASMLIST)

$(MESSAGE):	$(MESDIR)/$(MESFILE)
		$(MESDIR)/compmess $(MESDIR)/$(MESFILE) $(MESSAGE) /dev/null

$(OPCODE):	$(ASMDIR)/$(ASMFILE)
		$(ASMDIR)/genop $(ASMDIR)/$(ASMFILE) $(ASM) $(OPCODE) $(ASMLIST)

$(SCOMM):	$(SNDIR)/$(SNINFO)
		$(SNDIR)/gensn $(SNDIR)/$(SNINFO) $(SNTABS) $(SNAMES) $(SCOMM)

$(SNAMES):	$(SNDIR)/$(SNINFO)
		$(SNDIR)/gensn $(SNDIR)/$(SNINFO) $(SNTABS) $(SNAMES) $(SCOMM)

$(SNTABS):	$(SNDIR)/$(SNINFO)
		$(SNDIR)/gensn $(SNDIR)/$(SNINFO) $(SNTABS) $(SNAMES) $(SCOMM)

$(SYNTAX):	$(SYNDIR)/$(PSFILE)
		$(SYNDIR)/genps $(SYNDIR)/$(PSFILE) $(SYNTAX) $(PSLIST)
#
# Archive
#
archive:
		zip -9 $(PRODUCT) $(CFILES1) $(CFILES2) $(CFILES3) $(EXE) $(README) $(MAKEFILE)
#
# Cleanup
#
clean:
		rm $(OBJ1) $(OBJ2) $(OBJ3) $(LNK) $(PRODUCT).map
#		rm $(OBJ4)
		rm $(LIST) csetc.pch
#
# End of makefile for IMP80 compiler
#
