#    Makefile template for Configure for the erc32sim library.
#    Copyright (C) 1993, 1996-1997, 2007-2012 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 3 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, see <http://www.gnu.org/licenses/>.

## COMMON_PRE_CONFIG_FRAG

TERMCAP_LIB = @TERMCAP@
READLINE_LIB = @READLINE@

SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o
SIM_EXTRA_LIBS = $(READLINE_LIB) $(TERMCAP_LIB) -lm
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) $(DESTDIR)$(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 sis.h end.h
help.o: help.c sis.h end.h
interf.o: interf.c sis.h end.h 
sis.o: sis.c sis.h end.h
