MAKEFLAGS += -j $(shell nproc) CC = gcc COMPILER_FLAGS = \ -std=c23 \ -Wall -Wextra -Wpedantic -Wconversion \ -pedantic -pedantic-errors \ -Wno-unused-function \ LINKER_FLAGS = \ -pthread COMPILER_FLAGS += $(shell pkg-config sdl2 --cflags) LINKER_FLAGS += $(shell pkg-config sdl2 --libs) FEATURE_FLAGS = OPTIMIZATION_FLAGS = # override by 'make RELEASE=1 ...' RELEASE=0 ifeq ($(RELEASE),1) COMPILER_FLAGS += -Werror FEATURE_FLAGS += -flto=auto OPTIMIZATION_FLAGS += -O3 else COMPILER_FLAGS += -g -Wno-unused-variable FEATURE_FLAGS += -fsanitize=address,undefined,leak OPTIMIZATION_FLAGS += -Og endif HEADERS = $(shell find . -name *.h) VM_SOURCES = $(shell find vm/ -name *.c) VM_OBJECTS = $(patsubst %.c, build/objects/%.o, $(VM_SOURCES)) ASM_SOURCES = $(shell find asm/ -name *.c) ASM_OBJECTS = $(patsubst %.c, build/objects/%.o, $(ASM_SOURCES)) all: build/vm build/asm build/vm: $(VM_OBJECTS) @mkdir -p $(dir $@) $(CC) $^ -o $@ $(FEATURE_FLAGS) $(OPTIMIZATION_FLAGS) $(LINKER_FLAGS) build/asm: $(ASM_OBJECTS) @mkdir -p $(dir $@) $(CC) $^ -o $@ $(FEATURE_FLAGS) $(OPTIMIZATION_FLAGS) $(LINKER_FLAGS) build/objects/%.o: %.c $(HEADERS) @mkdir -p $(dir $@) $(CC) $< -c -o $@ $(COMPILER_FLAGS) $(OPTIMIZATION_FLAGS) $(FEATURE_FLAGS) .PHONY: clean clean: rm -rf build/