#    Makefile template for Configure for the erc32sim library.
#    Copyright (C) 1993-2013 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) -I. $(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
