#!/usr/bin/make -f FLAGS = -std=gnu23 FLAGS += -O3 FLAGS += -pedantic FLAGS += -Wall FLAGS += -Wextra FLAGS += -Werror GITFLAG = -D'GITHASH=$(shell git rev-parse --short=1 HEAD)' OBJDIR = obj OUTDIR = out #UI_TARGET = vt100 UI_TARGET = ncurses CC = cc .NOTINTERMEDIATE: MSG_LINKING = Linking: MSG_COMPILING = Compiling C: MSG_CLEANING = Cleaning: MSG_CLEANING_OBJ = Cleaning $(OBJDIR): MSG_CLEANING_OUT = Cleaning $(OUTDIR): all: $(addprefix $(OUTDIR)/connect4_,ncurses.elf vt100.elf) run: $(OUTDIR)/connect4_$(UI_TARGET).elf ./$< run_%: $(OUTDIR)/connect4_%.elf ./$< $(OUTDIR)/connect4_ncurses.elf: $(addprefix $(OBJDIR)/,ui_ncurses.o logic.o connect4.o LICENSE.o) @echo $(MSG_LINKING) $@ @mkdir -p $(@D) $(CC) $(FLAGS) -lncursesw -o $@ $^ $(OUTDIR)/connect4_%.elf: $(addprefix $(OBJDIR)/,ui_%.o logic.o connect4.o LICENSE.o) @echo $(MSG_LINKING) $@ @mkdir -p $(@D) $(CC) $(FLAGS) -o $@ $^ $(OBJDIR)/LICENSE.o: LICENSE @echo $(MSG_LINKING) $@ @mkdir -p $(@D) ld -r -b binary -o $@ $^ $(OBJDIR)/%.o: %.c @echo $(MSG_COMPILING) $^ @mkdir -p $(@D) $(CC) -c $(FLAGS) -o $@ $^ $(OBJDIR)/connect4.o: connect4.c @echo $(MSG_COMPILING) $^ @mkdir -p $(@D) $(CC) -c $(FLAGS) $(GITFLAG) -o $@ $^ clean: @echo $(MSG_CLEANING) @echo $(MSG_CLEANING_OBJ) rm -f $(OBJDIR)/*.o @echo $(MSG_CLEANING_OUT) rm -f $(OUTDIR)/*.elf