export SHELLOPTS := igncr

CPU   := -march=armv7-r -marm -mlittle-endian -mfloat-abi=soft
AOPT  := -g -Wall $(CPU) -Wa,--gdwarf2 -xassembler-with-cpp -c
COPT  := -std=c99 -g -O0 -fno-jump-tables -ffunction-sections -fdata-sections -Wall $(CPU) -c
LOPT  := -g -Wall $(CPU) -Wl,--nmagic -nodefaultlibs -nostartfiles -Wl,--gc-sections -Wl,--entry=_start
LIBS  := -lgcc -lc
TMP   := ./tmp
VPATH := . ..

CCGRP := arm-none-eabi-
NAME  := carV2

all: $(NAME).elf $(NAME)_flash.elf gen-eca

$(TMP):
	mkdir $(TMP)

$(TMP)/%.o: %.c $(MAKEFILE_LIST)
	$(CCGRP)gcc $(COPT) -o $@ $<

$(TMP)/%.o: %.cpp $(MAKEFILE_LIST)
	$(CCGRP)g++ $(COPT) -o $@ $<

$(TMP)/%.o: %.s  $(MAKEFILE_LIST)
	$(CCGRP)gcc $(AOPT) -o $@ $<

$(TMP)/crt0.flash.o: crt0.s  $(MAKEFILE_LIST)
	$(CCGRP)gcc $(AOPT) -D FLASHSTART -o $@ $<


$(TMP)/sram.ld:  cortex-r5.lds $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAMSTART=0x00000000 -D RAMSIZE=32K

$(TMP)/flash.ld: cortex-r5.lds $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D FLASHSTART -D RAMSTART=0x00000000 -D RAMSIZE=32K -D FLASHSIZE=128K


$(NAME).elf:           $(addprefix $(TMP)/,sram.ld crt0.o main.o $(NAME).o)
	$(CCGRP)gcc $(LOPT) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group

$(NAME)_flash.elf:     $(addprefix $(TMP)/,flash.ld crt0.flash.o main.o $(NAME).o)
	$(CCGRP)gcc $(LOPT) -o $@ -T $^ -Wl,--start-group $(LIBS) -Wl,--end-group


# Create files for extended code analysis using t32cast
ECA     := carV2.c
ECAOPT  := -m32

.PHONY: gen-eca
gen-eca: $(ECA:.c=.eca)

.INTERMEDIATE: %.i
%.eca: $(addprefix  $(TMP)/,carV2.i) | $(TMP)
	t32cast $(ECAOPT) -o $(addprefix ../,$@) $^

$(TMP)/%.i : %.c | $(TMP)
	$(CCGRP)gcc -E -o $@ $<

$(TMP)/%.i : %.cpp | $(TMP)
	$(CCGRP)g++ -E -o $@ $<

clean:
	-rm -fvr $(TMP)
	-rm -fv *.elf
	-rm -fv ../*.eca

