-
Notifications
You must be signed in to change notification settings - Fork 43
/
Makefile.split
executable file
·148 lines (116 loc) · 6.61 KB
/
Makefile.split
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
148
# --------------------------------------
# General Rules
# --------------------------------------
# obtain a list of segments from the *.c files in bin directory
SEGMENTS := \
$(notdir $(basename $(wildcard bin/*.c))) \
$(addprefix $(VERSION)/,$(notdir $(basename $(wildcard bin/$(VERSION)/*.c)))) \
$(addsuffix _skybox,$(notdir $(basename $(wildcard textures/skyboxes/*.png))))
# Directories containing PNG files
TEXTURE_DIRS := \
$(wildcard textures/*/) \
$(filter %/,$(wildcard actors/*/))
# NOTE: textures assume naming convention "texture.<encoding>.png" generates "texture.<encoding>"
ACTOR_GROUPS := \
group0 \
group14 \
group17 \
common0 \
common1
LEVEL_FILES := $(addsuffix leveldata,$(LEVEL_DIRS))
LEVEL_ELF_FILES := $(foreach level_dir,$(LEVEL_DIRS),$(BUILD_DIR)/levels/$(level_dir)leveldata.elf)
SEG_FILES := \
$(SEGMENTS:%=$(BUILD_DIR)/bin/%.elf) \
$(ACTOR_GROUPS:%=$(BUILD_DIR)/actors/%.elf) \
$(LEVEL_FILES:%=$(BUILD_DIR)/levels/%.elf)
YAY0_FILES := \
$(SEGMENTS:%=$(BUILD_DIR)/bin/%.szp) \
$(ACTOR_GROUPS:%=$(BUILD_DIR)/actors/%.szp) \
$(LEVEL_FILES:%=$(BUILD_DIR)/levels/%.szp)
YAY0_OBJ_FILES := $(YAY0_FILES:.szp=.szp.o)
# --------------------------------------
# Actor Rules
# --------------------------------------
# Actor Directories
KOOPA_DIRS :=
MR_I_DIRS := mario2
COINS_DIRS := mist explosion butterfly coin warp_pipe door bowser_key flame blue_fish pebble leaves mario_cap breath_meter power_meter mushroom_1up star sand dirt transparent_star white_particle wooden_signpost tree yoshi
AMP_DIRS := blue_coin_switch water_level_diamond chuckya amp cannon_lid cannon_base cannon_barrel purple_switch checkerboard_platform heart flyguy breakable_box exclamation_box vanilla_exclamation_box goomba bobomb metal_box exclamation_box_outline test_platform koopa_shell skeeter toad penguin ukiki
MARIO_DIRS := mario grindel bully motos pokey rotating_block_fire_bars bubble bowser_flame impact_smoke impact_ring snufit boo scuttlebug snowman spindrift mr_i_eyeball bowser bomb mr_i_iris walk_smoke burn_smoke small_water_splash water_wave sparkle water_splash white_particle_small sparkle_animation king_bobomb koopa_flag koopa chuckya piranha_plant whomp chillychief moneybag wiggler wiggler_body_part lakitu_enemy spiny_egg spiny thwomp bullet_bill heave_ho
# Actor Textures
AMP_CHUCKYA_TEXTURES := $(foreach dir,$(AMP_DIRS), $(wildcard actors/$(dir)/*.png))
COINS_PIPE_TEXTURES := $(foreach dir,$(COINS_DIRS), $(wildcard actors/$(dir)/*.png))
KOOPA_LOG_TEXTURES := $(foreach dir,$(KOOPA_DIRS), $(wildcard actors/$(dir)/*.png))
MARIO_WATER_TEXTURES := $(foreach dir,$(MARIO_DIRS), $(wildcard actors/$(dir)/*.png))
MR_I_SWOOP_TEXTURES := $(foreach dir,$(MR_I_DIRS), $(wildcard actors/$(dir)/*.png))
# Actor dependencies
$(BUILD_DIR)/actors/group0.o: $(MARIO_WATER_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/actors/group14.o: $(KOOPA_LOG_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/actors/group17.o: $(MR_I_SWOOP_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/actors/common0.o: $(AMP_CHUCKYA_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/actors/common1.o: $(COINS_PIPE_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
# Actor Elf Files
$(BUILD_DIR)/actors/group0.elf: SEGMENT_ADDRESS := 0x04000000
$(BUILD_DIR)/actors/group14.elf: SEGMENT_ADDRESS := 0x06000000
$(BUILD_DIR)/actors/group17.elf: SEGMENT_ADDRESS := 0x06000000
$(BUILD_DIR)/actors/common0.elf: SEGMENT_ADDRESS := 0x08000000
$(BUILD_DIR)/actors/common1.elf: SEGMENT_ADDRESS := 0x03000000
# --------------------------------------
# Level Rules
# --------------------------------------
$(BUILD_DIR)/levels/%/leveldata.elf: SEGMENT_ADDRESS := 0x07000000
# TODO: Generate these rules from the level configs?
define level_rules =
$(1)_SEG7_FILES := $$(patsubst %.png,%.inc.c,$$(wildcard levels/$(1)/*.png))
$$(BUILD_DIR)/levels/$(1)/leveldata.o: $$(addprefix $$(BUILD_DIR)/,$$($(1)_SEG7_FILES))
endef
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
$(BUILD_DIR)/level_rules.mk: levels/level_rules.mk levels/level_defines.h
$(call print,Preprocessing level make rules:,$<,$@)
$(V)$(CPP) $(CPPFLAGS) $(VERSION_CFLAGS) -I . -o $@ $<
include $(BUILD_DIR)/level_rules.mk
endif
endif
# --------------------------------------
# Extra Level Rules
# --------------------------------------
$(eval $(call level_rules,intro)) # Intro (Super Mario 64 Logo)
$(eval $(call level_rules,menu)) # Menu (File Select)
# --------------------------------------
# Texture Bin Rules
# --------------------------------------
# Others
SEGMENT2_TEXTURES := $(wildcard $(TEXTURE_DIR)/segment2/*.png)
TITLE_SCREEN_BG_TEXTURES := $(wildcard $(TEXTURE_DIR)/title_screen_bg/*.png)
EFFECT_TEXTURES := $(wildcard $(TEXTURE_DIR)/effect/*.png)
# Texture Files
$(BUILD_DIR)/bin/segment2.o: $(SEGMENT2_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/bin/title_screen_bg.o: $(TITLE_SCREEN_BG_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
$(BUILD_DIR)/bin/effect.o: $(EFFECT_TEXTURES:%.png=$(BUILD_DIR)/%.inc.c)
# Others
$(BUILD_DIR)/bin/segment2.elf: SEGMENT_ADDRESS := 0x02000000
$(BUILD_DIR)/bin/title_screen_bg.elf: SEGMENT_ADDRESS := 0x0A000000
$(BUILD_DIR)/bin/debug_level_select.elf: SEGMENT_ADDRESS := 0x07000000
$(BUILD_DIR)/bin/effect.elf: SEGMENT_ADDRESS := 0x0B000000
# EU segment 19 translations
$(BUILD_DIR)/bin/eu/translation_de.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/eu/translation_en.elf: SEGMENT_ADDRESS := 0x19000000
$(BUILD_DIR)/bin/eu/translation_fr.elf: SEGMENT_ADDRESS := 0x19000000
# --------------------------------------
# Skybox Rules
# --------------------------------------
$(BUILD_DIR)/bin/%_skybox.c: textures/skyboxes/%.png
$(call print,Splitting:,$<,$@)
$(V)$(SKYCONV) --type sky --split $^ $(BUILD_DIR)/bin
$(BUILD_DIR)/bin/%_skybox.elf: SEGMENT_ADDRESS := 0x0A000000
# --------------------------------------
# Misc Rules
# --------------------------------------
# intro and ipl3 textures are not compressed
INTRO_RAW_FILES := $(wildcard $(TEXTURE_DIR)/intro_raw/*.png)
$(BUILD_DIR)/src/goddard/renderer.o: $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(INTRO_RAW_FILES)))
IPL3_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/ipl3_raw/*.png)
IPL3_RAW_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%,$(IPL3_TEXTURE_FILES)))
CRASH_TEXTURE_FILES := $(wildcard $(TEXTURE_DIR)/crash_custom/*.png)
CRASH_TEXTURE_C_FILES := $(addprefix $(BUILD_DIR)/,$(patsubst %.png,%.inc.c,$(CRASH_TEXTURE_FILES)))