GATOR_ROOT := $(abspath ../../gator)
SRC := $(abspath .)
BIN := $(abspath bin/)

CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++

CFLAGS +=
CXXFLAGS +=
CPPFLAGS += -I$(GATOR_ROOT)/annotate -O0 -g3 -MD -pthread -pipe
CPPFLAGS += -Wall -Wextra -Wshadow -Wc++-compat -Wpointer-arith -Wundef -Wmissing-prototypes -Wstrict-prototypes
LDFLAGS += -pthread
LDLIBS += -lrt

OUTPUT_OPTION = -o $@
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
COMPILE.cpp = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
LINK.o = $(CC) $(LDFLAGS)

TARGETS = $(BIN)/absolute $(BIN)/text $(BIN)/cam $(BIN)/delta $(BIN)/visual $(BIN)/shared

all: $(TARGETS)

include $(wildcard $(BIN)/*.d)

$(BIN):
	mkdir -p $(BIN)

$(BIN)/%.o: $(SRC)/%.c $(BIN)
	$(COMPILE.c) $(OUTPUT_OPTION) $<

$(BIN)/%.o: $(SRC)/%.cpp $(BIN)
	$(COMPILE.cpp) $(OUTPUT_OPTION) $<

$(BIN)/streamline_annotate.o: $(GATOR_ROOT)/annotate/streamline_annotate.c $(BIN)
	$(COMPILE.c) $(OUTPUT_OPTION) $<

$(BIN)/absolute: $(BIN)/absolute.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

$(BIN)/text: $(BIN)/text.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

$(BIN)/cam: $(BIN)/cam.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

$(BIN)/delta: $(BIN)/delta.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

$(BIN)/visual: $(BIN)/visual.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

$(BIN)/shared: $(BIN)/shared.o $(BIN)/streamline_annotate.o
	$(LINK.o) $^ $(LDLIBS) $(OUTPUT_OPTION)

clean:
	rm -f *~ $(BIN)/*.d $(BIN)/*.i $(BIN)/*.s $(BIN)/*.o $(TARGETS)
