#==============================================================================
.SUFFIXES:
.PHONY: all mkdir targets run clean distclean rerun scrub

include gcc.mak

BMARKS     = hello
CFGFOLDER  = gcc_lite

BINBUILD   = $(CFGFOLDER)/bin
OBJBUILD   = $(CFGFOLDER)/obj
RESULTS    = $(CFGFOLDER)/results

# Compile for Debugger
CFLAGSD    = $(WARNING_OPTIONS) $(COMPILER_DEBUG) $(COMPILER_DEFINES) 
CCD        = $(CC) -c $(CFLAGSD)

# Compile for Benchmarking
CFLAGS     = $(WARNING_OPTIONS) $(COMPILER_FLAGS) $(COMPILER_DEFINES)
CCC        = $(CC) -c $(CFLAGS)

# Select Compile for Benchmarking, or Compile for Debug
COM        = $(CCC)

# Assembler definitions
AFLAGS     = $(ASSEMBLER_FLAGS) $(ASSEMBLER_INCLUDES)
ASM        = $(AS) $(AFLAGS)

# Linker Definitions
LFLAGS     = $(LINKER_FLAGS) $(LINKER_INCLUDES)
LINK       = $(LD) $(LFLAGS)

# ALL_TARGETS defined in gcc.mak
all: $(ALL_TARGETS)

rerun: cleanlogs results

scrub: rmdir

# Remove all generated files.
distclean:
	-rm -rf gcc_lite

###############################################################################
# TARGETS
###############################################################################
$(OBJBUILD)/hello/hello_lite.o: hello/hello.c
	$(CCC) hello/hello.c -o $(OBJBUILD)/hello/hello_lite.o

$(BINBUILD)/hello_lite.exe: $(OBJBUILD)/hello/hello_lite.o
	$(LINK) -o $(BINBUILD)/hello_lite.exe $(OBJBUILD)/hello/hello_lite.o

targets: mkdir \
	$(BINBUILD)/hello_lite.exe

###############################################################################
# RUN
###############################################################################
run: targets $(addprefix $(RESULTS)/, $(addsuffix .run.log, $(BMARKS))) \
             $(addprefix $(RESULTS)/, $(addsuffix .size.log, $(BMARKS)))

$(RESULTS)/%.run.log: $(BINBUILD)/%_lite.exe
	-$(RUN) $(RUN_FLAGS) $(BINBUILD)/$*_lite.exe  > $@

$(RESULTS)/%.size.log: $(BINBUILD)/%_lite.exe
	$(SIZE) $(SIZE_FLAGS) $(BINBUILD)/$*_lite.exe > $@

###############################################################################
# RUN
###############################################################################
cleanlogs:
	@-rm -f $(RESULTS)/*.log

clean:: cleanlogs $(addprefix clean_, $(BMARKS))
	@-rm -f $(OBJBUILD)/*.o

clean_%:
	@-rm -f $(OBJBUILD)/$*/*.o
	@-rm -f $(BINBUILD)/$*_lite.exe

mkdir: $(BINBUILD) $(OBJBUILD) $(RESULTS) $(addprefix $(OBJBUILD)/, $(BMARKS))

$(BINBUILD):
	@-mkdir -p $(BINBUILD)

$(OBJBUILD):
	@-mkdir -p $(OBJBUILD)

$(RESULTS):
	@-mkdir -p $(RESULTS)

$(OBJBUILD)/%:
	@-mkdir -p $(OBJBUILD)/$*

rmdir:
	@-rm -rf $(BINBUILD)
	@-rm -rf $(OBJBUILD)
	@-rm -rf $(RESULTS)
