CC = LANG=C g++
LFLAGS += -lGLEW -lglfw -lGL -lcrypto -flto -fwhole-program
CFLAGS += -std=c++17 -march=native -flto
CFLAGS += -Wall -Wextra -Wconversion -Wsign-conversion -Wformat-security
CFLAGS += -DNDEBUG -O3

NAME = ogl_md5
FILES = md5.cpp
INCFILES = md5.glsl
OBJECTS = $(INCFILES:%.glsl=%.glsl.o) $(FILES:%.cpp=%.o)
PREFIX ?= /usr/local

$(NAME): $(OBJECTS)
    $(CC) -o $(@) $(^) $(LFLAGS)

%.o: %.cpp Makefile
    $(CC) -c $(CFLAGS) $(<) -o $(@)

%.glsl.cpp: %.glsl
    xxd -i $(<) $(@)

.PHONY: lint
lint: $(FILES)
    clang-format --dry-run -Werror -style=file -- $(^)

.PHONY: install
install: $(NAME)
    @install -v -t "$(DESTDIR)$(PREFIX)/bin" $(^)

.PHONY: clean
clean:
    rm -f $(NAME) $(OBJECTS) *.glsl.cpp