SRC_DIR = src COLLEEN_SRCS = $(SRC_DIR)/Colleen/Colleen.c GRACE_SRCS = $(SRC_DIR)/Grace/Grace.c SULLY_SRCS = $(SRC_DIR)/Sully/Sully.c COLLEEN = Colleen GRACE = Grace SULLY = Sully COLLEEN_ASM_SRCS = $(SRC_DIR)/Colleen/Colleen.s COLLEEN_ASM = Colleen_asm GRACE_ASM_SRCS = $(SRC_DIR)/Grace/Grace.s GRACE_ASM = Grace_asm SULLY_ASM_SRCS = $(SRC_DIR)/Sully/Sully.s SULLY_ASM = Sully_asm NASM = nasm NASMFLAGS = -f elf64 LD = ld .DEFAULT_GOAL := all MAKEFLAGS += --no-print-directory CC = clang CPPFLAGS = -std=c99 -I includes CFLAGS = -Wall -Wextra -Werror -pipe -Wpedantic -Wconversion -Wshadow -Wvla LDFLAGS = OBJ_DIR = .build COLLEEN_OBJS = $(COLLEEN_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) COLLEEN_DEPS = $(COLLEEN_OBJS:.o=.d) GRACE_OBJS = $(GRACE_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) GRACE_DEPS = $(GRACE_OBJS:.o=.d) SULLY_OBJS = $(SULLY_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) SULLY_DEPS = $(SULLY_OBJS:.o=.d) COLLEEN_ASM_OBJS = $(COLLEEN_ASM_SRCS:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.asm.o) GRACE_ASM_OBJS = $(GRACE_ASM_SRCS:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.asm.o) SULLY_ASM_OBJS = $(SULLY_ASM_SRCS:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.asm.o) .PHONY: all all: $(COLLEEN) $(GRACE) $(SULLY) $(COLLEEN_ASM) $(GRACE_ASM) $(SULLY_ASM) $(GRACE): $(GRACE_OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(COLLEEN): $(COLLEEN_OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(SULLY): $(SULLY_OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(COLLEEN_ASM): $(COLLEEN_ASM_OBJS) $(LD) -o $@ $^ $(GRACE_ASM): $(GRACE_ASM_OBJS) $(LD) -o $@ $^ $(SULLY_ASM): $(SULLY_ASM_OBJS) $(LD) -o $@ $^ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(dir $@) $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@ $(OBJ_DIR)/%.asm.o: $(SRC_DIR)/%.s @mkdir -p $(dir $@) $(NASM) $(NASMFLAGS) $< -o $@ -include $(COLLEEN_DEPS) -include $(GRACE_DEPS) -include $(SULLY_DEPS) .PHONY: clean clean: $(RM) -r $(OBJ_DIR) .PHONY: fclean fclean: clean $(RM) $(COLLEEN) $(GRACE) $(SULLY) $(COLLEEN_ASM) $(GRACE_ASM) $(SULLY) $(SULLY_ASM) Sully_?.asm.o Sully_?.* Sully_asm_? Grace_kid.? Sully_? Grace_kid.* .PHONY: re re: fclean $(MAKE) all