#-------------------------------------------------------------------------
# Source files
#-------------------------------------------------------------------------

gloss_hdrs = \
	machine/syscall.h \

gloss_srcs = \
	syscalls.c \

# Extra files

crt0_asm      = crt0.S

# Multilib support variables.
# TOP is used instead of MULTI{BUILD,SRC}TOP.

MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true

#-------------------------------------------------------------------------
# Basic setup
#-------------------------------------------------------------------------

# Remove all default implicit rules since they can cause subtle bugs
# and they just make things run slower

.SUFFIXES:
% : %,v
% : RCS/%,v
% : RCS/%
% : s.%
% : SCCS/s.%

# Default is to build the prereqs of the all target (defined at bottom)

default : all
.PHONY : default

# Source directory

obj_dir := .
src_dir := @srcdir@
VPATH   := $(src_dir) $(src_dir)/machine

# Installation directories

prefix  := @prefix@
DESTDIR ?= $(prefix)

install_hdrs_dir := $(DESTDIR)$(prefix)/$(target_alias)/include/machine
install_libs_dir  = $(DESTDIR)$(prefix)/$(target_alias)/lib${MULTISUBDIR}

#-------------------------------------------------------------------------
# Programs and flags 
#-------------------------------------------------------------------------

# C compiler

CC            := @CC@
CFLAGS        := @CFLAGS@
CPPFLAGS      := -I$(obj_dir) -I$(src_dir)
COMPILE       := $(CC) -MMD -MP $(CPPFLAGS) $(CFLAGS)

# Library creation

AR            := @AR@
RANLIB        := @RANLIB@

# Installation

INSTALL       := @INSTALL@
INSTALL_DATA  := @INSTALL_DATA@

#-------------------------------------------------------------------------
# Build Object Files from C Source
#-------------------------------------------------------------------------

gloss_c_srcs = $(filter %.c, $(gloss_srcs))
gloss_c_objs = $(patsubst %.c, %.o, $(notdir $(gloss_c_srcs)))
gloss_c_deps = $(patsubst %.c, %.d, $(notdir $(gloss_c_srcs)))

$(gloss_c_objs) : %.o : %.c
	$(COMPILE) -c $<

objs += $(gloss_c_objs)
deps += $(gloss_c_deps)
junk += $(gloss_c_deps) $(gloss_c_objs)

#-------------------------------------------------------------------------
# Build Object Files from Assembly Source
#-------------------------------------------------------------------------

gloss_asm_srcs = $(filter %.S, $(gloss_srcs))
gloss_asm_objs = $(patsubst %.S, %.o, $(notdir $(gloss_asm_srcs)))
gloss_asm_deps = $(patsubst %.S, %.d, $(notdir $(gloss_asm_srcs)))

$(gloss_asm_objs) : %.o : %.S
	$(COMPILE) -c $<

objs += $(gloss_asm_objs)
deps += $(gloss_asm_deps)
junk += $(gloss_asm_deps) $(gloss_asm_objs)

#-------------------------------------------------------------------------
# Build libgloss.a
#-------------------------------------------------------------------------

gloss_lib  = libgloss.a
$(gloss_lib) : $(objs)
	$(AR) rcv $@ $^
	$(RANLIB) $@

junk += $(gloss_libs)

install_hdrs += $(gloss_hdrs)
install_libs += $(gloss_lib)

#-------------------------------------------------------------------------
# Build crt0.o
#-------------------------------------------------------------------------

crt0_obj  = $(patsubst %.S, %.o, $(crt0_asm))
crt0_deps = $(patsubst %.S, %.d, $(crt0_asm))

$(crt0_obj) : %.o : %.S
	$(COMPILE) -c $<

deps += $(crt0_deps)
junk += $(crt0_deps) $(crt0_obj)

install_libs += $(crt0_obj)

#-------------------------------------------------------------------------
# Autodependency files
#-------------------------------------------------------------------------

-include $(deps)

deps : $(deps)
.PHONY : deps

#-------------------------------------------------------------------------
# Installation
#-------------------------------------------------------------------------

install_hdrs_wdir += $(addprefix $(src_dir)/, $(install_hdrs))
install-hdrs : $(install_hdrs_wdir)
	test -d $(install_hdrs_dir) || mkdir -p $(install_hdrs_dir)
	for file in $^; do \
		$(INSTALL_DATA) $$file $(install_hdrs_dir)/; \
	done

install-libs : $(install_libs)
	test -d $(install_libs_dir) || mkdir -p $(install_libs_dir)
	for file in $^; do \
		$(INSTALL_DATA) $$file $(install_libs_dir)/$$file; \
	done

install : install-hdrs install-libs 
.PHONY : install install-hdrs install-libs

#-------------------------------------------------------------------------
# Regenerate configure information
#-------------------------------------------------------------------------

configure_prereq = \
  $(src_dir)/configure.in \

$(src_dir)/configure : $(configure_prereq)
	cd $(src_dir) && autoconf

config.status : $(src_dir)/configure
	./config.status --recheck

Makefile : $(src_dir)/Makefile.in config.status
	./config.status

dist_junk += config.status Makefile config.log

#-------------------------------------------------------------------------
# Default
#-------------------------------------------------------------------------

all : $(install_libs)
.PHONY : all

#-------------------------------------------------------------------------
# Clean up junk
#-------------------------------------------------------------------------

clean :
	rm -rf *~ \#* $(junk)

distclean :
	rm -rf *~ \#* $(junk) $(dist_junk)

.PHONY : clean distclean
