export SHELLOPTS := igncr
export PATH := /cygdrive/c/NXP/S32DS_Power_v2.1/S32DS/build_tools/powerpc-eabivle-4_9/bin:$(PATH)

CPU   := -mcpu=e200z0 -mvle -mbig-endian -D__PPC_VLE__
AOPT  := -g  -Wall $(CPU) -Wa,-ppc_asm_to_vle -Wa,--gdwarf2 -mregnames -xassembler-with-cpp -c
COPT  := -g3 -Wall $(CPU) -mno-sdata -fshort-enums -c
LOPT  := -g  -Wall $(CPU) -Wl,--nmagic -nodefaultlibs -nostartfiles
TMP   := ./tmp
VPATH := . ./src

CCGRP := powerpc-eabivle-
NAME  := sieve

all: $(NAME).elf $(NAME)_flash.elf $(NAME)_functrace.elf

$(TMP):
	mkdir $(TMP)

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

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

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

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

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

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

$(TMP)/t32%.o: t32%.c $(MAKEFILE_LIST) t32fdx.h
	$(CCGRP)gcc $(COPT) -DT32_FDX_TRACE_UNCOMPRESSED -DT32_FDX_TRACE_BUFSIZE=2048 -DFDX_USE_SYSTEMTIMER -o $@ $<


$(TMP)/sram.ld:  mpc55xx.ldx $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAM_SIZE=12K    # MPC5601D has only 12K of SRAM

$(TMP)/funct.ld: mpc55xx.ldx $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAM_SIZE=48K

$(TMP)/flash.ld: mpc55xx.ldx $(MAKEFILE_LIST) | $(TMP)
	$(CCGRP)cpp -P -o $@ $< -D RAM_SIZE=12K -D ROM_SIZE=128K


$(NAME).elf:           $(addprefix $(TMP)/,sram.ld crt0.o init_mpc5748g.o $(NAME).o)
	$(CCGRP)gcc $(LOPT) -o $@ -T $^

$(NAME)_flash.elf:     $(addprefix $(TMP)/,flash.ld crt0.flash.o $(NAME).o lib.o)
	$(CCGRP)gcc $(LOPT) -o $@ -T $^

$(NAME)_functrace.elf: $(addprefix $(TMP)/,funct.ld crt0.fdx.o init_mpc5748g.o $(NAME).fdx.o t32fdx.o t32fdxppc.o lib.o)
	$(CCGRP)gcc $(LOPT) -o $@ -T $^

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