-
Notifications
You must be signed in to change notification settings - Fork 0
/
makefile
56 lines (43 loc) · 1.59 KB
/
makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Project name(s)
PROJECT_NAME := $(shell basename "$(CURDIR)")
HEADER_NAME := $(shell echo $(PROJECT_NAME) | tr '[:lower:]' '[:upper:]')
# RGBDS programs (assumed to be in PATH)
ASSEMBLER := rgbasm
LINKER := rgblink
FIXER := rgbfix
# Simple makefile for assembling and linking a .gb ROM
rwildcard = $(foreach d,$(wildcard $1*), $(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
# Project file directories
INC_DIR := include/
SRC_DIR := source
SRC_EXT := .asm
SRC_FILES := $(call rwildcard, $(SRC_DIR)/, *$(SRC_EXT))
# Output files/directories
OUTPUT_DIR := build
OUTPUT := $(OUTPUT_DIR)/build
OUTPUT_EXT := .gb
OBJ_FILES := $(addprefix $(OUTPUT_DIR)/obj/, $(SRC_FILES:source/%$(SRC_EXT)=%.o))
OBJ_DIRS := $(sort $(addprefix $(OUTPUT_DIR)/obj/, $(dir $(SRC_FILES:source/%$(SRC_EXT)=%.o))))
# Toolchain flags
ASSEMBLER_FLAGS := -p 255 -H -i $(INC_DIR)
LINKER_FLAGS := -p 255 -m "$(OUTPUT).map" -n "$(OUTPUT).sym"
FIXER_FLAGS := -p 255 -v -t "$(HEADER_NAME)" -j -m MBC5
# Reserve task names
.PHONY: all clean fix
# All tasks run rgbfix
all: fix
# Run RGBFIX on the ROM file
fix: $(OUTPUT)$(OUTPUT_EXT) $(OUTPUT).sym
$(FIXER) $(FIXER_FLAGS) $(OUTPUT)$(OUTPUT_EXT)
# Link object files into ROM file
$(OUTPUT)$(OUTPUT_EXT): $(OBJ_FILES)
$(LINKER) $(LINKER_FLAGS) -o "$(OUTPUT)$(OUTPUT_EXT)" $(OBJ_FILES)
# Assembly source files into object files
$(OUTPUT_DIR)/obj/%.o : $(SRC_DIR)/%$(SRC_EXT) | $(OBJ_DIRS)
$(ASSEMBLER) $(ASSEMBLER_FLAGS) -o $@ $<
# Create directories for object files
$(OBJ_DIRS):
mkdir -p $@
# Cleanup function, removes build directory
clean:
rm -rf $(OUTPUT_DIR)