CXX := g++
CXXFLAGS := -Wall -Wextra -std=c++17 -O2
TARGET := emulator

# Source files
SRC := main.cpp \
       imgui/imgui.cpp \
       imgui/imgui_draw.cpp \
       imgui/imgui_widgets.cpp \
       imgui/imgui_tables.cpp \
       imgui/imgui_demo.cpp \
       imgui/imgui_impl_glfw.cpp \
       imgui/imgui_impl_opengl3.cpp

# Object file targets in build/
OBJ := $(SRC:%.cpp=build/%.o)

# Include and library paths for MSYS2
INCLUDES := -Iimgui -IC:/msys64/mingw64/include
LIBS := -LC:/msys64/mingw64/lib -lglfw3 -lopengl32

all: $(TARGET)

# Linking
$(TARGET): $(OBJ)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS)

# Build .o files into build/ directory
build/%.o: %.cpp
	@if not exist "$(dir $@)" mkdir "$(dir $@)"
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

run: $(TARGET)
	./$(TARGET)

clean:
	@rm -rf build $(TARGET)