include ../../../../config.mk

TARGET		= riscv
TARGET-ARCH	= riscv32-elf

PROGRAM		= double-multiply
INIT		= init

OPTFLAGS	= -g -O0
INCLUDES	= -I$(PREFIX)/include
CFLAGS		= $(TARGET-ARCH-FLAGS) -Wall
ASFLAGS		=
LDFLAGS		= -Ttext $(LOADADDR) -L$(TOOLSLIB)/$(TARGET)/ -Map $(PROGRAM).map
LOADADDR	= 0x08004000
SF		= $(TOOLSBIN)/sf

SRCS	=\
	$(INIT).S\
	$(PROGRAM).c\

OBJS	=\
	$(INIT).o\
	$(PROGRAM).o\


build:	$(PROGRAM) $(PROGRAM).sr Makefile

$(INIT).o: $(INIT).S Makefile
	$(UNCERTAIN_AS) $(ASFLAGS) init.S -o $@

$(PROGRAM): $(OBJS)
	$(UNCERTAIN_LD) $(LDFLAGS) $(OBJS) -o $@ -lm -luncertain -lprintf -lc -lgloss -lgcc

$(PROGRAM).sr: $(PROGRAM)
	$(UNCERTAIN_OBJCOPY) -O srec $(PROGRAM) $@

$(PROGRAM).s: $(SRCS) Makefile
	$(CC) $(CFLAGS) $(OPTFLAGS) $(INCLUDES) -S -fverbose-asm -o $(PROGRAM).s -c $(PROGRAM).c

%.o : %.s $(HEADERS) Makefile
	$(UNCERTAIN_AS) $(ASFLAGS) -g -o $@ -c $<

run-all: run run-test run-exact run-evaluation run-montecarlo

run: build
	$(SF) run.m

run-test: build
	$(SF) run-test.m

run-montecarlo: build
	$(SF) run-montecarlo.m

run-exact: build
	$(SF) run-exact.m

run-evaluation: build
	$(SF) run-evaluation.m

disassemble:
	$(UNCERTAIN_OBJDUMP) -dSl $(PROGRAM) > $(PROGRAM).uncert.S

host:
	gcc -Wall -g -DLINUX $(PROGRAM).c -o $(PROGRAM).$(OSTYPE)

clean:
	$(RM) *.o *.$(OSTYPE) *.s *.sr *.map init.i simlog.node* sunflower.out $(PROGRAM)

#
#	Disable direct compilation of .c and .S files
#
%.o : %.c
%.o : %.S
