
ROOT_PATH = ..

#
#  ֥ȥե̾γĥҤ
#
OBJEXT = exe

#
#  ֥ȥե̾
#
OBJNAME = rommon
ifdef OBJEXT
	OBJFILE = $(OBJNAME).$(OBJEXT)
else
	OBJFILE = $(OBJNAME)
endif

CC  =	riscv-none-embed-gcc
CXX	=	riscv-none-embed-g++
AR  =	riscv-none-embed-ar
NM  =	riscv-none-embed-nm
OBJCOPY = riscv-none-embed-objcopy
OBJDUMP = riscv-none-embed-objdump


COPTS   = -march=rv32imac -mabi=ilp32 -mcmodel=medany -nostdlib -O2 -g -Wall
ifeq ($(BOARDNO),)
BOARDNO = 0
endif
CDEFS   = -DBOARDNO=$(BOARDNO) -DDEFAULT_CLOCK

LDSCRIPT = hifive1_rom$(BOARDNO).ld

INCLUDES = -I.

TARGET_DIR = .
UTASK_DIR = $(ROOT_PATH)
vpath %.c $(UTASK_DIR):$(UTASK_DIR)/stdio
vpath %.S $(UTASK_DIR)

COBJS = monmain.o monitor.o common.o serial.o siosifive.o \
		init.o stddev.o printf.o sys_printf.o

AOBJS = start.o entry.o

INCLUDES := -I$(UTASK_DIR)/stdio -I$(UTASK_DIR) $(INCLUDES)
CFLAGS = $(COPTS) $(CDEFS) $(INCLUDES)
LDFLAGS := -nostdlib -nostartfiles $(LDFLAGS)

ifdef LDSCRIPT
    LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT)
endif

all:	$(OBJFILE)

$(OBJFILE):	$(COBJS) $(AOBJS)
	$(CC)	$(CFLAGS) $(LDFLAGS) -o $(OBJFILE) \
			$(AOBJS) $(COBJS) -lc -lgcc
	$(NM)	$(OBJFILE) > $(OBJNAME).syms
	$(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
	$(OBJCOPY) -O ihex -S $(OBJFILE) $(OBJNAME).hex
	$(OBJDUMP) -t -h $(OBJFILE) > $(OBJNAME).map
	$(OBJDUMP) --disassemble $(OBJFILE) > $(OBJNAME).lst


$(COBJS): %.o: %.c
	$(CC) -c $(CFLAGS) $<

$(AOBJS): %.o: %.S
	$(CC) -c $(CFLAGS) $<

# rules

monmain.o	: $(UTASK_DIR)/monmain.c \
		$(TARGET_DIR)/sys_defs.h $(UTASK_DIR)/comdefs.h $(UTASK_DIR)/mondefs.h $(UTASK_DIR)/serial.h

monitor.o	: $(UTASK_DIR)/monitor.c \
		$(TARGET_DIR)/sys_defs.h $(UTASK_DIR)/comdefs.h $(UTASK_DIR)/mondefs.h $(UTASK_DIR)/serial.h

common.o	: $(UTASK_DIR)/common.c \
		$(TARGET_DIR)/sys_defs.h $(UTASK_DIR)/comdefs.h $(UTASK_DIR)/serial.h

serial.o	: $(UTASK_DIR)/serial.c \
		$(TARGET_DIR)/sys_defs.h $(UTASK_DIR)/comdefs.h $(UTASK_DIR)/serial.h

clean:
	rm -f *.o
	rm -f $(OBJFILE) *.syms $(OBJNAME).srec $(OBJNAME).map *.lst


