#    Makefile template for Configure for the erc32sim library.
#    Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
#    Written by Cygnus Support
#    Modified by J.Gaisler ESA/ESTEC
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

## COMMON_PRE_CONFIG_FRAG

TERMCAP_LIB = @TERMCAP@

SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o
SIM_EXTRA_LIBS = ../../readline/libreadline.a  $(TERMCAP_LIB) -lm
SIM_EXTRA_LIBDEPS = ../../readline/libreadline.a
SIM_EXTRA_ALL = sis
SIM_EXTRA_INSTALL = install-sis
SIM_EXTRA_CLEAN = clean-sis

# UARTS run at about 115200 baud (simulator time). Add -DFAST_UART to
# CFLAGS if faster (infinite) UART speed is desired. Might affect the
# behaviour of UART interrupt routines ...
SIM_EXTRA_CFLAGS = -DSTAT -DFAST_UART -DIUREV0 -DMECREV0

## COMMON_POST_CONFIG_FRAG

# `sis' doesn't need interf.o.
SIS_OFILES = exec.o erc32.o func.o help.o float.o

sis: sis.o $(SIS_OFILES) $(COMMON_OBJS) $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) -o sis \
	  sis.o $(SIS_OFILES) $(COMMON_OBJS) $(EXTRA_LIBS)

# FIXME: This computes the build host's endianness, doesn't it?
# There is AC_C_BIGENDIAN but it doesn't handle float endianness.
# [Are int/float endians every different on a sparc?]
end: $(srcdir)/end.c
	$(CC_FOR_BUILD) $(srcdir)/end.c -o end
end.h: end
	./end > end.h

# Copy the files into directories where they will be run.
install-sis: installdirs
	n=`echo sis | sed '$(program_transform_name)'`; \
	$(INSTALL_PROGRAM) sis$(EXEEXT) $(bindir)/$$n$(EXEEXT)

clean-sis:
	rm -f sis end end.h

configure:
	@echo "Rebuilding configure..."
	if [ x"${srcdir}" = x"@srcdir@" ] ; then \
	  srcdir=. ; export srcdir ; \
	else true ; fi ; \
	(cd $${srcdir}; autoconf --localdir=../common)

# Circumvent Sun Make bug with VPATH.
erc32.o: erc32.c sis.h end.h
exec.o: exec.c sis.h end.h
float.o: float.c sis.h end.h
func.o: func.c
help.o: help.c
interf.o: interf.c sis.h end.h 
sis.o: sis.c sis.h end.h
