include ../macros.mk

TARGET := gltest
BUILDDIR := build-$(TARGET)

# tools to use
TOOLCHAIN_PREFIX := 
CC := $(TOOLCHAINPREFIX)clang
LD := $(TOOLCHAINPREFIX)ld
OBJDUMP := $(TOOLCHAINPREFIX)objdump

# compiler flags, default libs to link against
COMPILEFLAGS := -g -O2 -Ilibmath
CFLAGS := $(COMPILEFLAGS)
CPPFLAGS := $(COMPILEFLAGS)
ASMFLAGS := $(COMPILEFLAGS)
LDFLAGS :=
LDLIBS := -lSDL -lGLEW -lstdc++
INCLUDES :=
DEFINES :=

UNAME := $(shell uname -s)
ARCH := $(shell uname -m)

# switch any platform specific stuff here
# ifeq ($(findstring CYGWIN,$(UNAME)),CYGWIN)
# ...
# endif
ifeq ($(UNAME),Darwin)
INCLUDES += -I/opt/local/include
LDLIBS += -framework OpenGL -L/opt/local/lib
DEFINES += -D__DARWIN=1
endif
ifeq ($(UNAME),Linux)
LDLIBS += -lGL -lGLU
DEFINES += -D__LINUX=1
endif

OBJS := main.o

include libmath/rules.mk

OBJS := $(addprefix $(BUILDDIR)/,$(OBJS))
$(warning OBJS = $(OBJS))

DEPS := $(OBJS:.o=.d)

$(BUILDDIR)/$(TARGET):  $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) -o $@ $(LDLIBS)

clean:
	rm -f $(OBJS) $(DEPS) $(TARGET)

spotless:
	rm -rf build-*

# makes sure the target dir exists
MKDIR = if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi

$(BUILDDIR)/%.o: %.c
	@$(MKDIR)
	@echo compiling $<
	@$(CC) $(CFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@

$(BUILDDIR)/%.o: %.cpp
	@$(MKDIR)
	@echo compiling $<
	@$(CC) $(CPPFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@

$(BUILDDIR)/%.o: %.S
	@$(MKDIR)
	@echo compiling $<
	@$(CC) $(ASMFLAGS) $(INCLUDES) -c $< -MD -MT $@ -MF $(@:%o=%d) -o $@

ifeq ($(filter $(MAKECMDGOALS), clean), )
-include $(DEPS)
endif
