# Makefile

# host toolchain
HCC	= gcc
HCFLAGS	= -O2 -std=c99 -I$(EPIPHANY_HOME)/tools/host/include -Wall
HLFLAGS	= -L$(EPIPHANY_HOME)/tools/host/lib -le-hal
ECHO	= /bin/echo -e

# target toolchain
ECC	= e-gcc
EOC	= e-objcopy
ECFLAGS	= -O3 -std=c99 -falign-loops=8 -falign-functions=8 -Wall
ELFLAGS	= -T$(EPIPHANY_HOME)/bsps/current/fast.ldf -le-lib
EOFLAGS	= -R .shared_dram

# folders
HSRC	= hsrc
HDEST	= hobj
ESRC	= esrc
EDEST	= eobj
DEST	= bin

# applications (host binary and epiphany SREC files) to build
HAPP	= $(DEST)/ep_main
EAPPS	= $(DEST)/test.srec

# object files to build
HOBJS	= $(HDEST)/main.o $(HDEST)/data.o
#ECOMMON	= $(EDEST)/commlib.o
ECOMMON = 

# === Rules ===============================================================
.SECONDARY:
.PHONY: help all host target folders run clean
EELFS	= $(EAPPS:$(DEST)%srec=$(EDEST)%elf)
EOBJS	= $(EAPPS:$(DEST)%srec=$(EDEST)%o)

help:
	@$(ECHO)
	@$(ECHO) "Epiphany Makefile - Help"
	@$(ECHO) "  help    show this help"
	@$(ECHO) "  host    build host application      ($(HAPP))"
	@$(ECHO) "  target  build epiphany applications ($(EAPPS))"
	@$(ECHO) "  all     build host and target"
	@$(ECHO) "  run     build all, then run host application"
	@$(ECHO) "  clean   remove applications and intermediate files"
	@$(ECHO)

all: host target

host: folders $(HAPP)

target: folders $(EAPPS)

folders: $(HDEST) $(EDEST) $(DEST)

run: host target
	@$(ECHO) "\tRUN"
	@sudo LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
	      EPIPHANY_HDF=$(EPIPHANY_HDF) \
	      $(HAPP)

clean:
	@$(ECHO) "\tCLEAN"
	@rm -v -f $(HOBJS) $(HAPP)
	@rm -v -f $(EOBJS) $(ECOMMON) $(EELFS) $(EAPPS) $(EAPPS)
	@rmdir -v --ignore-fail-on-non-empty $(HDEST) $(EDEST) $(DEST)

$(HDEST):
	@$(ECHO) "\tMKDIR $(HDEST)"
	@mkdir -p $(HDEST)

$(EDEST):
	@$(ECHO) "\tMKDIR $(EDEST)"
	@mkdir -p $(EDEST)

$(DEST):
	@$(ECHO) "\tMKDIR $(DEST)"
	@mkdir -p $(DEST)

# === Host Toolchain ======================================================
$(HAPP): $(HOBJS)
	@$(ECHO) "\t(HOST)   LINK\t$@"
	@$(HCC) -o $@ $^ $(HLFLAGS)

$(HDEST)/%.o: $(HSRC)/%.c
	@$(ECHO) "\t(HOST)   CC\t$@"
	@$(HCC) $(HCFLAGS) -c -o $@ $^

# === Target Toolchain ====================================================
$(DEST)/%.srec: $(EDEST)/%.elf
	@$(ECHO) "\t(TARGET) OBJCOPY $@"
	@$(EOC) $(EOFLAGS) --output-target srec --srec-forceS3 $^ $@

$(EDEST)/%.elf: $(EDEST)/%.o $(ECOMMON)
	@$(ECHO) "\t(TARGET) LINK\t$@"
	@$(ECC) -o $@ $^ $(ELFLAGS)

$(EDEST)/%.o: $(ESRC)/%.c
	@$(ECHO) "\t(TARGET) CC\t$@"
	@$(ECC) $(ECFLAGS) -c -o $@ $^
# =========================================================================

