# Copyright (c) 2002 Red Hat, Inc
#
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
# that existing copyright notices are retained in all copies and that this
# notice is included verbatim in any distributions. No written agreement,
# license, or royalty fee is required for any of the authorized uses.
# Modifications to this software may be copyrighted by their authors
# and need not follow the licensing terms described here, provided that
# the new terms are clearly indicated on the first page of each file where
# they apply.

# Makefile for libgloss/frv. This is the board support
# code for the various frv targets.

DESTDIR =
VPATH = @srcdir@ @srcdir@/..
srcdir = @srcdir@
objdir = .
srcroot = $(srcdir)/../..
objroot = $(objdir)/../..

prefix = @prefix@
exec_prefix = @exec_prefix@

host_alias = @host_alias@
target_alias = @target_alias@

bindir = @bindir@
libdir = @libdir@
tooldir = $(exec_prefix)/$(target_alias)

# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

SHELL = /bin/sh

CC = @CC@

AS = @AS@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@
AR_FLAGS = rc

OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \
	then echo ${objroot}/../binutils/objdump ; \
	else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi`
OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
	then echo ${objroot}/../binutils/objcopy ; \
	else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`

CRT0 = crt0.o
SIM_BSP = libsim.a
SIM_OBJS = _exit.o \
           access.o \
           chmod.o \
	   chown.o \
           close.o \
	   creat.o \
           crt1.o \
	   execv.o \
	   execve.o \
	   fork.o \
           fstat.o \
           getpid.o \
           gettime.o \
           isatty.o \
           kill.o \
	   link.o \
           lseek.o \
           open.o \
	   pipe.o \
           read.o \
           sbrk.o \
           stat.o \
           time.o \
           times.o \
           trap.o \
           unlink.o \
           utime.o \
	   wait.o \
           write.o

#### Host specific Makefile fragment comes in here.
@host_makefile_frag@

all: $(CRT0) $(SIM_BSP)

$(SIM_BSP): $(SIM_OBJS)
	$(AR) $(ARFLAGS) $@ $?
	$(RANLIB) $@

_exit.o: $(srcdir)/_exit.c
access.o: $(srcdir)/access.c
chmod.o: $(srcdir)/chmod.c
chown.o: $(srcdir)/chown.c
close.o: $(srcdir)/close.c
creat.o: $(srcdir)/creat.c
crt1.o: $(srcdir)/crt1.c
execv.o: $(srcdir)/execv.c
execve.o: $(srcdir)/execve.c
fork.o: $(srcdir)/fork.c
fstat.o: $(srcdir)/fstat.c
getpid.o: $(srcdir)/getpid.c
gettime.o: $(srcdir)/gettime.c
isatty.o: $(srcdir)/isatty.c
kill.o: $(srcdir)/kill.c
link.o: $(srcdir)/link.c
lseek.o: $(srcdir)/lseek.c
open.o: $(srcdir)/open.c
pipe.o: $(srcdir)/pipe.c
read.o: $(srcdir)/read.c
sbrk.o: $(srcdir)/sbrk.c
stat.o: $(srcdir)/stat.c
time.o: $(srcdir)/time.c
times.o: $(srcdir)/times.c
trap.o: $(srcdir)/trap.S
unlink.o: $(srcdir)/unlink.c
utime.o: $(srcdir)/utime.c
wait.o: $(srcdir)/wait.c
write.o: $(srcdir)/write.c

install: $($(CPU)_INSTALL)
	$(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0)
	$(INSTALL_DATA) $(SIM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP)

clean mostlyclean:
	rm -f *.o *.a

distclean maintainer-clean realclean: clean
	rm -f Makefile config.cache config.log config.status

.PHONY: info dvi doc install-info clean-info
info doc dvi:
install-info:
clean-info:

Makefile: Makefile.in config.status @host_makefile_frag_path@
	$(SHELL) config.status

config.status: configure
	$(SHELL) config.status --recheck
