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 CFLAGS += $$(pkg-config --cflags libsodium) LDLIBS += $$(pkg-config --libs-only-l libsodium) LDFLAGS += $$(pkg-config --libs-only-L libsodium) SOURCES := $(wildcard *.c) TIMESTAMP_DIR := .timestamps TIMESTAMPS := $(patsubst %.c,$(TIMESTAMP_DIR)/%.t,$(SOURCES)) .PHONY: all c clean v val t test .DELETE_ON_ERROR: .ONESHELL: all: main $(TIMESTAMP_DIR): mkdir -p $(TIMESTAMP_DIR) $(TIMESTAMPS): $(TIMESTAMP_DIR)/%.t: %.c | $(TIMESTAMP_DIR) touch $@ main tests: %: %.c $(TIMESTAMPS) $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@ # Phony rules c clean: -rm -rvf main $(TIMESTAMP_DIR) $(wildcard *.test*) $(wildcard *.enc) v val: $(MAKE) all valgrind --leak-check=yes ./main t test: $(MAKE) tests valgrind --leak-check=yes ./tests