# ------------------------------------------------------------------------
# Makefile: module 'sync' of the SpecC system
#	    (SpecC synchronization library)
# ------------------------------------------------------------------------
#
# Modifications: (most recent first)
#
# PC 06/21/04	SCCPURE was wrongly pointing to scc_pure, changed it to scrc_pure
# RD 04/25/03	added typed_queue_test5, c_array_queue (and new dependencies)
# RD 10/03/02	separated 'clean' target into 'clean' and 'distclean'
# RD 06/24/02	fixed the 'clean' target
# RD 06/21/02	added symbolic link '.purify' to DIST
# RD 02/19/02	set LD_LIBRARY_PATH so that system builds without installation
# RD 02/18/02	added files for [typed_[double_]]handshake
# RD 02/15/02	fixed setting for SCCPURE
# RD 02/14/02	added files for queue and typed_queue
# RD 02/12/02	initial version (critical_section, mutex, semaphore,
#		barrier, token)
# ------------------------------------------------------------------------

# --- macros

include ../../Makefile.macros

MODULE	=	sync
BINARY	=
BINFILE	=
PREFIX	=
LIBRARY	=
LIBOBJ	=
OBJECTS =
LIBDEP	=
LIBS	=
INCLUDE	=
EXAMPLE	=	critical_section_test		\
		mutex_test			\
		semaphore_test1			\
		semaphore_test2			\
		semaphore_test3			\
		semaphore_test4			\
		semaphore_test5			\
		barrier_test1			\
		barrier_test2			\
		barrier_test3			\
		barrier_test4			\
		barrier_test5			\
		token_test1			\
		token_test2			\
		token_test3			\
		token_test4			\
		queue_test1			\
		queue_test2			\
		queue_test3			\
		queue_test4			\
		typed_queue_test1		\
		typed_queue_test2		\
		typed_queue_test3		\
		typed_queue_test4		\
		typed_queue_test5		\
		handshake_test1			\
		handshake_test2			\
		double_handshake_test		\
		typed_double_handshake_test
DIST	=	.purify				\
		Makefile			\
		i_critical_section.sc		\
		i_semaphore.sc			\
		i_barrier.sc			\
		i_producer.sc			\
		i_consumer.sc			\
		i_token.sc			\
		i_sender.sc			\
		i_receiver.sc			\
		i_tranceiver.sc			\
		i_typed_sender.sh		\
		i_typed_receiver.sh		\
		i_typed_tranceiver.sh		\
		i_send.sc			\
		i_receive.sc			\
		c_critical_section.sc		\
		c_mutex.sc			\
		c_semaphore.sc			\
		c_barrier.sc			\
		c_token.sc			\
		c_queue.sc			\
		c_typed_queue.sh		\
		c_handshake.sc			\
		c_double_handshake.sc		\
		c_typed_double_handshake.sh	\
		critical_section_test.sc	\
		mutex_test.sc			\
		semaphore_test.sc		\
		semaphore_test1.sc		\
		semaphore_test2.sc		\
		semaphore_test3.sc		\
		semaphore_test4.sc		\
		semaphore_test5.sc		\
		barrier_test.sc			\
		barrier_test1.sc		\
		barrier_test2.sc		\
		barrier_test3.sc		\
		barrier_test4.sc		\
		barrier_test5.sc		\
		token_test1.sc			\
		token_test2.sc			\
		token_test3.sc			\
		token_test4.sc			\
		queue_test1.sc			\
		queue_test2.sc			\
		queue_test3.sc			\
		queue_test4.sc			\
		typed_queue_test1.sc		\
		typed_queue_test2.sc		\
		typed_queue_test3.sc		\
		typed_queue_test4.sc		\
		typed_queue_test5.sc		\
		handshake_test1.sc		\
		handshake_test2.sc		\
		double_handshake_test.sc	\
		typed_double_handshake_test.sc	\
		c_int_queue.sc			\
		c_bit64_queue.sc		\
		c_packet_queue.sc		\
		c_array_queue.sc		\
		c_packet_double_handshake.sc
ORIG	=	Makefile			\
		i_critical_section.sc		\
		i_semaphore.sc			\
		i_barrier.sc			\
		i_producer.sc			\
		i_consumer.sc			\
		i_token.sc			\
		i_sender.sc			\
		i_receiver.sc			\
		i_tranceiver.sc			\
		i_typed_sender.sh		\
		i_typed_receiver.sh		\
		i_typed_tranceiver.sh		\
		i_send.sc			\
		i_receive.sc			\
		c_critical_section.sc		\
		c_mutex.sc			\
		c_semaphore.sc			\
		c_barrier.sc			\
		c_token.sc			\
		c_queue.sc			\
		c_typed_queue.sh		\
		c_handshake.sc			\
		c_double_handshake.sc		\
		c_typed_double_handshake.sh	\
		critical_section_test.sc	\
		mutex_test.sc			\
		semaphore_test.sc		\
		semaphore_test1.sc		\
		semaphore_test2.sc		\
		semaphore_test3.sc		\
		semaphore_test4.sc		\
		semaphore_test5.sc		\
		barrier_test.sc			\
		barrier_test1.sc		\
		barrier_test2.sc		\
		barrier_test3.sc		\
		barrier_test4.sc		\
		barrier_test5.sc		\
		token_test1.sc			\
		token_test2.sc			\
		token_test3.sc			\
		token_test4.sc			\
		queue_test1.sc			\
		queue_test2.sc			\
		queue_test3.sc			\
		queue_test4.sc			\
		typed_queue_test1.sc		\
		typed_queue_test2.sc		\
		typed_queue_test3.sc		\
		typed_queue_test4.sc		\
		typed_queue_test5.sc		\
		handshake_test1.sc		\
		handshake_test2.sc		\
		double_handshake_test.sc	\
		typed_double_handshake_test.sc	\
		c_int_queue.sc			\
		c_bit64_queue.sc		\
		c_packet_queue.sc		\
		c_array_queue.sc		\
		c_packet_double_handshake.sc

LDPATH	= LD_LIBRARY_PATH=$(SPECC_LIB)$${LD_LIBRARY_PATH:+:}$${LD_LIBRARY_PATH}
SCC	=	SPECC=$(SPECC) $(LDPATH) $(SPECC_BIN)/scrc
SCCOPT	=	-vv -ww -g -I. -L.
SCCPURE	=	SPECC=$(SPECC) $(LDPATH) $(SPECC_SRC)/Compiler/scrc_pure
SCCOPTP	=	-xld '$(PURIFY) g++ %i -o %o %l'


# --- compilation rules

all:


$(SPECC_INC)/i_typed_sender.sh:		i_typed_sender.sh
	$(CP) i_typed_sender.sh $(SPECC_INC)

$(SPECC_INC)/i_typed_receiver.sh:	i_typed_receiver.sh
	$(CP) i_typed_receiver.sh $(SPECC_INC)

$(SPECC_INC)/i_typed_tranceiver.sh:	i_typed_tranceiver.sh
	$(CP) i_typed_tranceiver.sh $(SPECC_INC)

$(SPECC_INC)/c_typed_queue.sh:		c_typed_queue.sh
	$(CP) c_typed_queue.sh $(SPECC_INC)

$(SPECC_INC)/c_typed_double_handshake.sh:	c_typed_double_handshake.sh
	$(CP) c_typed_double_handshake.sh $(SPECC_INC)


# --- service rules

clean:
	-$(RM) *.bak *.BAK *~
	-$(RM) core
	-$(RM) *.pure* *_pure* .pure
	-$(RM) *.si *.cc *.h *.o
	-$(RM) *_dbg.sc

distclean:	clean
	-$(RM) $(EXAMPLE)

dist:
	for file in $(DIST); do echo $(DISTPREFIX)/$$file >>$(DISTLIST); done

orig:
	for file in $(ORIG); do echo $(ORIGPREFIX)/$$file >>$(ORIGLIST); done

test:
	set -e;							\
	for ex in $(EXAMPLE); do				\
		$(SCC) $$ex -sc2out $(SCCOPT);			\
		./$$ex;						\
	done

pure:

puretest:
	set -e;							\
	for ex in $(EXAMPLE); do				\
		$(SCCPURE) $$ex -sc2out $(SCCOPT) $(SCCOPTP);	\
		./$$ex;						\
	done


# --- EOF Makefile ---
