#$Id: Makefile,v 1.22 2004/03/14 10:44:29 morsiani Exp morsiani $
#
# Makefile for Linux 
#

# hosts supported: LINUX or SUN (Solaris)

HOST=LINUX

CPP=g++

# A note for system managers: if you plan to install mps and its support
# files on a permanent basis (a good place for it is /usr/local/), you may
# compile the project with ROMDIR default directory. 
# ROMDIR directory is the default place for support/ directory contents (.rom
# files and libraries); just choose a place for it, type it here, and
# comment out where needed.

# ROMDIR=/usr/local/MPS/support

FORMSLIB=./FORMS
ELFLIB=./ELF
X11INCLUDE=/usr/X11R6/include
X11LIB=/usr/X11R6/lib
LDLIBS= -lforms -lX11 -lm -lelf
CPPFLAGS= -O2 -D$(HOST) -I$(FORMSLIB) -I$(ELFLIB) -I$(X11INCLUDE)

# CPPFLAGS=-O2 -ansi -pedantic -Wall -D$(HOST) -DROMDIR='"$(ROMDIR)"'


# no user serviceable parts below

# Changes in one of the following files force recompilation for mps main program

SUPPORT = h/const.h h/types.h h/aout.h h/blockdev.h \
	  e/systembus.e e/bus.support.e e/blockdev.e \
	  e/device.e e/processor.e e/memspace.e e/setup.e e/utility.e \
	  e/disassemble.e e/watch.e e/xinterface.e e/appforms.e Makefile


# CPP source files for mps main program

CPPSRC = main.cc systembus.cc bus.support.cc blockdev.cc device.cc processor.cc \
	 memspace.cc setup.cc disassemble.cc watch.cc xinterface.cc \
	 appforms.cc utility.cc


# Object files for mps main program

OBJS = main.o systembus.o bus.support.o blockdev.o device.o processor.o memspace.o \
       setup.o disassemble.o watch.o xinterface.o appforms.o utility.o


# Main target 

all: mps mps-mkdev mps-elf2mps mps-objdump


# mps program targets

mps: $(OBJS) $(SUPPORT)
	$(CPP) $(CPPFLAGS) $(OBJS) -o mps \
		-L$(FORMSLIB) -L$(ELFLIB) -L$(X11LIB) $(LDLIBS)

main.o: main.cc $(SUPPORT)

setup.o: setup.cc $(SUPPORT)

systembus.o: systembus.cc $(SUPPORT)

bus.support.o: bus.support.cc $(SUPPORT)

blockdev.o: blockdev.cc h/blockdev.h $(SUPPORT)

device.o: device.cc $(SUPPORT)

processor.o: processor.cc h/processor.h $(SUPPORT)

memspace.o: memspace.cc $(SUPPORT)

disassemble.o: disassemble.cc h/processor.h $(SUPPORT)

watch.o	: watch.cc $(SUPPORT)

xinterface.o : xinterface.cc $(SUPPORT)

appforms.o : appforms.cc h/formdefs.h $(SUPPORT)

utility.o: utility.cc $(SUPPORT)


# mps support programs 

mps-mkdev: mkdev.o
	$(CPP) $(CPPFLAGS)  mkdev.o -o mps-mkdev \
		-L$(FORMSLIB) -L$(ELFLIB) -L$(X11LIB) $(LDLIBS)

mkdev.o: mkdev.cc h/const.h h/types.h h/blockdev.h Makefile 


mps-elf2mps: elf2mps.o
	$(CPP) $(CPPFLAGS) elf2mps.o -o mps-elf2mps \
		-L$(FORMSLIB) -L$(ELFLIB) -L$(X11LIB) $(LDLIBS)

elf2mps.o: elf2mps.cc h/const.h h/types.h h/blockdev.h h/processor.h h/aout.h Makefile


mps-objdump: objdump.o disassemble.o
	$(CPP) $(CPPFLAGS) objdump.o disassemble.o -o mps-objdump \
		-L$(FORMSLIB) -L$(X11LIB) -L$(ELFLIB) $(LDLIBS)

objdump.o: objdump.cc h/const.h h/types.h h/blockdev.h h/aout.h e/disassemble.e Makefile


# To remove object files

clean:
	-rm -f *.o *.mps


# To remove objects & executable files

distclean: clean
	-rm -f mps mps-mkdev mps-elf2mps mps-objdump
