VPATH = src

CC=sparc-elf-gcc
AR=sparc-elf-ar
RANLIB=sparc-elf-ranlib
AS=sparc-elf-gcc -c
CFLAGS= -g $(XFLAGS) -I include -I include/tdi \
	-DSRP \
	-DSTAND_ALONE \
	-DASM_SETJMP \
	-DCLOCK_REALTIME=1 \
        -DREAL_TIME=1 \
	-DRR_SWITCH \
        -DC_CONTEXT_SWITCH \
	-D__leonbare__


#DEF_RR
ASFLAGS=$(CFLAGS) 

PREFIX = /opt/sparc-elf
GCCDIR=$(PREFIX)/lib/gcc-lib/sparc-elf/3.2.3
LIBDIR=$(PREFIX)/sparc-elf/lib
INCDIR=$(PREFIX)/sparc-elf/include
DOCDIR=$(PREFIX)/doc
LIBOBJ=libpthread.a

OBJS = pthread.o stack.o mutex.o cond.o init.o  \
	signal.o signal_set.o signal_func.o signal_raise.o \
        signal_wait.o signal_suspend.o signal_mask.o \
        p_aux.o  queue.o queuetimer.o queuepthread.o disp.o  leon.o \
	time.o debug.o clock.o sleep.o


multi-all: src/offsets.h $(LIBOBJ) 

libpthread.a: $(OBJS)
	$(AR) cr libpthread.a $(OBJS)
	$(RANLIB) libpthread.a

install:
	install $(LIBOBJ) $(LIBDIR)/$(DESTDIR)

install-headers:
	install include/fsu_pthread.h $(INCDIR)
	if [ ! -d $(INCDIR)/fsu_pthread ] ; then mkdir $(INCDIR)/fsu_pthread; fi
	if [ ! -d $(INCDIR)/asm-leon ] ; then mkdir $(INCDIR)/asm-leon; fi
	install include/fsu_pthread/* $(INCDIR)/fsu_pthread
	install include/asm-leon/* $(INCDIR)/asm-leon

install-dummy:
	install include/fsu_pthread.h $(INCDIR)/
	if [ ! -d $(INCDIR)/fsu_pthread ] ; then mkdir $(INCDIR)/fsu_pthread; fi
	if [ ! -d $(INCDIR)/asm-leon ] ; then mkdir $(INCDIR)/asm-leon; fi
	install include/fsu_pthread/* $(INCDIR)/fsu_pthread
	install include/asm-leon/* $(INCDIR)/asm-leon
	make clean all 
	install $(LIBOBJ) $(LIBDIR)
	make clean all XFLAGS=-mflat
	install $(LIBOBJ) $(LIBDIR)/flat
	make clean all XFLAGS=-msoft-float
	install $(LIBOBJ) $(LIBDIR)/soft
	make clean all XFLAGS="-msoft-float -mflat"
	install $(LIBOBJ) $(LIBDIR)/soft/flat
	make clean all XFLAGS="-msoft-float -mv8"
	install $(LIBOBJ) $(LIBDIR)/soft/v8
	make clean all XFLAGS="-msoft-float -mv8 -mflat"
	install $(LIBOBJ) $(LIBDIR)/soft/v8/flat
	make clean all XFLAGS="-mv8"
	install $(LIBOBJ) $(LIBDIR)/v8
	make clean all XFLAGS="-mv8 -mflat"
	install $(LIBOBJ) $(LIBDIR)/v8/flat

clean:
	-rm -rf *.o *.a

distclean: clean
	-rm -f src/offsets.h

install-src:
	cp -p * /opt/sparc-elf/src/libio

src/offsets.s: src/offsets.c
	$(CC) $(CFLAGS) -S -o $@ $< 
src/offsets.h: src/offsets.s
	$(call filechk,gen-asm-offsets)

define filechk_gen-asm-offsets
	(set -e; \
	 echo "#ifndef __ASM_OFFSETS_H__"; \
	 echo "#define __ASM_OFFSETS_H__"; \
	 echo "/*"; \
	 echo " * DO NOT MODIFY."; \
	 echo " *"; \
	 echo " * This file was generated by offsets.c"; \
	 echo " *"; \
	 echo " */"; \
	 echo ""; \
	 sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \
	 echo ""; \
	 echo "#endif" )
endef

define filechk
	@set -e;				\
	echo '  CHK     $@';			\
	mkdir -p $(dir $@);			\
	$(filechk_$(1)) < $< > $@.tmp;		\
	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
		rm -f $@.tmp;			\
	else					\
		echo '  UPD     $@';		\
		mv -f $@.tmp $@;		\
	fi
endef

multi-do:
	  compiler="$(CC)"; \
	  for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
	    dir=`echo $$i | sed -e 's/;.*$$//'`; \
	    if [ "$${dir}" = "." ]; then \
	      true; \
	    else \
	        flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
		$(MAKE) $(FLAGS_TO_PASS) \
				CFLAGS="$(CFLAGS) $${flags}" \
				FCFLAGS="$(FCFLAGS) $${flags}" \
				FFLAGS="$(FFLAGS) $${flags}" \
				ADAFLAGS="$(ADAFLAGS) $${flags}" \
				prefix="$(prefix)" \
				PREFIX="$(PREFIX)" \
				exec_prefix="$(exec_prefix)" \
				GCJFLAGS="$(GCJFLAGS) $${flags}" \
				CXXFLAGS="$(CXXFLAGS) $${flags}" \
				LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
				LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
				LDFLAGS="$(LDFLAGS) $${flags}" \
				MULTIFLAGS="$${flags}" \
				DESTDIR="$${dir}" \
				INSTALL="$(INSTALL)" \
				INSTALL_DATA="$(INSTALL_DATA)" \
				INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \
				INSTALL_SCRIPT="$(INSTALL_SCRIPT)" \
				$(DO);  \
	    fi; \
	  done; \

