#!/usr/bin/make -f FLAGS = -std=c23 FLAGS += -O3 FLAGS += -march=native FLAGS += -pedantic FLAGS += -Wall FLAGS += -Wextra FLAGS += -Werror FLAGS += -Wformat-truncation=0 GITFLAG = -D'GITHASH=$(shell git rev-parse --short=1 HEAD)' OBJDIR = obj OUTDIR = out #UI_TARGET = vt100 UI_TARGET = ncurses LICENSEURL = https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt CC = cc .NOTINTERMEDIATE: MSG_FETCHING = FETCHING: 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: $(OBJDIR)/LICENSE @echo $(MSG_LINKING) $@ @mkdir -p $(@D) cd $(@D); ld -r -b binary -o $(@F) $(^F) $(OBJDIR)/connect4.o: connect4.c @echo $(MSG_COMPILING) $^ @mkdir -p $(@D) $(CC) -c $(FLAGS) $(GITFLAG) -o $@ $^ $(OBJDIR)/%.o: %.c @echo $(MSG_COMPILING) $^ @mkdir -p $(@D) $(CC) -c $(FLAGS) -o $@ $^ $(OBJDIR)/LICENSE: @echo $(MSG_FETCHING) $@ curl $(LICENSEURL) \ | sed -n '/END OF TERMS AND CONDITIONS/q;p' > $(OBJDIR)/LICENSE clean: @echo $(MSG_CLEANING) @echo $(MSG_CLEANING_OBJ) rm -f $(OBJDIR)/*.o @echo $(MSG_CLEANING_OUT) rm -f $(OUTDIR)/*.elf