LGFX_SRCDIR=libgfx
LGFX_BUILDDIR=$(BUILDROOT)/libgfx
LGFX_DIRFILE=$(LGFX_BUILDDIR)/.directory
# for the tests
T_LGFX_SRCDIR=libgfx
T_LGFX_BUILDDIR=$(TESTDIR)/libgfx
T_LGFX_DIRFILE=$(T_LGFX_BUILDDIR)/.directory


DIRECTORIES += $(LGFX_BUILDDIR)
LGFX_LIBFILES =
LIBGFXTESTCC = -I ./include/common -I ./include/$(ARCH)-$(TYPE)

include $(LGFX_SRCDIR)/ast/Makefile
include $(LGFX_SRCDIR)/common/Makefile
include $(LGFX_SRCDIR)/template/Makefile

$(LGFX_DIRFILE): $(BUILDROOT)/.directory $(LGFX_SRCDIR)/Makefile
	@echo [mkdir] $(LGFX_BUILDDIR)
	@mkdir -p $(LGFX_BUILDDIR)
	@touch $(LGFX_DIRFILE)

$(LGFX_BUILDDIR)/libgfx.a: $(LGFX_LIBFILES) $(TARGETDIR) $(LGFX_DIRFILE)
	@echo [$(AR)] $@
	@$(RM) $(LGFX_BUILDDIR)/libgfx.a
	@$(AR) rcs $(LGFX_BUILDDIR)/libgfx.a $(LGFX_LIBFILES)

$(LGFX_BUILDDIR)/libtest.o: $(LGFX_SRCDIR)/libtest.c $(LGFX_DIRFILE)
	@echo [$(CC)] $@
	@$(CC) $(CCPARMS) $(CFLAGS)  $< -o $@

$(LGFX_BUILDDIR)/libgfxtest.elf: $(LGFX_LIBFILES) $(TARGETDIR) $(LGFX_DIRFILE) $(LGFX_BUILDDIR)/libtest.o  $(BUILDROOT)/lib/libc.a $(BUILDROOT)/lib/libgl.a
	@echo [$(LD)] $@
	@$(LD) $(LDPARMS) $(LGLX_LIBFILES) $(LGFX_BUILDDIR)/libtest.o -lgl -lc -o $@

# Hosted build

T_LGFX_LIBFILES = $(subst $(LGFX_BUILDDIR),$(T_LGFX_BUILDDIR),$(LGFX_LIBFILES))

$(T_LGFX_BUILDDIR)/libgfx.a: $(T_LGFX_LIBFILES) $(T_LGFX_DIRFILE)
	@echo [$(HOSTAR)] $@
	@$(RM) $(T_LGFX_BUILDDIR)/libgfx.a
	@$(HOSTAR) rcs $(T_LGFX_BUILDDIR)/libgfx.a $(T_LGFX_LIBFILES)

$(T_LGFX_DIRFILE): $(TESTDIRFILE) $(LGFX_SRCDIR)/Makefile
	@echo [mkdir] $(T_LGFX_BUILDDIR)
	@mkdir -p $(T_LGFX_BUILDDIR)
	@touch $(T_LGFX_DIRFILE)

#test rules

TESTDEPS += test-libgfx-funcs

test-libgfx-funcs: $(TESTDIRFILE) $(T_LGFX_BUILDDIR)/libgfx.a
	@echo Testing libgfx functions
	@echo Testing libgfx functions > $(TESTDIR)/libgfxtest.log
	-@files=`find libgfx/ -mindepth 2 -iname "*.c"`; \
		rc=0; count=0; ec=0; \
		for file in $$files; do \
			echo $$file >> $(TESTDIR)/libctest.log 2>&1; \
			rm ./$(TESTDIR)/libgfxtest.exe 2> /dev/null; \
			rm ./$(TESTDIR)/libgfxtest 2> /dev/null; \
			echo $(HOSTCC) $(HOSTCCPARMS) -DTEST $(LIBGFXTESTCC) -L $(T_LGFX_BUILDDIR) $$file -o $(TESTDIR)/libgfxtest -lgfx >> $(TESTDIR)/libgfxtest.log 2>&1; \
			$(HOSTCC) $(HOSTCCPARMS) -DTEST $(LIBGFXTESTCC) -L $(T_LGFX_BUILDDIR) $$file -o $(TESTDIR)/libgfxtest -lgfx >> $(TESTDIR)/libgfxtest.log 2>&1; \
			if [ -x ./$(TESTDIR)/libgfxtest ]; then \
				./$(TESTDIR)/libgfxtest; \
				testcase=`expr $$? != 0`; \
				echo -e '*\c'; \
			else \
				testcase=0; \
				echo -e '!\c'; \
				ec=`expr $$ec + 1`; \
			fi;\
			rc=`expr $$rc + $$testcase`; \
			count=`expr $$count + 1`; done; \
		echo; \
		sc=`expr $$count - $$rc - $$ec`; \
		echo "Tests executed: $$count  Succeeded: $$sc  Tests failed: $$rc  Compilation errors:  $$ec"
	@echo