record-manager-blank/Makefile
trevon 1a650d4aaa
Some checks failed
grade / grade (push) Failing after 5s
push (blank)
2026-08-26 01:12:22 +00:00

45 lines
1.3 KiB
Makefile

# Record Manager — build, test, and verification targets.
#
# Best-practice references:
# - GNU Make automatic prerequisites: https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html
# - GCC instrumentation (sanitizers): https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html
CC ?= cc
CFLAGS ?= -std=c17 -Wall -Wextra -Wpedantic -Werror -g
CPPFLAGS += -Iinclude -MMD -MP
LDLIBS ?=
SRC := $(wildcard src/*.c)
OBJ := $(SRC:src/%.c=build/%.o)
DEP := $(OBJ:.o=.d)
BIN := build/recman
all: $(BIN)
$(BIN): $(OBJ)
$(CC) $(CFLAGS) $^ -o $@ $(LDLIBS)
build/%.o: src/%.c | build
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
build:
mkdir -p build
test: $(BIN)
sh tests/smoke.sh $(BIN)
# ASan + UBSan — zero tolerance for memory and undefined-behavior errors.
sanitize:
$(CC) $(CFLAGS) -fsanitize=address,undefined $(CPPFLAGS) $(SRC) -o build/recman_asan $(LDLIBS)
sh tests/smoke.sh build/recman_asan
valgrind: $(BIN)
@command -v valgrind >/dev/null 2>&1 || { echo "error: valgrind not installed (see toolchain setup)"; exit 1; }
printf 'add Ada ada@x.io 555-0100\nlist\nquit\n' | valgrind --leak-check=full --show-leak-kinds=all --error-exitcode=1 $(BIN) >/dev/null
clean:
rm -rf build
-include $(DEP)
.PHONY: all test sanitize valgrind clean