CC = gcc SHELL := /usr/bin/env .SHELLFLAGS := -S bash -c # I need to get better at makefiles so I can write this in a way that isn't absolutely insane/stupid # RELEASE_CFLAGS := -O3 -fipa-pta -fipa-cp -fuse-linker-plugin -flto=auto # RELEASE_LDFLAGS := -fuse-linker-plugin -flto=auto CFLAGS = -std=c2x -Wall -Wextra -Wpedantic -pedantic-errors -fanalyzer -Wanalyzer-too-complex -ggdb -g3 -O0 $$(pkg-config --cflags libsodium) LDLIBS += $$(pkg-config --libs-only-l libsodium) LDFLAGS += $$(pkg-config --libs-only-L libsodium) DEPFLAGS = -MT $@ -MMD -MP -MF $*.d SOURCES := $(wildcard *.c) OBJECTS := $(patsubst %.c,%.o,$(SOURCES)) DEPS := $(patsubst %.c,%.d,$(SOURCES)) COMPILE.c = $(CC) $(DEPFLAGS) $(CFLAGS) -c .PHONY: all c clean val .DELETE_ON_ERROR: .ONESHELL: all: main main: $(OBJECTS) %.o: %.c %.d $(COMPILE.c) $< $(DEPS): include $(wildcard $(DEPS)) # Adopted from https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ c clean: @-rm -rv main $(OBJECTS) $(DEPS) $(wildcard *.test*) $(wildcard *.enc) val: $(MAKE) all valgrind --leak-check=yes ./main