#!/usr/bin/make

MAKEFILE_INC = $(wildcard ./Makefile.inc)
ifneq ($(strip ${MAKEFILE_INC}), )
  include ${MAKEFILE_INC}
else
  MAKEFILE_INC = $(wildcard ../Makefile.inc)
  ifneq ($(strip ${MAKEFILE_INC}), )
    include ${MAKEFILE_INC}
  endif
endif

PROGNAME      = protA

##MPUTYPE       = 2144
MPUTYPE       = 2128

SCI_SPEED= 38400
## FREQCLOCK= 20000000
FREQCLOCK= 18432000


# _SCI_SPEED_ꤹȥץ񤭹߻̿®٤Ǥ
## ADDDEF   = -D_SCI_SPEED_=${SCI_SPEED} -D_CPUCLOCK_=${FREQCLOCK}
# _SCI_SPEED_ꤷʤϥ֡ȥץɤ߹߻̿®٤Ȥʤ
ADDDEF   = -D_CPUCLOCK_=${FREQCLOCK}
DEFS     = -D_H8S_MPU_=${MPUTYPE} ${ADDDEF}

LDSCRIPT = h8300self.xc.boot_nonA
LDOPT = -Wl,-Map,$*.map,-T${LDSCRIPT},-relax

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

INC = -I. -I${INCDIR}
OPTIMIZE = -g -Wall -O2
OPTBINCONV = -g -S -Osrec
##OPTBINCONV+= -j '.vector' -j '.sysvec' -j '.dtcvec'
##OPTBINCONV+= --set-section-flags .vector=contents,load,readonly,alloc
##OPTBINCONV+= --set-section-flags .sysvec=contents,load,readonly,alloc
##OPTBINCONV+= --set-section-flags .dtcvec=contents,load,readonly,alloc
##OPTBINCONV+= -j '.text' -j '.rodata' -j '.data' -j '.exception'
OPTBINCONV+= --verbose

PREFIX   = h8300-elf
CC       = ${PREFIX}-gcc
AS       = ${PREFIX}-gcc
LD       = ${PREFIX}-gcc
OBJCOPY  = ${PREFIX}-objcopy
OBJDUMP  = ${PREFIX}-objdump

MAKEFILE=Makefile
MSPEC = -ms -mint32 -mrelax

#ASFLAGS        = -Wa,-adhlns=$(<:.S=.lst),-gstabs # assembler listings
ALL_ASFLAGS    = ${MSPEC} ${ASFLAGS}  ${IO_TYPE} ${DEFS} ${INC}	# -x assembler-with-cpp
CFLAGS         = ${MSPEC} ${OPTIMIZE} ${IO_TYPE} ${DEFS} ${INC}
LDFLAGS        = ${LDOPT}  ${MSPEC} -nostartfiles # -nostdlib # -lgcc -lc # -Wl,--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:      .hex .mot .elf .o .c .s .S .h .inc

.PHONY: all
all: ${BINDIR}/${PROGNAME}_${MPUTYPE}.mot list

##write: ${BINDIR}/${PROGNAME}_${MPUTYPE}.mot
##	$(H8SWRT) $(WRTFLAGS) $<

list: ${PROGNAME}_${MPUTYPE}.list

%.list: ${BINDIR}/%.elf
	${OBJDUMP} -h -S $< > $@

${BINDIR}/%.mot: ${BINDIR}/%.elf
	$(OBJCOPY) ${OPTBINCONV} $< $@

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

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

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

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

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

