#
#

DESTDIR =

VPATH = @srcdir@ @srcdir@/..
srcdir = @srcdir@
objdir = .
srcroot = $(srcdir)/../..
objroot = $(objdir)/../..

prefix = @prefix@
exec_prefix = @exec_prefix@

host_alias = @host_alias@
target_alias = @target_alias@

bindir = @bindir@
libdir = @libdir@
tooldir = $(exec_prefix)/$(target_alias)

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTIDIRS =
MULTISUBDIR =

SHELL =	/bin/sh

CC = @CC@

AS = @AS@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@

OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
	then echo ${objroot}/../binutils/objdump ; \
	else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
	then echo ${objroot}/../binutils/objcopy ; \
	else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`

# Here is all of the handlers stuff
H_SCRIPTS	=
H_BSP	= libh.a
H_OBJS	= intable.o dvz_hndl.o flg_hndl.o iad_hndl.o svc_hndl.o und_hndl.o
H_TEST	= hndl-test
H_INSTALL	= install-hndl

# Here is all of the simulator stuff
SIM_SCRIPTS	= sim.ld
SIM_BSP	= libsim.a
SIM_OBJS = _exit.o close.o _getenv.o lseek.o open.o read.o \
	_rename.o sbrk.o time.o unlink.o write.o \
	stat.o putnum.o kill.o getpid.o isatty.o fstat.o
SIM_TEST	= sim-test
SIM_INSTALL	= install-sim

# Here is all of the CRT stuff
CRT	= crti.o crtn.o crt1.o
CRT_INSTALL = install-crt

# Host specific makefile fragment comes in here.
@host_makefile_frag@

#
# build a test program for each target board. Just trying to get
# it to link is a good test, so we ignore all the errors for now.
#
all: ${CRT} ${SIM_BSP} ${H_BSP}

#
# here's where we build the board support packages for each target
#
${H_BSP}: ${H_OBJS}
	${AR} ${ARFLAGS} ${H_BSP} ${H_OBJS}
	${RANLIB} ${H_BSP}

${SIM_BSP}: ${SIM_OBJS}
	${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS}
	${RANLIB} ${SIM_BSP}

#
# here's where we build the test programs for each target
#
.PHONY: test
test:	${SIM_TEST} ${H_TEST} 

hndl-test:	hndl-test.x hndl-test.dis

hndl-test.x:	test.o ${H_BSP}
	${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
	test.o \
	-o hndl-test.x ${LIBS_FOR_TARGET} -lc ${H_BSP} -Wl,-T${SIM_SCRIPTS}

hndl-test.dis:	hndl-test.x
	${OBJDUMP} -d hndl-test.x > hndl-test.dis


sim-test:	sim-test.x sim-test.dis

sim-test.x:	test.o ${SIM_BSP}
	${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \
	test.o \
	-o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} -Wl,-T${SIM_SCRIPTS}

sim-test.dis:	sim-test.x
	${OBJDUMP} -d sim-test.x > sim-test.dis

#
#
#
.c.S:
	${CC} ${CFLAGS_FOR_TARGET} -c $<

clean mostlyclean:
	rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(H_BSP)

distclean maintainer-clean realclean: clean
	rm -f Makefile config.status *~

.PHONY: install info install-info clean-info
install: ${CRT_INSTALL} ${SIM_INSTALL} ${H_INSTALL}

install-crt:
	set -e; for x in ${CRT} ; do\
	  ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
	done

install-sim:
	for x in ${SIM_BSP} ; do\
	 ${INSTALL_PROGRAM} $${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
	done
	for x in ${SIM_SCRIPTS}; do\
	 ${INSTALL_DATA} ${srcdir}/$${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
	done

install-hndl:
	for x in ${H_BSP}; do\
	 ${INSTALL_PROGRAM} $${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \
	done

doc:
info:
install-info:
clean-info:

Makefile: Makefile.in config.status @host_makefile_frag_path@
	$(SHELL) config.status

config.status: configure
	$(SHELL) config.status --recheck
