-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
147 lines (121 loc) · 2.77 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File: Makefile
# Author: Zakhary Kaplan <https://zakhary.dev>
# Created: 04 Nov 2024
# SPDX-License-Identifier: NONE
# --------------------
# -- Project --
# --------------------
-include Project.mk
# --------------------
# -- Variables --
# --------------------
# -- Directories --
# Root directory
ROOT = .
# Base directories
OUT = $(ROOT)/out
SRC = $(ROOT)/src
# Build directories
BIN = $(OUT)
OBJ = $(OUT)/obj
# -- Files --
# Sources
SRCS := $(shell find $(SRC) -type f -name "*.s")
OBJS := $(SRCS:$(SRC)/%.s=$(OBJ)/%.o)
# Targets
ifneq ($(OBJS),)
GAME = $(BIN)/$(PROJECT).gb
endif
# -- Compiler --
# Programs
RGBASM = rgbasm
RGBFIX = rgbfix
RGBLINK = rgblink
# Flags
ASFLAGS += $(addprefix -I,$(INCLUDES))
LDFLAGS +=
FXFLAGS += -v \
$(if $(NOJAPAN),-j) \
$(addprefix -p,$(PADBYTE))
# Recipies
COMPILE = $(RGBASM) $(ASFLAGS)
LINK = $(RGBLINK) $(LDFLAGS)
PREP = $(RGBFIX) $(FXFLAGS)
# -- Programs --
# Runner
DEBUGGER = rugby run --gbd
EMULATOR = rugby run
# Utility
MKDIR = mkdir -p
RM = rm -rfv
# --------------------
# -- Targets --
# --------------------
# Build targets
.PHONY: build
build: $(GAME)
# Clean artifacts
.PHONY: clean
clean:
@$(RM) $(OUT)
# Run in debugger
.PHONY: dbg
dbg: $(GAME)
@$(DEBUGGER) $^
# Run in emulator
.PHONY: run
run: $(GAME)
@$(EMULATOR) $^
# --------------------
# -- Build --
# --------------------
# Link executable
.PRECIOUS: $(GAME)
$(GAME): $(OBJS)
@$(MKDIR) $(@D)
$(LINK) $(OUTPUT_OPTION) $^
$(PREP) $@
# Compile objects
.PRECIOUS: $(OBJ)/%.o
$(OBJ)/%.o: $(SRC)/%.s
@$(MKDIR) $(@D)
$(COMPILE) $(OUTPUT_OPTION) $<
# --------------------
# -- Echo --
# --------------------
# Help information
.PHONY: help
help: version
@echo " "
@echo "Usage: "
@echo " make [TARGET] "
@echo " "
@echo "Compile: "
@echo " build Build artifacts."
@echo " clean Clean artifacts."
@echo " "
@echo "Execute: "
@echo " dbg Run in debugger."
@echo " run Run in emulator."
@echo " "
@echo "System: "
@echo " help Print help. "
@echo " version Print version. "
# Version header
.PHONY: version
version:
ifdef PROJECT
@echo "$(PROJECT)" "$(VERSION)"
endif
ifdef AUTHOR
@echo "$(AUTHOR)"
endif
ifdef DESCRIPTION
@echo "$(DESCRIPTION)"
endif
# --------------------
# -- Options --
# --------------------
# Explicitly set default goal
.DEFAULT_GOAL := build
.SUFFIXES: .gb .o .s