# Makefile for libgloss/nds32
# Copyright (c) 1996, 1998 Cygnus Support. 2012 Andes Porting.
# All rights reserved.
#
# Redistribution and use in source and binary forms are permitted
# provided that the above copyright notice and this paragraph are
# duplicated in all such forms and that any documentation,
# advertising materials, and other materials related to such
# distribution and use acknowledge that the software was developed
# at Cygnus Support, Inc.  Cygnus Support, Inc. may not be used to
# endorse or promote products derived from this software without
# specific prior written permission.
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

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

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

TOP = ../..
SRCTOP = ../..

# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.
MULTISRCTOP =
MULTIBUILDTOP =
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 = qv
BISON = bison
MAKEINFO = makeinfo

.NOEXPORT:
MAKEOVERRIDES =

TARGETDOC = ../../targetdep.tex

CRT0 = crt0.o
CRT1 = crt1.o



SYSCALLS1 = _exit.o _open.o _close.o _read.o _write.o
SYSCALLS2 = _lseek.o _unlink.o _getpid.o _kill.o _fstat.o
SYSCALLS3 = _argvlen.o _argv.o _chdir.o _stat.o _chmod.o
SYSCALLS4 = _utime.o _time.o _gettimeofday.o _times.o _link.o
SYSCALLS5 = _rename.o _isatty.o _system.o _sbrk.o syscall_error_handler.o
SYSCALLS  = $(SYSCALLS1) $(SYSCALLS2) $(SYSCALLS3) $(SYSCALLS4) $(SYSCALLS5)
GENERIC_LIBOBJS =

LIBOBJS =  $(SYSCALLS) $(GENERIC_LIBOBJS)
LIBGLOSS = libgloss.a

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

all: $(CRT0) $(CRT1) $(LIBGLOSS)

libgloss.a: $(LIBOBJS)
	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
	$(RANLIB) $@

install:
	mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}
	$(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0)
	$(INSTALL_DATA) $(CRT1) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT1)
	$(INSTALL_DATA) $(LIBGLOSS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LIBGLOSS)







clean mostlyclean:
	rm -f *~ *.[oa]

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

info doc:
install-info:
clean-info:

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

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

# to support SunOS VPATH
crt0.o: crt0.S
crt1.o: crt1.S
_exit.o: _exit.S
_open.o: _open.S
_close.o: _close.S
_read.o: _read.S
_write.o: _write.S
_lseek.o: _lseek.S
_unlink.o: _unlink.S
_getpid.o: _getpid.S
_kill.o: _kill.S
_fstat.o: _fstat.S
_argvlen.o: _argvlen.S
_argv.o: _argv.S
_chdir.o: _chdir.S
_stat.o: _stat.S
_chmod.o: _chmod.S
_utime.o: _utime.S
_time.o: _time.S
_gettimeofday.o: _gettimeofday.S
_times.o: _times.S
_link.o: _link.S
_rename.o: _rename.S
_isatty.o: _isatty.S
_system.o: _system.S
_sbrk.o: _sbrk.S
syscall_error_handler.o: syscall_error_handler.S
