#!/usr/bin/make

include ../Makefile.inc

PROGNAME      = AVR_RTC

MCU_TARGET = attiny2313

## IO_TYPE    = -D__AVR_ATtiny2313__
## IO_TYPE    = -D__AVR_AT90S2313__

DEFS   = -DF_CPU=4000000 -DRELEASE=1

SRCDIR = src
OBJDIR = obj
BINDIR = bin
INCDIR = inc

INC = -I. -I${INCDIR}
OPTIMIZE = -g -Wall -O2

AVRWRT         = hidspx
WRTFLAGS       = -ph:SN04 -d8
WRTFLAGS      += -fL0xe2 -fH0xdb -fX0xff
# Fuse high byte:
# 0xdd = 1 1 0 1   1 0 1 1
#        ^ ^ ^ ^   \-+-/ ^---- RSTDIS(1:PA2 pin is RESET#)
#        | | | |     +-------- BODLVL(111:disable 100:4.3V 101:2.7V 110:1.8V)
#        | | | +-------------- WDTON (1:WD is  controlled by WDTCSR)
#        | | +---------------- SPIEN (0:SPI ENABLE)
#        | +------------------ EESAVE(1:INHIBIT PROTECTED EEPROM)
#        +-------------------- DWEN  (1:INHIBIT DEBUG WIRE)
# Fuse low byte:
# 0xe2 = 1 1 1 0   0 0 1 0
#        ^ ^ \ /   \--+--/
#        | |  |       +------- CKSEL 3..0 (0010:int4M 0100:int8M 1111:extXtal>8M)
#        | |  +--------------- SUT 1..0 (slow rated power up)
#        | +------------------ CKOUT  (1:INHIBIT CKOUT)
#        +-------------------- CKDIV8 (1:1/1)

PREFIX   = avr
CC       = ${PREFIX}-gcc
AS       = ${PREFIX}-gcc
LD       = ${PREFIX}-ld
OBJCOPY  = ${PREFIX}-objcopy
OBJDUMP  = ${PREFIX}-objdump

MAKEFILE=Makefile

##LDSCRIPT = -T./H8S_kernel.ld
MSPEC = -mtiny-stack -msize

#ASFLAGS        = -Wa,-adhlns=$(<:.S=.lst),-gstabs # assembler listings
ALL_ASFLAGS    = -mmcu=${MCU_TARGET} ${MSPEC} ${ASFLAGS}  ${IO_TYPE} ${DEFS} ${INC}	# -x assembler-with-cpp
CFLAGS         = -mmcu=${MCU_TARGET} ${MSPEC} ${OPTIMIZE} ${IO_TYPE} ${DEFS} ${INC}
LDFLAGS        = -Wl,-Map,$*.map,${LDSCRIPT} -nostartfiles -nostdlib # -Wl,--verbose
LDFLAGS        = -Map $*.map ${LDSCRIPT} -nostartfiles -nostdlib # --verbose

LIBS = 
SRCS := $(wildcard src/*.[cS])
OBJS := $(SRCS:src/%=obj/%)
OBJS := $(OBJS:%.S=%.o)
OBJS := $(OBJS:%.c=%.o)
AINC := $(wildcard inc/*.inc)
CINC := $(wildcard inc/*.h)

.SUFFIXES:      .mot .elf .o .c .s .S .h .inc

.PHONY: all
all: list ${BINDIR}/${PROGNAME}.hex ${BINDIR}/${PROGNAME}.eep

write: ${BINDIR}/${PROGNAME}.hex ${BINDIR}/${PROGNAME}.eep
	$(AVRWRT) $(WRTFLAGS) ${BINDIR}/${PROGNAME}.hex ${BINDIR}/${PROGNAME}.eep

list: ${PROGNAME}.list

%.list: ${BINDIR}/%.elf
	${OBJDUMP} -h -S $< > $@
	awk '((($$1<=9)&&($$1>=0))&&($$2~/\.text/||$$2~/\.data/||$$2~/\.bss/||$$2~/\.eeprom/||$$0~/^Idx Name/)){print $$0}' $@

${BINDIR}/%.hex: ${BINDIR}/%.elf
	$(OBJCOPY) -j .text -j .data -O ihex $< $@

${BINDIR}/%.eep: ${BINDIR}/%.elf
	$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $< $@

${BINDIR}/%.elf: ${OBJS}
	$(LD) ${LDFLAGS} -o $@ $^ ${LIBS}

.PRECIOUS: ${BINDIR}/%.elf
.PRECIOUS: ${OBJS}

${OBJDIR}/%.o: ${SRCDIR}/%.c ${CINC} ${MAKEFILE}
	$(CC) ${CFLAGS} -c -o  $@ $<

${OBJDIR}/%.o: ${SRCDIR}/%.S ${AINC} ${MAKEFILE}
	$(AS) ${ALL_ASFLAGS} -c -o  $@ $<

.PHONY: clean
clean:
	rm -f ${BINDIR}/*.elf ${BINDIR}/*.hex ${BINDIR}/*.eep ${OBJDIR}/*.o *~ *.map *.list

