-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
130 lines (95 loc) · 4.3 KB
/
Makefile
File metadata and controls
130 lines (95 loc) · 4.3 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
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
GFXLIB:=ugfx
include $(GFXLIB)/gfx.mk
include $(GFXLIB)/boards/base/HHK/board.mk
SOURCEDIR = src
BUILDDIR = obj
OUTDIR = dist
DEPDIR = .deps
METADIR = meta
AS:=sh4a_nofpueb-elf-gcc
AS_FLAGS:=-gdwarf-5
SDK_DIR?=/sdk
DEPFLAGS=-MT $@ -MMD -MP -MF $(DEPDIR)/$*.d
WARNINGS=-Wall -Wextra -Wno-prio-ctor-dtor -pedantic -Werror -pedantic-errors
INCLUDES=-I$(SDK_DIR)/include $(GFXINC:%=-I%) -I$(SOURCEDIR)
DEFINES=$(GFXDEFS)
FUNCTION_FLAGS=-flto=auto -ffat-lto-objects -fno-builtin -ffunction-sections -fdata-sections -gdwarf-5 -O3
COMMON_FLAGS=$(FUNCTION_FLAGS) $(INCLUDES) $(WARNINGS) $(DEFINES)
CC:=sh4a_nofpueb-elf-gcc
CC_FLAGS=-std=c23 $(COMMON_FLAGS)
CXX:=sh4a_nofpueb-elf-g++
CXX_FLAGS=-std=c++23 $(COMMON_FLAGS)
LD:=sh4a_nofpueb-elf-g++
LD_FLAGS:=$(FUNCTION_FLAGS) -Wl,--gc-sections --specs=custom-start.specs
LIBS:=-L$(SDK_DIR) -lsdk
READELF:=sh4a_nofpueb-elf-readelf
OBJCOPY:=sh4a_nofpueb-elf-objcopy
STRIP:=sh4a_nofpueb-elf-strip
PYTHON:=python
ADDRESSES := $(shell find $(METADIR) -maxdepth 1 -name 'addresses.*.json')
VERSIONS := $(ADDRESSES:$(METADIR)/addresses.%.json=%)
OVERRIDES := $(foreach json, $(ADDRESSES), $(OUTDIR)/addresses.$(shell $(PYTHON) -c 'import json; print(json.load(open("$(json)"))["safeGuard"])').override)
$(foreach json, $(ADDRESSES), $(eval $(OUTDIR)/addresses.$(shell $(PYTHON) -c 'import json; print(json.load(open("$(json)"))["safeGuard"])').override: $(BUILDDIR)/addresses.$(json:$(METADIR)/addresses.%.json=%).prep))
APP_ELFS := $(VERSIONS:%=$(OUTDIR)/run.%.elf)
APP_BINS := $(APP_ELFS:.elf=.bin)
APP_HHKS := $(APP_ELFS:.elf=.adjusted.hh3)
AS_SOURCES:=$(shell find $(SOURCEDIR) -name '*.S' -not -name '*.template.*')
CC_SOURCES:=$(shell find $(SOURCEDIR) -name '*.c' -not -name '*.template.*') $(GFXSRC)
CXX_SOURCES:=$(shell find $(SOURCEDIR) -name '*.cpp' -not -name '*.template.*')
OBJECTS := $(addprefix $(BUILDDIR)/,$(AS_SOURCES:.S=.o)) \
$(addprefix $(BUILDDIR)/,$(CC_SOURCES:.c=.o)) \
$(addprefix $(BUILDDIR)/,$(CXX_SOURCES:.cpp=.o))
NOLTOOBJS := $(foreach obj, $(OBJECTS), $(if $(findstring /nolto/, $(obj)), $(obj)))
GFXOBJS := $(foreach obj, $(OBJECTS), $(if $(findstring /$(GFXLIB)/, $(obj)), $(obj)))
DEPFILES := $(OBJECTS:$(BUILDDIR)/%.o=$(DEPDIR)/%.d)
bin: $(APP_BINS) Makefile
hhk: $(APP_HHKS) Makefile
elf: $(APP_ELFS) Makefile
overrides: $(OVERRIDES) Makefile
all: bin elf hhk overrides
.DEFAULT_GOAL := all
.SECONDARY: # Prevents intermediate files from being deleted
clean:
rm -rf $(BUILDDIR) $(OUTDIR) $(DEPDIR)
%.bin: %.elf
$(OBJCOPY) --output-target=binary --set-section-flags .bss=alloc,load,contents,data $^ $@
%.hh3: %.elf
$(STRIP) -o $@ $^
$(OUTDIR)/run.%.elf: $(OBJECTS) linker.ld $(BUILDDIR)/addresses.%.o
@mkdir -p $(dir $@)
$(LD) -T linker.ld -Wl,-Map $@.map -o $@ $(LD_FLAGS) $(filter-out linker.ld, $^) $(LIBS)
$(BUILDDIR)/run.%.adjusted.elf: $(OUTDIR)/run.%.elf
@mkdir -p $(dir $@)
$(OBJCOPY) --change-addresses +0x20000 $^ $@
$(OUTDIR)/addresses.%.override:
@mkdir -p $(dir $@)
cp $< $@
$(OUTDIR)/run.%.adjusted.hh3: $(BUILDDIR)/run.%.adjusted.hh3
@mkdir -p $(dir $@)
cp $< $@
$(NOLTOOBJS): FUNCTION_FLAGS+=-fno-lto
$(GFXOBJS): WARNINGS=-Wall -Wextra -Wno-incompatible-pointer-types -Wno-duplicate-decl-specifier -Wno-enum-conversion -Wno-unused-variable
$(BUILDDIR)/%.o: %.S
@mkdir -p $(dir $@)
$(AS) -c $< -o $@ $(AS_FLAGS)
$(BUILDDIR)/%.o: %.c
@mkdir -p $(dir $@)
@mkdir -p $(dir $(DEPDIR)/$<)
$(CC) -c $< -o $@ $(CC_FLAGS) $(DEPFLAGS)
$(BUILDDIR)/%.o: %.cpp
@mkdir -p $(dir $@)
@mkdir -p $(dir $(DEPDIR)/$<)
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(DEPFLAGS)
$(BUILDDIR)/addresses.%.prep: $(METADIR)/addresses.%.json convert_json.py
@mkdir -p $(dir $@)
$(PYTHON) convert_json.py $< $@
$(BUILDDIR)/addresses.%.o: $(SOURCEDIR)/addresses.template.c $(BUILDDIR)/addresses.%.prep
$(CC) -c $< -o $@ $(CC_FLAGS) --embed-dir=$(BUILDDIR) -D PREP_FILE=\<$(@:$(BUILDDIR)/addresses.%.o=addresses.%.prep)\>
#clangd gets confused on these flags
compile_commands.json:
$(MAKE) $(MAKEFLAGS) clean
bear --output $@.tmp -- sh -c "$(MAKE) $(MAKEFLAGS) --keep-going all || exit 0"
#sed -i 's/-m4a-nofpu//' compile_commands.json.tmp
mv compile_commands.json.tmp compile_commands.json
.PHONY: bin elf hhk overrides all clean compile_commands.json
-include $(DEPFILES)