CC = LC_ALL=C gcc
CFLAGS += -std=c99
CFLAGS += -Wall -Wextra -Werror -Wconversion -Wsign-conversion -Wformat-security -pedantic
CFLAGS += -march=native -DNDEBUG -O3 -flto
LFLAGS += -lm -lasound -flto

NAME ?= avelmap
PREFIX ?= /usr/local

$(NAME): $(NAME).o alsa.o
    $(CC) -o $(@) $(^) $(LFLAGS)

%.o: %.c $(wildcard *.h)
    $(CC) $(CFLAGS) -o $(@) -c $(<)

.PHONY: lint
lint: $(wildcard *.c) $(wildcard *.h)
    clang-format --dry-run -Werror -style='{BasedOnStyle: Google, IndentWidth: 4, TabWidth: 4, ColumnLimit: 120, MaxEmptyLinesToKeep: 2, SpacesBeforeTrailingComments: 1}' -- $(^)

.PHONY: check
check: $(wildcard *.c) $(wildcard *.h)
    clang-tidy --quiet --warnings-as-errors='*' --checks='cert-*,bugprone-*,clang-analyzer-*,misc-*,-cert-err34-c' $(^) -- $(CFLAGS)

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

.PHONY: uninstall
uninstall:
    @rm -v -f "$(DESTDIR)$(PREFIX)/bin/$(NAME)"

.PHONY: clean
clean:
    @rm -vf -- avelmap actlmap $(wildcard *.o)