# Makefile for libgloss/sparc/libsys
# Copyright (c) 1996 Cygnus Support.
# 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.

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)

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

SHELL = /bin/sh

CC = @CC@

AS = @AS@
AR = @AR@
LD = @LD@
RANLIB = @RANLIB@

# _r.o is for the reentrant syscall stubs.
# The .S_r.o/.c_r.o rules are from host/any.

.SUFFIXES: .c .S .o _r.o

.S_r.o:
	$(CC) $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) -DREENT $(INCLUDES) -c $< -o $@
.c_r.o:
	$(CC) $(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) -DREENT $(INCLUDES) -c $< -o $@

# CFILES_R, SFILES_R, and TEMPLATE_SFILES_R define those system calls that are
# needed by the ANSI C part of newlib when REENTRANT_SYSCALLS_PROVIDED is
# defined.

CFILES = isatty.c

CFILES_R =

SFILES = cerror.S _exit.S

SFILES_R = sbrk.S

# List of files built from template.S (with an '_' suffix).

TEMPLATE_SFILES = chdir_ lstat_

TEMPLATE_SFILES_R = close_ fstat_ getpid_ kill_ \
	lseek_ open_ read_ stat_ unlink_ write_

# If newlib defines REENTRANT_SYSCALLS_PROVIDED, then these are used as well.
REENTRANT_OFILES = $(SFILES_R:.S=_r.o) $(TEMPLATE_SFILES_R:_=_r.o) \
	$(CFILES_R:.c=_r.o)

OFILES = $(SFILES:.S=.o) $(SFILES_R:.S=.o) \
	$(TEMPLATE_SFILES:_=.o) $(TEMPLATE_SFILES_R:_=.o) \
	$(CFILES:.c=.o) $(CFILES_R:.c=.o) \
	$(REENTRANT_OFILES)

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

all: libsys.a libsys-crt0.o

libsys.a: $(OFILES)
	rm -f $@
	$(AR) $(AR_FLAGS) $@ $(OFILES)

install:
	$(INSTALL_DATA) libsys-crt0.o $(tooldir)/lib/libsys-crt0.o
	$(INSTALL_DATA) libsys.a $(tooldir)/lib/libsys.a

doc:

.PHONY: info install-info clean-info
info:
install-info:
clean-info:

clean mostlyclean:
	rm -f *.o *.a *.s stamp-srcs

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

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

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

stamp-srcs: Makefile template.S template_r.S
	for f in $(TEMPLATE_SFILES:_=) ; \
	do \
		$(CC) -E -Dfunc=$$f \
		$(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) $(INCLUDES) \
		$(srcdir)/template.S >$$f.S ; \
	done
	for f in $(TEMPLATE_SFILES_R:_=) ; \
	do \
		$(CC) -E -Dfunc=$$f \
		$(CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) $(INCLUDES) \
		$(srcdir)/template_r.S | sed -e 's/^_/#/' >$$f.S ; \
	done
	touch stamp-srcs

# Make a dependency for each file built from a template.

$(TEMPLATE_SFILES:_=.S) $(TEMPLATE_SFILES_R:_=.S): stamp-srcs

# To support SunOS broken VPATH (sigh).

_exit.o: _exit.S
cerror.o: cerror.S
chdir.o: chdir.S
close.o: close.S
fstat.o: fstat.S
getpid.o: getpid.S
isatty.o: isatty.c
kill.o: kill.S
libsys-crt0.o: libsys-crt0.S
lseek.o: lseek.S
lstat.o: lstat.S
open.o: open.S
read.o: read.S
sbrk.o: sbrk.S
stat.o: stat.S
write.o: write.S

# Reentrant versions ...
# These are all needed to support the ANSI C library routines.

close_r.o: close.S
fstat_r.o: fstat.S
getpid_r.o: getpid.S
kill_r.o: kill.S
lseek_r.o: lseek.S
open_r.o: open.S
read_r.o: read.S
sbrk_r.o: sbrk.S
stat_r.o: stat.S
unlink_r.o: unlink.S
write_r.o: write.S
