# Directories SRC_DIR := src OBJ_DIR := objs # Common flags CFLAGS_COMMON := -Wall -Werror -pthread CFLAGS_RELEASE := -O3 -g0 CFLAGS_DEBUG := -O0 -g DEFINES := -DGETRANDOM -DARG_REPLACE_GETOPT=0 LDFLAGS_COMMON := -lm LDFLAGS_RELEASE := -s # Default build flags (can be overridden from the command line) CFLAGS ?= $(CFLAGS_COMMON) $(CFLAGS_RELEASE) $(DEFINES) LDFLAGS ?= $(LDFLAGS_COMMON) $(LDFLAGS_RELEASE) # Source lists LIB_SOURCES := \ argtable3.c \ base64.c \ binhex.c \ curve25519.c \ inexact.c \ norx_inexact.c \ sha3.c \ tests.c \ readpassphrase.c \ randombytes.c \ chacha20_drng.c \ blake2.c ARGON2_SOURCES := \ argon2.c \ argon2-core.c \ argon2-thread.c \ argon2-encoding.c \ argon2-impl-select.c \ argon2-arch.c MAIN_SOURCE := main.c # Derived paths LIB_SRCS := $(addprefix $(SRC_DIR)/,$(LIB_SOURCES)) LIB_OBJS := $(addprefix $(OBJ_DIR)/,$(LIB_SOURCES:.c=.o)) ARGON2_SRCS := $(addprefix $(SRC_DIR)/,$(ARGON2_SOURCES)) MAIN_SRC := $(addprefix $(SRC_DIR)/,$(MAIN_SOURCE)) # Phony targets .PHONY: all default release debug clean # Default target all: inexact default: inexact release: inexact # Debug build: override flags for this target only debug: CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_DEBUG) $(DEFINES) debug: LDFLAGS := $(LDFLAGS_COMMON) debug: inexact # Link final binary inexact: $(LIB_OBJS) $(ARGON2_SRCS) $(MAIN_SRC) $(CC) $(CFLAGS) $(ARGON2_SRCS) $(MAIN_SRC) $(LIB_OBJS) -o $@ $(LDFLAGS) # Ensure object directory exists $(OBJ_DIR): mkdir -p $(OBJ_DIR) # Generic rule to build objects from src/*.c into objs/*.o $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR) $(CC) $(CFLAGS) -c $< -o $@ # Cleanup clean: -$(RM) $(LIB_OBJS) -$(RM) inexact inexact.exe