QUIET=1 PROFILING=1 ADDRESS_SANITIZE=1 all:first OBJECT_FILES=gui.o main.o simdata.o assembly.o cpu.o MAIN_ROM=programs/3d_renderer.rom ROMS=test.rom ${MAIN_ROM} make.deps: $(subst .o,.c,${OBJECT_FILES}) $(wildcard *.h) @$(CC) -MM $(subst .o,.c,${OBJECT_FILES}) > make.deps include make.deps ifeq "${QUIET}" "1" QUIET_CC = @echo ' CC '$@; QUIET_LINK = @echo ' LINK '$@; QUIET_FAS = @echo ' FAS '$@; QUIET_CLEAN = @echo ' CLEAN .'; Q = @ else Q = endif CFLAGS::=-O2 $(shell pkg-config ncursesw --cflags) ifeq "${PROFILING}" "1" CFLAGS += -pg LDFLAGS += -pg endif ifeq "${ADDRESS_SANITIZE}" "1" CFLAGS += -fsanitize=address -ggdb LDFLAGS += -fsanitize=address -fsanitize=undefined -fsanitize=leak endif all:${MAIN_ROM} first: ${OBJECT_FILES} ${QUIET_LINK} ${Q}gcc -ggdb $^ $(shell pkg-config --libs ncursesw) -lm -o $@ ${LDFLAGS} gprof: gprof first -b|less %.rom:%.asm first $(QUIET_FAS) ${Q}./first -i $< -a $@ %.o:%.c ${QUIET_CC} ${Q}gcc -c $< -Wall -Wextra -Werror ${CFLAGS} .PHONY: clean clean: ${QUIET_CLEAN} ${Q} rm -f ${OBJECT_FILES} first ${ROMS} gmon.out