# Tv Makefile
#
# SYNOPSIS:
#
#   make [all]  - makes everything.
#   make TARGET - makes the given target.
#   make clean  - removes all files generated by make.

#
# arm-gcc toolchain
#
TOOL =arm-none-eabi
CC  =$(TOOL)-gcc
CXX =$(TOOL)-g++
LD  =$(TOOL)-ld
AR  =$(TOOL)-ar
OBJCOPY=$(TOOL)-objcopy

# target mcu
#MCU_TARGET ?=cortex-m0

# iutest root directory
IUTEST_DIR = ../..

# sample code
SAMPLE_DIR = ../../samples
SAMPLE_SRCS = main.c \
              assertion.c \
              fixture.c \
              parameterized.c \
              simple.c
              
SAMPLE_OBJS = $(SAMPLE_SRCS:%.c=%.o)

# Flags passed to the preprocessor.
CFLAGS += -I$(IUTEST_DIR)/include

#
# Flags passed to the C compiler.
CFLAGS += -g -Wall -Wextra -Wno-format
CFLAGS += $(DEFS)
CFLAGS += -DIUTEST_C_NO_LIBC
ifdef MCU_TARGET
CFLAGS += -mmcu=$(MCU_TARGET)
endif

LDFLAGS += -specs=nosys.specs

#ARFLAGS= -q

# All tests produced by this Makefile.  Remember to add new tests you
# created to the list.
TESTS = sample

# lib
LIBRARY_INSTALL_PATH=$(IUTEST_DIR)/lib
LIBS_ = iutest_c.a
LIBS  = $(LIBS_:%=$(LIBRARY_INSTALL_PATH)/lib%)

# All iutest headers.  Usually you shouldn't change this
# definition.
IUTEST_HEADERS = $(IUTEST_DIR)/include/*.h \
                 $(IUTEST_DIR)/include/internal/*.h \
                 $(IUTEST_DIR)/include/impl/*.inl \
                 $(IUTEST_DIR)/include/listener/*.h

IUTEST_SRCS    = $(IUTEST_DIR)/src/*.c \
                 $(IUTEST_HEADERS)

# House-keeping build targets.

.PHONY: clean default all run

all : $(LIBS) $(TESTS)

clean :
	rm -f $(TESTS) $(LIBS) *.o

run : $(TESTS)
	./$<

# Builds a library
.o.a : $(IUTEST_SRCS)
	$(AR) $(ARFLAGS) $(LIBRARY_INSTALL_PATH)/lib$@ $^
	ranlib $(LIBRARY_INSTALL_PATH)/lib$@

iutest_c.a : iutest_all.o
	$(AR) $(ARFLAGS) $(LIBRARY_INSTALL_PATH)/lib$@ $^
	ranlib $(LIBRARY_INSTALL_PATH)/lib$@

iutest_all.o : $(IUTEST_DIR)/src/iutest_all.c $(IUTEST_SRCS) Makefile
	$(CC) $(CFLAGS) -I$(IUTEST_DIR) -c $(IUTEST_DIR)/src/iutest_all.c

iutest_c.so : $(IUTEST_DIR)/src/iutest_all.c $(IUTEST_SRCS) Makefile
	$(CC) $(CFLAGS) -I$(IUTEST_DIR) --shared $(IUTEST_DIR)/src/iutest_all.c -o $(LIBRARY_INSTALL_PATH)/lib$@

$(LIBRARY_INSTALL_PATH): Makefile
	@if [ ! -d $(IUTEST_DIR)/libs ]; then \
		mkdir -p $@; \
	fi

$(LIBS) : $(LIBRARY_INSTALL_PATH) $(LIBS_) Makefile

# Builds a sample test.  

%.o : $(SAMPLE_DIR)/%.c $(IUTEST_HEADERS) Makefile
	$(CC) $(CFLAGS) -c $<

%.hex : %.elf
	$(OBJCOPY) -O ihex $< $@

sample.elf : $(SAMPLE_OBJS)
	$(CC) $(LDFLAGS) $^ -o $@

sample : sample.hex
