61 lines
1.3 KiB
Makefile
61 lines
1.3 KiB
Makefile
|
|
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/
|
|
|