#    Makefile template for Configure for the erc32sim library.
#    Copyright (C) 1993-2016 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_RUN_OBJS = sis.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 = -DFAST_UART -I$(srcroot)

## 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)

# 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

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

