#!/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      = NMEATSIP
##MPUTYPE       = 2144
MPUTYPE       = 2128

LDSCRIPT = h8300s-SRAM_${MPUTYPE}.xc

ifeq (${MPUTYPE},2144)
    ADDDEF    = -DSCIch=1 -D_SCI_SPEED_=115200 -D_CPUCLOCK_=29491200
else
##    ADDDEF    = -DSCIch=0 -D_SCI_SPEED_=115200 -D_CPUCLOCK_=18432000
##    ADDDEF    = -DSCIch=0 -D_SCI_SPEED_=38400 -D_CPUCLOCK_=19660000
    ADDDEF    = -DSCIch=0 -D_SCI_SPEED_=38400 -D_CPUCLOCK_=20000000
endif
# _EXT_MON_ϳХԤäROMߥ&եå饤椹
# ǽä˥ե饰
# 2144ξ2128Υ˥Сܡɤξ_EXT_MON_


DEFS     = -D_H8S_MPU_=${MPUTYPE} -D_USERAPP_=1 ${ADDDEF}

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 $< > $@
	awk '((($$1<=9)&&($$1>=0))&&($$2~/\.text/||$$2~/\.rodata/||$$2~/\.data/||$$2~/\.bss/||$$2~/\.eeprom/||$$2~/\.exception/||$$2~/\.sysdata/||$$2~/vec/)){print $$0}' $@

${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

