#
# File:         Makefile
# Date:         09.12.2004
# Author:       Topi Pohjolainen
# Description:  Makefile for building and analysing models in Promela 
#               format using spin
#
# Preprocess the model using proper ANSI C preprocessor
# - support for standard preprocessing directives
#
ifeq ($(WORKERS),)
    WORKERS:=3
endif

#
# Enable trace
#
# CPPFLAGS := -DMAX_NUM_WORKERS=$(WORKERS) -w -DMUTEX_TRACE
#
CPPFLAGS  := -DMAX_NUM_WORKERS=$(WORKERS)
SPIN      := spin
CPP       := cpp $(CPPFLAGS)
#CFLAGS    := -O2

SOURCES := \
    main.spn              \
    common.spn            \
    lock.spn              \
    shutdownscheduler.spn \
    controller.spn        \
    startupscheduler.spn  \
    safety.spn            \
    worker.spn

SOURCES += worker_content_selection.spn

all: model.spn
	$(SPIN) -a $<
	gcc -DSAFETY -DSC $(CFLAGS) pan.c -o pan

fair: model_with_fairness.spn
	$(SPIN) -a $<
	gcc $(CFLAGS) pan.c -o pan

progress: model_with_progress.spn
	$(SPIN) -a $<
	gcc $(CFLAGS) pan.c -o pan

model_with_fairness.spn: $(SOURCES)
	$(CPP) -DMONITOR_SELECTIONS -P $< > $@
	./liveness.sh $(WORKERS) 1 >> $@

model_with_progress.spn: $(SOURCES)
	$(CPP) -DMONITOR_SELECTIONS -P $< > $@
	./liveness.sh $(WORKERS) 0 >> $@

model.spn: $(SOURCES) generated_safety.spn
	$(CPP) -DSAFETY -P $< > $@

worker_content_selection.spn:
	./content_branches_generate.sh $(WORKERS) > $@

#
# Controller = 1, Shutdown = 2, Startup = 4, First worker = 4
#
generated_safety.spn:
	./safety.sh $(WORKERS) 4 > $@

clean:
	rm -f pan.* pan *.trail model.spn model_with_*.spn \
            worker_content_selection.spn                   \
            generated_safety.spn

# EOF
