# PROGRAM
NAME = av_player

# FLAGS
CC = g++ -pthread
# Favor speed aggressively
CFLAGS = -O3 -march=native -ffast-math -DNDEBUG -I.
# Include GLFW and SDL3 paths
CFLAGS += -Iglfw -ISDL3

ifeq ($(OS),Windows_NT)
LDFLAGS = -L. -Lglfw -lglfw3 -lwinmm -LSDL3_lib -lSDL3
else
# Linux: Check if SDL3 is available via pkg-config, otherwise use manual paths
SDL3_LIBS := $(shell pkg-config --libs sdl3 2>/dev/null)
ifeq ($(SDL3_LIBS),)
    # Try system library paths
    LDFLAGS = -L. -Lglfw -L/usr/local/lib -lglfw -lSDL3 -ldl -lGL -lX11 -lpthread -lm
    LDFLAGS += -Wl,-rpath,/usr/local/lib
else
    # Use pkg-config results
    LDFLAGS = -L. -Lglfw -lglfw $(SDL3_LIBS) -ldl -lGL -lX11 -lpthread -lm
endif
endif

# COMPILE PROGRAM
all: $(NAME)

$(NAME): main.o lt.o glad_gl.o yuyv.o nv12.o shader.o | copy_dlls
	$(CC) -o $(NAME) main.o lt.o glad_gl.o yuyv.o nv12.o shader.o $(LDFLAGS)

main.o: main.cpp
	$(CC) $(CFLAGS) -c main.cpp

yuyv.o: yuyv.cpp
	$(CC) $(CFLAGS) -c yuyv.cpp

nv12.o: nv12.cpp
	$(CC) $(CFLAGS) -c nv12.cpp

shader.o: shader.c
	$(CC) $(CFLAGS) -c shader.c

glad_gl.o: glad_gl.c
	$(CC) $(CFLAGS) -c glad_gl.c

lt.o: ../../lt.cpp
	$(CC) $(CFLAGS) -c ../../lt.cpp

# Copy required DLLs/shared libraries to the output directory
copy_dlls:
ifeq ($(OS),Windows_NT)
	copy SDL3_lib\SDL3.dll .
else
	cp SDL3_lib/libSDL3.so . 2>/dev/null || true
endif

# CLEAN
clean:
ifeq ($(OS),Windows_NT)
	del /Q /F *.o $(NAME).exe
else
	rm -rf *.o $(NAME)
endif

.PHONY: all clean copy_dlls

# Add dependency on copy_dlls
# $(NAME): copy_dlls