# 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 \ rotate1.c \ rotate2.c \ rotate3.c \ struct1.c \ sub.c \ switch1.c \ while.c \ xor.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