PIC30=		/opt/microchip/mplabc30/v3.30c
BIN=		$(PIC30)/bin

PROJECT=	demo
B_DIR=		/usr/local/backups/mc_demo
B_FILE=		$(PROJECT)_src-`date +%Y-%m-%d-%H-%M`.tar.gz

CC=		$(BIN)/pic30-gcc
AS=		$(BIN)/pic30-as
LD=		$(BIN)/pic30-ld
BIN2HEX=	$(BIN)/pic30-bin2hex
OBJDUMP=	$(BIN)/pic30-objdump

TARGET=		33FJ64MC804

INC=		$(PIC30)/support/dsPIC33F
LIBS=		-L$(PIC30)/lib/

GLD=		$(PIC30)/support/dsPIC33F/gld/p$(TARGET).gld

OBJ_DIR=	./obj
LST_DIR=	./lst

SRC=		demo.c				\
		pwm.c				\
		qei.c				\
		queue.c				\
		tmr.c				\
		uart.c				\
		demo.h


SRC_C=		$(filter %.c, $(SRC))
SRC_S=		$(filter %.s, $(SRC))
SRC_H=		$(filter %.h, $(SRC))
SRC_I=		$(filter %.i, $(SRC))

OBJ_C=		$(addprefix $(OBJ_DIR)/, $(SRC_C:.c=.o))
OBJ_S=		$(addprefix $(OBJ_DIR)/, $(SRC_S:.s=.o))
OBJS=		$(OBJ_S) $(OBJ_C)

.PHONY:		info clean

CFLAGS=		-omf=elf -mcpu=$(TARGET) -Wall -ffreestanding -msmart-io=0


%.o : ../%.c
		$(CC) $(CFLAGS) -c -I $(INC)/h -o $@ $(*F).c

%.o : ../%.s
		$(AS) -p$(TARGET) -I$(INC)/inc -o $@ $(*F).s -ail=$(LST_DIR)/$(*F).lst

all:		dirs demo.hex demo.dis

demo.hex:	demo.elf
		$(BIN2HEX) -omf=elf demo.elf

demo.dis:	demo.elf
		$(OBJDUMP) -omf=elf -d demo.elf > demo.dis

demo.elf:	$(OBJS) demo.h
		$(LD)						\
		    -omf=elf					\
		    -p$(TARGET)					\
		    -o demo.elf					\
		    $(OBJS)					\
		    $(LIBS)					\
		    -l pic30 -lc -lm				\
		    -T $(GLD)					\
		    -Map=demo.map

$(OBJ_C):	$(SRC_H)

pk2:		all
		pk2cmd -PdsPIC$(TARGET) -I -F demo.hex -M -R

OPTS=		-p icd2						\
		--quiet						\
		-t usb						\
		--target-self-powered true			\
		--firmware-dir /usr/local/MicroChip/mplab	\
		-d $(TARGET)

prog:		all
		@piklab-prog $(OPTS) -c program -f phm.hex
		@piklab-prog $(OPTS) -c run

info:
		@echo "OBJS  =" $(OBJS)
		@echo "OBJ_S =" $(OBJ_S)
		@echo "OBJ_C =" $(OBJ_C)
		@echo "SRC_C =" $(SRC_C)
		@echo "SRC_H =" $(SRC_H)
		@echo "SRC_S =" $(SRC_S)
		@echo "SRC_I =" $(SRC_I)

dirs:
		@mkdir -p $(OBJ_DIR)
		@mkdir -p $(LST_DIR)

clean:
		rm -rf $(OBJ_DIR) $(LST_DIR)
		rm -f  *.o *.elf *.dis *.map *.hex *~

backup:
		mkdir -p $(B_DIR)
		-tar -czf $(B_DIR)/$(B_FILE)				\
		    *.c							\
		    *.h							\
		    Makefile
