CONFIG ?= release
BUILD_DIR := ./build/${CONFIG}
GPP_SRCS := main.cpp Rbm.cpp Layer.cpp Stack.cpp
GPP_OBJS := $(addprefix ${BUILD_DIR}/, $(subst .cpp,.o,$(GPP_SRCS)))
GCC_SRCS := noise.c
GCC_OBJS := $(addprefix ${BUILD_DIR}/, $(subst .c,.o,$(GCC_SRCS)))
	
CXXFLAGS += -std=c++11 -L juce/build/${CONFIG}
CXXFLAGS_debug := ${CXXFLAGS} -O0 -g
CXXFLAGS_release := ${CXXFLAGS} -O2

LFLAGS := -L juce/build/${CONFIG}
LFLAGS_release := ${LFLAGS}
LFLAGS_debug := ${LFLAGS}
	
CFLAGS := 
CFLAGS_debug := ${CFLAGS} -O0 -g
CFLAGS_release := ${CFLAGS} -O2

LIBS := -lstdc++ -lm -larmadillo -ljsoncpp -lfreetype -lpthread -ldl -lrt -lX11 -lGL -lXinerama -lXext -ljuce
DEFINES := -DARMA_OPENMP_THREADS=1
	
all: ${BUILD_DIR}/rbm.elf

${GPP_OBJS}: $(BUILD_DIR)/%.o : source/%.cpp
	mkdir -p $(dir $@)
	g++ ${CXXFLAGS_${CONFIG}} ${DEFINES} ${INCLUDES} -o $@ -c $<

${GCC_OBJS}: $(BUILD_DIR)/%.o : source/%.c
	mkdir -p $(dir $@)
	gcc ${CFLAGS_${CONFIG}} ${DEFINES} ${INCLUDES} -o $@ -c $<

${BUILD_DIR}/rbm.elf: ${GPP_OBJS} ${GCC_OBJS}
	gcc ${LFLAGS_${CONFIG}} ${GPP_OBJS} ${GCC_OBJS} -o $@ ${LIBS}

clean:
	rm -rf ${BUILD_DIR}/*