OUTDIR = output

CXXFLAGS += $(shell sdl2-config --cflags) -std=c++14 -Wall -g
CFLAGS += $(shell sdl2-config --cflags)
CPPFLAGS += -I. -I$(OUTDIR) -Iimgui -Iglm \
	    -DREAL_BUILD -DGLM_ENABLE_EXPERIMENTAL
LIBS += $(shell sdl2-config --libs) -lGL -lGLEW -ldl

FILEDUMPS =

IMGUI = imgui.cpp imgui_draw.cpp
DEMO = \
	 main.cc \
	 imgui_impl_sdl.cc \
	 \
	 filewatcher.cc \
	 window.cc \
	 utilities.cc \
	 texture.cc \
	 rendertarget.cc \
	 shaders.cc \
	 camera.cc \
	 demo.cc \
	 globals.cc \
	 \
	 raymarcher.cc \
	 \
	 bloom.cc \
	 dof.cc \
	 combine.cc \
	 \
	 profiling.cc


IMGUI_OBJS = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(basename $(IMGUI))))
DEMO_OBJS = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(basename $(DEMO))))
OBJS = $(IMGUI_OBJS) $(DEMO_OBJS)
PCH=externals.hh.gch

DEMO_DEPS = $(DEMO_OBJS:$(OUTDIR)/%.o=$(OUTDIR)/%.d)

demo:	$(OBJS)
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -o demo \
		$(OBJS) $(LIBS)

clean:
	rm -f $(OBJS) $(FILEDUMPS) demo $(PCH)

fullclean: clean
	rm -f $(DEMO_DEPS)

.PHONY: clean fullclean


$(FILEDUMPS): fd-%.h: %
	xxd -i $< $@


outdir:
	@if ! [ -d "$(OUTDIR)" ]; then mkdir "$(OUTDIR)"; fi
.PHONY: outdir

$(IMGUI_OBJS): $(OUTDIR)/%.o: imgui/%.cpp | outdir
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

-include $(DEMO_DEPS)

$(DEMO_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir $(FILEDUMPS)
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -M -MF $(@:%.o=%.d) -MT $@ $<

$(PCH): externals.hh
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<