Add a mostly non-functional Gameboy CPU and the skeleton of a Gameboy assembler intended for unit tests.
82 lines
1.6 KiB
Makefile
Executable File
82 lines
1.6 KiB
Makefile
Executable File
OUT=build
|
|
SRC_DIR=src
|
|
APP_DIR=src/apps/
|
|
|
|
CC=gcc
|
|
|
|
CCFLAGS = -Wall -Werror
|
|
CCFLAGS += -std=c99 -D_POSIX_C_SOURCE=200809L
|
|
CCFLAGS += -I$(SRC_DIR)
|
|
|
|
.PHONY: release debug
|
|
|
|
CONFIG = $(OUT)/.config.mk
|
|
|
|
-include $(CONFIG)
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
CCFLAGS += -DLOG_LEVEL=5 -DDEBUG
|
|
CCFLAGS += -fprofile-arcs -ftest-coverage
|
|
CCFLAGS += -O0 -ggdb
|
|
LDFLAGS += -lgcov --coverage
|
|
endif
|
|
|
|
ifeq ($(RELEASE), 1)
|
|
CCFLAGS += -O3
|
|
endif
|
|
|
|
CCFLAGS += -I/usr/include/glib-2.0/ -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
|
|
LDFLAGS += -lglib-2.0
|
|
|
|
C_SOURCES = $(shell find $(SRC_DIR) -name "*.c")
|
|
ALL_OBJS = $(patsubst $(SRC_DIR)/%.c, $(OUT)/%.o, $(C_SOURCES))
|
|
APP_OBJS = $(filter $(OUT)/apps/%, $(ALL_OBJS))
|
|
OBJS = $(filter-out $(APP_OBJS), $(ALL_OBJS))
|
|
APPS = $(patsubst %.o, %, $(APP_OBJS))
|
|
|
|
.PHONY: all
|
|
all: gbdb gbasm tests
|
|
|
|
.PHONY: config-debug config-release config-default
|
|
$(CONFIG):
|
|
@mkdir -p $(OUT)
|
|
config-debug: $(CONFIG)
|
|
@echo "DEBUG=1" > $(CONFIG)
|
|
config-release: $(CONFIG)
|
|
@echo "RELEASE=1" > $(CONFIG)
|
|
config-default: $(CONFIG)
|
|
@echo "" > $(CONFIG)
|
|
|
|
|
|
.PHONY: gbdb gbasm
|
|
|
|
gbdb: $(OUT)/apps/gbdb
|
|
gbasm: $(OUT)/apps/gbasm
|
|
|
|
.PHONY: gbasm-test sample-test tests
|
|
|
|
gbasm-test: $(OUT)/apps/gbasm-test
|
|
sample-test: $(OUT)/apps/sample-test
|
|
tri-test: $(OUT)/apps/tri-test
|
|
tests: gbasm-test sample-test tri-test
|
|
|
|
$(ALL_APPS) $(ALL_OBJS): $(CONFIG)
|
|
|
|
$(OUT)/%.o: $(SRC_DIR)/%.c
|
|
@echo " CC $@"
|
|
@$(shell mkdir -p $(@D))
|
|
@$(CC) -c $(CCFLAGS) -o $@ $<
|
|
|
|
.SECONDEXPANSION:
|
|
$(APPS): $(OBJS) $$@.o
|
|
@echo " LD $@"
|
|
@$(shell mkdir -p $(@D))
|
|
@$(CC) $^ $(LDFLAGS) -o $@
|
|
|
|
.PHONY: clean realclean
|
|
clean:
|
|
@rm -f $(ALL_OBJS) $(APPS)
|
|
|
|
realclean: clean
|
|
@rm -f $(CONFIG)
|