#
# Makefile for IMP80 compiler
#
# Bob Eager   August 2002
#
#
# Product name
#
PRODUCT		= imp
#
# Compiler setup
#
CC		= icc
!IFDEF DEBUG
DBUG		= -DDEBUG
!ELSE
DBUG		=
!ENDIF
!IFDEF	PROD
CFLAGS		= $(DBUG) -Fi -G5 -O -Q -Si -Tl30
!ELSE
CFLAGS		= $(DBUG) -Fi -G5 -Q -Si -Sm -Ti -Tl30 -Tm -Tx
!ENDIF
#
# Names of object files
#
OBJ1 =		asm.obj global.obj
OBJ2 =		global2.obj lput.obj main.obj message.obj misc.obj
OBJ3 =		ncode.obj pass1.obj table.obj
OBJ4 =		cgen.obj code.obj expop.obj pass2.obj
#
# 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
#
DEF =		imp.def
LNK =		imp.lnk
MAKEFILE	= makefile
README		= readme.txt
#
# Final executable file
#
EXE =		$(PRODUCT).exe
#
#-----------------------------------------------------------------------------
#
$(EXE):		$(OBJ1) $(OBJ2) $(OBJ3) $(DEF) $(LNK)
!IFDEF	PROD
		ilink /nologo /exepack:2 @$(LNK)
		lxlite $(EXE)
		eautil $(EXE) nul /s
!ELSE
		ilink /debug /nobrowse /nologo @$(LNK)
!ENDIF
#
# Object files
#
asm.obj:	$(ASM) $(OPCODE) imp.h asm.c

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

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

expop.obj:	imp.h global.h expop.c

global.obj:	global.h imp.h global.c

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

lput.obj:	lput.h lput.c

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

message.obj:	imp.h $(MESSAGE) $(MESDIR)\$(MESFILE)

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

ncode.obj:	imp.h global.h ncode.c

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

pass2.obj:	imp.h global.h pass2.c

table.obj:	table.c

test.obj:	test.c
#
# Linker response file. Rebuild if makefile changes
#
$(LNK):		makefile
		@if exist $(LNK) erase $(LNK)
		@echo /map:$(PRODUCT) >> $(LNK)
		@echo /out:$(PRODUCT) >> $(LNK)
		echo $(OBJ1) >> $(LNK)
		echo $(OBJ2) >> $(LNK)
		echo $(OBJ3) >> $(LNK)
		echo $(DEF) >> $(LNK)
#
# Generated files
#
$(ASM):		$(ASMDIR)\$(ASMFILE)
		$(ASMDIR)\genop $(ASMDIR)\$(ASMFILE) $(ASM) $(OPCODE) $(ASMLIST)

$(MESSAGE):	$(MESDIR)\$(MESFILE)
		$(MESDIR)\compmess $(MESDIR)\$(MESFILE) $(MESSAGE) nul

$(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)\
		$(DEF) $(EXE) $(README)\
		$(MAKEFILE)
#
# Cleanup
#
clean:
		-erase $(OBJ1) $(OBJ2) $(OBJ3) $(LNK) $(PRODUCT).map
#		-erase $(OBJ4)
		-erase $(LIST) csetc.pch
#
# End of makefile for IMP80 compiler
#
