CC ?= cc AR ?= ar RANLIB ?= ranlib CSTD := -std=c11 WARN := -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wstrict-prototypes -Wmissing-prototypes DEFS := -D_POSIX_C_SOURCE=200809L INCS := $(addprefix -I,$(INC_DIRS)) CFLAGS_COMMON := $(CSTD) $(WARN) $(DEFS) $(INCS) LDFLAGS_COMMON := LDLIBS_COMMON := ifeq ($(MODE),release) CFLAGS_MODE := -O2 -DNDEBUG else ifeq ($(MODE),debug) CFLAGS_MODE := -O0 -g3 else ifeq ($(MODE),asan) CFLAGS_MODE := -O1 -g3 -fsanitize=address -fno-omit-frame-pointer LDFLAGS_MODE := -fsanitize=address else ifeq ($(MODE),ubsan) CFLAGS_MODE := -O1 -g3 -fsanitize=undefined -fno-omit-frame-pointer LDFLAGS_MODE := -fsanitize=undefined else $(error Unknown MODE=$(MODE)) endif CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_MODE) LDFLAGS := $(LDFLAGS_COMMON) $(LDFLAGS_MODE) LDLIBS := $(LDLIBS_COMMON)