# SRCS specifies which files to compile as part of the project
SRC_PATH = src
OBJ_PATH = obj
BIN_PATH = bin

APP_NAME = main

OBJS = $(OBJ_PATH)/*.o
APP_PATH = $(BIN_PATH)/$(APP_NAME)

CPP_SRC= $(wildcard $(SRC_PATH)/*.cpp)
C_SRC= $(wildcard $(SRC_PATH)/*.c)
OBJ= $(patsubst $(SRC_PATH)/%.cpp,$(OBJ_PATH)/%.o,$(CPP_SRC)) \
     $(patsubst $(SRC_PATH)/%.c,$(OBJ_PATH)/%.o,$(C_SRC))
#//OBJ= $(OBJS:.o)

# CC specifies which compiler we're using
CC = clang++
RM = rm

# INCLUDE_PATHS specifies the additional include paths we'll need
INCLUDE_PATHS = -I/usr/local/include -I/opt/X11/include -I/opt/homebrew/opt/glew/include -I/opt/homebrew/opt/glfw/include -I./include -I/opt/homebrew/opt/glm/include

# LIBRARY_PATHS specifies the additional library paths we'll need
LIBRARY_PATHS = -L/usr/local/lib -L/opt/X11/lib -L/opt/homebrew/opt/glfw/lib -L/opt/homebrew/opt/glew/lib -L/opt/homebrew/opt/glm/lib

# COMPILER_FLAGS specifies the additional compilation options we're using
# -w suppresses all warnings
COMPILER_FLAGS = -w

ifeq ($(DEBUG),yes)
	COMPILER_FLAGS += -g
endif

# LINKER_FLAGS specifies the libraries we're linking against
# Cocoa, IOKit, and CoreVideo are needed for static GLFW3.
# The glfw3 is deprecated. Now when you run 'brew install glfw3' you actually installed the glfw with version 3.x
LINKER_FLAGS = -lglfw  -lGLEW -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo


# APP_NAME specifies the name of our exectuable

$(OBJ_PATH)/%.o: $(SRC_PATH)/%.cpp
	$(CC) -o $@ -c $< $(COMPILER_FLAGS) $(INCLUDE_PATHS)

$(OBJ_PATH)/%.o: $(SRC_PATH)/%.c
	$(CC) -o $@ -c $< $(COMPILER_FLAGS) $(INCLUDE_PATHS)

#This is the target that compiles our executable
$(APP_NAME) : $(OBJ)
	$(CC) $(OBJ) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(APP_PATH)
	
# clean all sources
clean:
	$(RM) -rf $(OBJS)
	$(RM) -rf $(SRC_PATH)/*o
	$(RM) -rf $(APP_PATH)
