-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmakefile
More file actions
90 lines (77 loc) · 3.33 KB
/
makefile
File metadata and controls
90 lines (77 loc) · 3.33 KB
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
ifneq ($(strip $(DEVKITPPC)),)
PREFIX = $(DEVKITPPC)/bin/powerpc-eabi-
else
PREFIX = powerpc-eabi-
endif
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
LD = $(CC)
OBJCOPY = $(PREFIX)objcopy
CFILES = *.c
SFILES = *.s
SRCDIR = src
OBJDIR = obj
BINDIR = bin
VC_VERSIONS = D43J D43E PZLJ PZLE NACJ NACE NARJ NARE
NAME = homeboy
RESDESC = res.json
ADDRESS = 0x817F8000
ALL_CFLAGS = -c -std=gnu11 -Iinclude -mcpu=750 -meabi -mhard-float -G 0 -O3 -ffunction-sections -fdata-sections $(CFLAGS)
ALL_CPPFLAGS = $(CPPFLAGS)
ALL_LDFLAGS = -T build.ld -G 0 -nostartfiles -specs=nosys.specs -Wl,--gc-sections,--section-start,.init=$(ADDRESS) $(LDFLAGS)
ALL_OBJCOPYFLAGS = -S -O binary --set-section-flags .bss=alloc,load,contents $(OBJCOPYFLAGS)
HB-D43J = $(COBJ-hb-D43J) $(ELF-hb-D43J)
HB-D43E = $(COBJ-hb-D43E) $(ELF-hb-D43E)
HB-PZLJ = $(COBJ-hb-PZLJ) $(ELF-hb-PZLJ)
HB-PZLE = $(COBJ-hb-PZLE) $(ELF-hb-PZLE)
HB-NACJ = $(COBJ-hb-NACJ) $(ELF-hb-NACJ)
HB-NACE = $(COBJ-hb-NACE) $(ELF-hb-NACE)
HB-NARJ = $(COBJ-hb-NARJ) $(ELF-hb-NARJ)
HB-NARE = $(COBJ-hb-NARE) $(ELF-hb-NARE)
HOMEBOY = $(foreach v,$(VC_VERSIONS),hb-$(v))
all : $(HOMEBOY)
clean :
rm -rf $(OBJDIR) $(BINDIR)
format :
find include src -name '*.h' -o -name '*.c' | xargs clang-format -i
.PHONY : all clean format
define bin_template
SRCDIR-$(1) = src
OBJDIR-$(1) = obj/$(1)
BINDIR-$(1) = bin/$(1)
SYMS-$(1) = lib/$(1).txt
CSRC-$(1) := $$(foreach s,$$(CFILES),$$(wildcard $$(SRCDIR-$(1))/$$(s)))
SSRC-$(1) := $$(foreach s,$$(SFILES),$$(wildcard $$(SRCDIR-$(1))/$$(s)))
COBJ-$(1) = $$(patsubst $$(SRCDIR-$(1))/%,$$(OBJDIR-$(1))/%.o,$$(CSRC-$(1)))
SOBJ-$(1) = $$(patsubst $$(SRCDIR-$(1))/%,$$(OBJDIR-$(1))/%.o,$$(SSRC-$(1)))
ELF-$(1) = $$(BINDIR-$(1))/$(2).elf
BIN-$(1) = $$(BINDIR-$(1))/$(2).bin
OUTDIR-$(1) = $$(OBJDIR-$(1)) $$(BINDIR-$(1))
BUILD-$(1) = $(1)
CLEAN-$(1) = clean-$(1)
$$(ELF-$(1)) : LDFLAGS += -Wl,--defsym,init=$$(ADDRESS)
$$(BUILD-$(1)) : $$(BIN-$(1))
$$(CLEAN-$(1)) :
rm -rf $$(OUTDIR-$(1))
$$(COBJ-$(1)) : $$(OBJDIR-$(1))/%.o: $$(SRCDIR-$(1))/% | $$(OBJDIR-$(1))
$(CC) $$(ALL_CPPFLAGS) $$(ALL_CFLAGS) $$< -o $$@
$$(SOBJ-$(1)) : $$(OBJDIR-$(1))/%.o: $$(SRCDIR-$(1))/% | $$(OBJDIR-$(1))
$(AS) -c -mregnames $$(ALL_CPPFLAGS) $$< -o $$@
$$(RESOBJ-$(1)) : $$(OBJDIR-$(1))/%.o: $$(RESDIR-$(1))/% | $$(OBJDIR-$(1))
$(GRC) $$< -d $(RESDESC) -o $$@
$$(ELF-$(1)) : $$(COBJ-$(1)) $$(SOBJ-$(1)) $$(SYMS-$(1)) | $$(BINDIR-$(1))
$(LD) $$(ALL_LDFLAGS) -T $$(SYMS-$(1)) -Wl,-Map=$${@:.elf=.map} $$(COBJ-$(1)) $$(SOBJ-$(1)) -o $$@
$$(BIN-$(1)) : $$(ELF-$(1)) | $$(BINDIR-$(1))
$(OBJCOPY) $$(ALL_OBJCOPYFLAGS) $$< $$@
$$(OUTDIR-$(1)) :
mkdir -p $$@
endef
$(foreach v,$(VC_VERSIONS),$(eval $(call bin_template,hb-$(v),homeboy)))
$(HB-D43J) : ALL_CPPFLAGS += -DVC_VERSION=D43J
$(HB-D43E) : ALL_CPPFLAGS += -DVC_VERSION=D43E
$(HB-PZLJ) : ALL_CPPFLAGS += -DVC_VERSION=PZLJ
$(HB-PZLE) : ALL_CPPFLAGS += -DVC_VERSION=PZLE
$(HB-NACJ) : ALL_CPPFLAGS += -DVC_VERSION=NACJ
$(HB-NACE) : ALL_CPPFLAGS += -DVC_VERSION=NACE
$(HB-NARJ) : ALL_CPPFLAGS += -DVC_VERSION=NARJ
$(HB-NARE) : ALL_CPPFLAGS += -DVC_VERSION=NARE