87 lines
1.9 KiB
Makefile
87 lines
1.9 KiB
Makefile
|
|
MAKEFLAGS += -j $(shell nproc)
|
|
|
|
CC = gcc
|
|
|
|
C_FLAGS = \
|
|
-I. \
|
|
-std=c17 \
|
|
-Wall -Wextra -Wpedantic -Wconversion \
|
|
-pedantic -pedantic-errors \
|
|
-Wno-unused-function \
|
|
|
|
L_FLAGS = -pthread
|
|
|
|
|
|
C_FLAGS += $(shell pkg-config sdl2 --cflags)
|
|
L_FLAGS += $(shell pkg-config sdl2 --libs)
|
|
|
|
F_FLAGS =
|
|
OPTIMIZATION =
|
|
|
|
RELEASE=0
|
|
|
|
ifeq ($(RELEASE),1)
|
|
C_FLAGS += -Werror
|
|
F_FLAGS += -flto=auto
|
|
OPTIMIZATION += -O3
|
|
else
|
|
C_FLAGS += -g -Wno-unused-variable
|
|
F_FLAGS += -fsanitize=address,undefined,leak
|
|
OPTIMIZATION += -Og
|
|
endif
|
|
|
|
HEADERS = $(shell find . -name *.h)
|
|
|
|
ASM_SOURCES = $(shell find asm/ -name *.c -not -name main.c)
|
|
ASM_OBJECTS = $(patsubst %.c,build/%.o,$(ASM_SOURCES))
|
|
|
|
LINK_SOURCES = $(shell find link/ -name *.c)
|
|
LINK_OBJECTS = $(patsubst %.c,build/%.o,$(LINK_SOURCES))
|
|
|
|
VM_SOURCES = $(shell find vm/ -name *.c)
|
|
VM_OBJECTS = $(patsubst %.c,build/%.o,$(VM_SOURCES))
|
|
|
|
KERN_SOURCES = $(shell find kern/ -name *.c)
|
|
KERN_OBJECTS = $(patsubst %.c,build/%.o,$(KERN_SOURCES))
|
|
|
|
all: bin/vm bin/build_disk_image bin/asm bin/link
|
|
|
|
bin/vm: $(VM_OBJECTS) $(ASM_OBJECTS) build/image
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(VM_OBJECTS) $(ASM_OBJECTS) -o $@ $(F_FLAGS) $(OPTIMIZATION) $(L_FLAGS)
|
|
|
|
build/image: bin/build_disk_image
|
|
@mkdir -p $(dir $@)
|
|
./bin/build_disk_image
|
|
|
|
bin/build_disk_image: $(KERN_OBJECTS) $(ASM_OBJECTS)
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $^ -o $@ $(F_FLAGS) $(OPTIMIZATION) $(L_FLAGS)
|
|
|
|
bin/link: $(LINK_OBJECTS)
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $^ -o $@ $(F_FLAGS) $(OPTIMIZATION) $(L_FLAGS)
|
|
|
|
bin/asm: $(ASM_OBJECTS) build/asm/main.o
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $^ -o $@ $(F_FLAGS) $(OPTIMIZATION) $(L_FLAGS)
|
|
|
|
build/%.o: %.c $(HEADERS)
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $< -c -o $@ $(C_FLAGS) $(OPTIMIZATION) $(F_FLAGS)
|
|
|
|
.PHONY: run_kern clean
|
|
|
|
run_kern_main_asm: bin/asm bin/vm
|
|
./bin/asm kern/main.asm
|
|
./bin/vm -i out.o
|
|
|
|
link_kern: bin/asm bin/link
|
|
./bin/asm kern/main.asm -o build/kern_main.o
|
|
./bin/link -p kern -o build/kern.out build/kern_main.o
|
|
|
|
clean:
|
|
rm -rf build/ bin/
|
|
|