#-------------------------------
# Common
#-------------------------------
SRC = ../../../src
SRC_LIB = $(SRC)/cLib
SRC_COM = $(SRC)/common
SRC_OSA = $(SRC)/osabstraction
SRC_COL = $(SRC)/collection
SRC_MEM = $(SRC)/memory
SRC_DEV = $(SRC)/device
SRC_EVT = $(SRC)/eventdispatcher
SRC_STR = $(SRC)/string
SRC_UTY = $(SRC)/utility

#DEFINES = -D_GNU_SOURCE -DPAFEE_STATISTICS_ENABLE -DPAFEE_UNITTEST -DPAFEE_DEBUG
DEFINES = -D_GNU_SOURCE -DPAFEE_EXCEPTION -DPAFEE_STATISTICS_ENABLE -DPAFEE_OS_LINUX
INCLUDES = -I$(SRC_COM) -I$(SRC_MEM) -I$(SRC_DEV) -I$(SRC_OSA) -I$(SRC_LIB) -I$(SRC_UTY) -I$(SRC_EVT) -I$(SRC_COL) -I$(SRC_STR)


#-------------------------------
# for Cygwin build
#-------------------------------
CXX = g++
CFLAGS = $(INCLUDES) $(DEFINES) -Wall -O2
LDFLAGS = -lm -lpthread -lstdc++

#-------------------------------
# for ARM-EMP9 build
#-------------------------------
#CXX = arm-linux-uclibc-g++
#INCLUDES+ = -I/opt/alpha_project/emp-arm9/linux/tools/include/directfb -I/home/terasaki/include
#CFLAGS =  $(INCLUDES) $(DEFINES) -Wall -O2
#LDFLAGS = -lpthread -L/opt/alpha_project/emp-arm9/linux/tools/usr/lib


#-------------------------------
# Target
#-------------------------------
PAFEE_OBJ_OSA = $(SRC_OSA)/PafeeMutex.o $(SRC_OSA)/PafeeSignal.o $(SRC_OSA)/PafeeTask.o
PAFEE_OBJ_DEV = $(SRC_DEV)/PafeeStdStreamOutput.o
PAFEE_OBJ_COL = $(SRC_COL)/PafeeList.o $(SRC_COL)/PafeeRingBuffer.o
PAFEE_OBJ_EVT = $(SRC_EVT)/PafeeQueuedListener.o $(SRC_EVT)/PafeeRingBufferedListener.o $(SRC_EVT)/PafeeEventDistributor.o

OBJ_OSA = PafeeMutex.o PafeeSignal.o PafeeTask.o
OBJ_DEV = PafeeStdStreamOutput.o
OBJ_COL = PafeeList.o PafeeRingBuffer.o
OBJ_EVT = PafeeQueuedListener.o PafeeRingBufferedListener.o PafeeEventDistributor.o



#-------------------------------
# Compile rules
#-------------------------------

# clear previous SUFFIXES
.SUFFIXES:

# set new SUFFIXES
.SUFFIXES: .o .cpp

$(PAFEE_OBJ_OSA): %.o: %.cpp
	$(CXX) $(CFLAGS) -c $<

$(PAFEE_OBJ_DEV): %.o: %.cpp
	$(CXX) $(CFLAGS) -c $<

$(PAFEE_OBJ_COL): %.o: %.cpp
	$(CXX) $(CFLAGS) -c $<

$(PAFEE_OBJ_EVT): %.o: %.cpp
	$(CXX) $(CFLAGS) -c $<


$(OBJ_OSA): $(PAFEE_OBJ_OSA)


$(OBJ_DEV): $(PAFEE_OBJ_DEV)


$(OBJ_COL): $(PAFEE_OBJ_COL)


$(OBJ_EVT): $(PAFEE_OBJ_EVT)


EventDistributorTest.out: $(OBJ_OSA) $(OBJ_DEV) $(OBJ_COL) $(OBJ_EVT) EventDistributorTest.cpp
	$(CXX) $(CFLAGS) $(LDFLAGS) -o eventdisributorTest.out  $^
	@echo Done,
	
QueuedListenerTest.out: $(OBJ_OSA) $(OBJ_DEV) $(OBJ_COL) $(OBJ_EVT) QueuedListenerTest.cpp
	$(CXX) $(CFLAGS) $(LDFLAGS) -o queuedlistenerTest.out  $^
	@echo Done,

RingBufferedListenerTest.out: $(OBJ_OSA) $(OBJ_DEV) $(OBJ_COL) $(OBJ_EVT) RingBufferedListenerTest.cpp
	$(CXX) $(CFLAGS) $(LDFLAGS) -o ringnbufferedlistenerTest.out  $^
	@echo Done,



#-------------------------------
# Test programs
#-------------------------------

eventdistributor: EventDistributorTest.out
	
queuedlistener: QueuedListenerTest.out

ringbufferedlistener: RingBufferedListenerTest.out

all: eventdistributor queuedlistener ringbufferedlistener

clean:
	rm -r -f *.o
	
