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

READLINE_SRC = $(srcroot)/readline/readline

SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o
SIM_RUN_OBJS = sis.o
SIM_EXTRA_CFLAGS = $(READLINE_CFLAGS)
SIM_EXTRA_LIBS = $(READLINE_LIB) $(TERMCAP_LIB) -lm
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)

# Code doesn't build cleanly yet.
SIM_WERROR_CFLAGS =

## COMMON_POST_CONFIG_FRAG

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

all: sis$(EXEEXT)
sis$(EXEEXT): sis.o $(SIS_OFILES) libsim.a $(LIBDEPS)
	$(CC) $(ALL_CFLAGS) -o sis$(EXEEXT) \
	  sis.o $(SIS_OFILES) libsim.a $(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)

