# Copyright (c) 2008, 2009 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/rx.

VPATH = @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`

SCRIPTS = $(srcdir)/rx.ld $(srcdir)/rx-sim.ld
CRT = gcrt0.o crt0.o crtn.o
SIM_BSP = libsim.a
LIBNOSYS = ../libnosys/libnosys.a
SIM_OBJS = \
	sbrk.o \
	heaptop.o \
	exit.o \
	open.o \
	close.o \
	read.o \
	write.o \
	lseek.o \
	unlink.o \
	getpid.o \
	kill.o \
	fstat.o \
	argvlen.o \
	argv.o \
	chdir.o \
	stat.o \
	chmod.o \
	utime.o \
	time.o \
	gettimeofday.o \
	times.o \
	link.o \
	isatty.o \
	abort.o \
	mcount.o \
	sigprocmask.o \
	sleep.o

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


# Override .S.o rule to pass assembler debugging flags
.S.o:
	$(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<

all: $(CRT) $(SIM_BSP) copy_scripts_to_objdir

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

copy_scripts_to_objdir: $(SCRIPTS)
	cp $(SCRIPTS) $(objdir)

# Dependencies

SDEPS = $(srcdir)/rxsys.h $(srcdir)/../syscall.h

abort.o : $(SDEPS)
argv.o : $(SDEPS)
argvlen.o : $(SDEPS)
chdir.o : $(SDEPS)
chmod.o : $(SDEPS)
close.o : $(SDEPS)
exit.o : $(SDEPS)
fstat.o : $(SDEPS)
getpid.o : $(SDEPS)
gettimeofday.o : $(SDEPS)
gcrt0.o: gcrt0.S crt0.S
heaptop.o : $(SDEPS)
kill.o : $(SDEPS)
link.o : $(SDEPS)
lseek.o : $(SDEPS)
mcount.o : $(SDEPS)
open.o : $(SDEPS)
read.o : $(SDEPS)
sigprocmask.o : $(SDEPS)
sleep.o : $(SDEPS)
stat.o : $(SDEPS)
time.o : $(SDEPS)
times.o : $(SDEPS)
unlink.o : $(SDEPS)
utime.o : $(SDEPS)
write.o : $(SDEPS)

install: $(CRT) $(SIM_BSP) $(SCRIPTS)
	for c in $(CRT) $(SIM_BSP); do \
	  $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\
	done
	for c in $(SCRIPTS); do \
	  b=`basename $$c`; \
	  $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$b ;\
	done

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
