export SHELLOPTS := igncr

CPU     := -mcpu=e500mc -mbig-endian -msoft-float
AOPT    := -g -Wall $(CPU) -Wa,--gdwarf2 -mregnames -xassembler-with-cpp -c
COPT    := -std=c99 -g -O0 -fno-jump-tables -ffunction-sections -fdata-sections -Wall $(CPU) -mno-sdata -c
LOPT    := -g -Wall $(CPU) -Wl,--nmagic -nodefaultlibs -nostartfiles --gc-sections
DEFINES := QORIQ
LIBS    := -lgcc -lc
TMP     := ./tmp
VPATH   := . ..

CCGRP := powerpc-eabi-
NAME  := coverage

.PHONY: all

all: $(NAME).elf $(NAME)_flash.elf $(NAME).eca $(NAME).c.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) $(addprefix -D,$(DEFINES)) -o $@ $<

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


$(TMP)/sram.ld:  mpc55xx.lds $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAM_SIZE=16K

$(TMP)/flash.ld: mpc55xx.lds $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAM_SIZE=16K -D ROM_SIZE=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
ECAOPT  := -m32

%.eca: %.c | $(TMP)
	$(ECAGRP)t32cast $(ECAOPT) -o $(addprefix ../,$@) $^

%.c.eca: %.c | $(TMP)
	$(ECAGRP)t32cast $(ECAOPT) -o $(addprefix ../,$@) $^

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

