# Regression testing Makefile for Pic Port of SDCC
#
# GPL'd
#
# T. Scott Dattalo scott@dattalo.com
#
# This makefile provides a means by which the output
# of the SDCC Compiler can be tested. This version
# is unique to the PIC (as in Microchip PIC) port.
# As such it requires the following software:
#
#  gpasm version 0.8.10 (or greater)
#  gpsim version 0.20.7 (or greater)
#
# Usage:
#
# make
#  - without any options the whole regression test is
#    performed. The results are placed into a log file
#    (defined by $LOGFILE).
#
# make asm
#  - Creates .asm files by compiling the .c files
#
# make cod
#  - Creates .cod files by assembling the .asm files
#    (.cod files are symbolic files compatible with
#    MPASM, Microchip's assembler)
#
# make stc
#  - Creates .stc files which are script files for
#    gpsim.
#
# make clean
#  - removes all of the intermediate files created
#
# make cleancod
# make cleanasm
# make cleanstc
#  - removes either the .stc, .asm, or .cod files


CC = ../../bin/sdcc

.SUFFIXES: .asm .c .cod .stc

# Results of the test are placed here:
LOGFILE = test.log

# Script file for creating gpsim scripts
CREATESTC = create_stc

# Script file for invoking gpsim
SIMULATE = simulate

# List the C files to be test here:
SRC = b.c \
	add.c \
	bool1.c \
	call1.c \
	compare.c \
	compare2.c \
	compare3.c \
	for.c \
	struct1.c \
	sub.c \
	while.c

COD := $(patsubst %.c, %.cod, $(SRC))
ASM := $(patsubst %.c, %.asm, $(SRC))
STC := $(patsubst %.c, %.stc, $(SRC))

all:	test


# The asm files are generated by sdcc
.c.asm:
	$(CC) -mpic14 -c $*.c

# The .cod files are generated by gpasm
# these get loaded by gpsim.
.asm.cod:
	gpasm -c $*.asm

# The .stc files are script files for gpsim
.cod.stc:
	./$(CREATESTC) $*.cod $*.stc

# this will also make .stc files
#%.stc : %.cod
#	./create_stc $^ $@

# now for the dependencies

cod : $(COD)


asm : $(ASM)

stc : $(STC)

test:	$(STC)
	if [ -n "$(STC)" ]; then \
	stcfiles="$(STC)" ; \
	for f in $$stcfiles ; do \
	  ./$(SIMULATE) $$f $(LOGFILE); \
	done ; \
	fi
	echo "Done - Results are in $(LOGFILE)"

cleancod:
	files="$(COD)" ; \
	for f in $$files ; do \
	  if [ -f $$f ]; then rm $$f; fi \
	done ; \

cleanasm:
	files="$(ASM)" ; \
	for f in $$files ; do \
	  if [ -f $$f ]; then rm $$f; fi \
	done ; \

cleanstc:
	files="$(STC)" ; \
	for f in $$files ; do \
	  if [ -f $$f ]; then rm $$f; fi \
	done ; \

clean: cleancod cleanasm cleanstc
	if [ -f "$(LOGFILE)" ]; then rm $(LOGFILE); fi
