src = $(wildcard src/*.cc) $(wildcard vmath/*.cc)
csrc = $(wildcard src/*.c) $(wildcard vmath/*.c) $(wildcard anim/*.c)
obj = $(src:.cc=.o) $(csrc:.c=.o)
dep = $(obj:.o=.d)
bin = ray1

opt = -O3 -march=native
dbg = -g
#prof = -pg
CFLAGS = -pedantic -Wall $(dbg) $(opt) $(prof) -I.
CXXFLAGS = -std=c++11 $(CFLAGS)
LDFLAGS = $(prof) $(libgl) -limago

ifeq ($(shell uname -s), Darwin)
	# the gcc shipping with Darwin is ancient and doesn't support C++11
	# use clang instead.
	CXX = clang++
	CPP = clang -E
	CXXFLAGS += -stdlib=libc++
	LDFLAGS += -stdlib=libc++

	libgl = -framework OpenGL -framework GLUT -lGLEW
else
	libgl = -lGL -lGLU -lglut -lGLEW
endif

ifeq ($(CC), icc)
	libomp = -liomp5
else
	libomp = -lgomp
endif

$(bin): $(obj)
	$(CXX) -o $@ $(obj) $(LDFLAGS)

-include $(dep)

%.d: %.c
	@$(CPP) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@

%.d: %.cc
	@$(CPP) $(CXXFLAGS) $< -MM -MT $(@:.d=.o) >$@

.PHONY: clean
clean:
	rm -f $(obj) $(bin)

.PHONY: cleandep
cleandep: clean
	rm -f $(dep)
