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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
# Project-wise definitions
PROJECT = AIRPORT
# Make flags
MAKEFLAGS := -j$(NUMBER_OF_PROCESSORS)
# GNU Toolchain definitions
CC = psx-gcc
LINKER = psx-gcc
GNU_SIZE = mipsel-unknown-elf-size
# Custom define flags for GCC
DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_
DEFINE += -DPSXSDK_DEBUG
DEFINE += -DNO_CDDA
#DEFINE += -DNO_INTRO
# Compiler flags
LIBS= -lfixmath
CC_FLAGS = -Wall -Werror -c -O3 -Wfatal-errors
MKDIR = mkdir
MKDIR_FLAGS = -p
# Path definitions
PSXSDK_PATH = $(HOME)/psxsdk
PATH := $(PATH):$(PSXSDK_PATH)/bin/
PROJECT_DIR = ~/Airport
CDROM_ROOT=$(PROJECT_DIR)/cdimg
BIN_TARGET_PATH = $(PROJECT_DIR)/Bin
#Uncomment this DEFINE below to use Airport together with OpenSend + QPSXSerial toolchain.
#DEFINE += -DSERIAL_INTERFACE
# PSXSDK tools definitions
# ELF2EXE:
ELF2EXE = elf2exe
ELF2EXE_FLAGS = -mark="A homebrew game created with PSXSDK"
LICENSE_FILE = $(PSXSDK_PATH)/share/licenses/infoeur.dat
EXE_PATH = Exe
# PCSX-R
EMULATOR_DIR = ~/pcsxr
EMULATOR = pcsxr
# Uncomment the line below if you get no sound output under Linux.
SOUND_INTERFACE += padsp
EMULATOR_FLAGS = -nogui -psxout
# Objects definition
# Compiled objects list
OBJ_DIR = Obj
SRC_DIR = .
OBJECTS = $(addprefix $(OBJ_DIR)/, main.o System.o Menu.o Gfx.o Pad.o MainMenuBtnAni.o \
LoadMenu.o GameGui.o Sfx.o Camera.o EndAnimation.o \
PSXSDKIntro.o PltParser.o Game.o Font.o MemCard.o \
Aircraft.o Serial.o Timer.o Message.o)
# Source dependencies:
DEPS = $(OBJECTS:.o=.d)
# CD-DA objects:
MUSIC_OBJ_DIR = ../Bin
MUSIC_SRC_DIR = ../Music
MUSIC_TRACKS = $(addprefix $(MUSIC_OBJ_DIR)/, TRACK01.bin TRACK02.bin TRACK03.bin)
FFMPEG = ffmpeg
FFMPEG_DIR =
#FFMPEG_DIR = $(MUSIC_SRC_DIR)/$(FFMPEG)/bin/
FFMPEG_FLAGS = -f s16le -acodec pcm_s16le
# VAG objects:
SOURCE_SOUNDS_FOLDER = ../Sounds
OBJ_SOUNDS_DIR = ../cdimg/DATA/SOUNDS
SOUND_OBJECTS = $(addprefix $(OBJ_SOUNDS_DIR)/, BELL.VAG \
ACCEPT.VAG \
TRAYCL.VAG \
SPINDISK.VAG \
BEEP.VAG \
TAKEOFF1.VAG \
RCTM1F1.VAG \
RCPW1A1.VAG \
RCPM1A1.VAG )
# Level objects:
SRC_LEVELS_DIR = $(PROJECT_DIR)/Levels
OBJ_LEVELS_DIR = $(CDROM_ROOT)/DATA/LEVELS
LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, \
LEVEL1.LVL \
LEVEL2.LVL \
LEVEL3.LVL \
LEVEL18.LVL \
XAMI.LVL \
LEVEL1.PLT \
LEVEL2.PLT \
LEVEL3.PLT \
LEVEL18.PLT \
XAMI.PLT \
EASY.PLT \
TUTORIA1.PLT)
# Sprite objects:
BMP2TIM = bmp2tim
SRC_SPRITES_PATH = $(PROJECT_DIR)/Sprites
OBJ_SPRITES_PATH = $(CDROM_ROOT)/DATA/SPRITES
# NOTE: Fonts, despite still being .TIM files, are separated into another folder,
# so SPRITE_OBJECTS are splitted in two parts.
OBJ_FONTS_PATH = $(CDROM_ROOT)/DATA/FONTS
SPRITE_OBJECTS = $(addprefix $(OBJ_SPRITES_PATH)/, PSXDISK.TIM \
TILESET1.TIM \
TILESET2.TIM \
MAINMENU.TIM \
LOADING.TIM \
PLANE.TIM \
BUTTONS.TIM \
GAMEPLN.TIM \
PLNBLUE.CLT \
BUBBLE.TIM \
GPL.TIM \
OPENSRC.TIM \
MOUSE.TIM \
DEPARR.TIM \
PAGEUPDN.TIM \
BLDNGS1.TIM \
LFRARROW.TIM \
UDNARROW.TIM \
BCNGW.TIM \
MENUSTAR.TIM )
SPRITE_OBJECTS += $(addprefix $(OBJ_FONTS_PATH)/, INTROFNT.TIM \
FONT_1.TIM \
FONT_2.TIM )
# ------------------------------------
# Instructions
# ------------------------------------
$(BIN_TARGET_PATH)/$(PROJECT).bin: $(EXE_PATH)/$(PROJECT).iso
@$(MKDIR) $(BIN_TARGET_PATH) $(MKDIR_FLAGS)
#~ mkpsxiso $< $@ $(LICENSE_FILE) -s $(addprefix --track=, $(MUSIC_TRACKS))
mkpsxiso $< $@ $(LICENSE_FILE) -s
# $(PROJECT).cue is automatically generated by mkpsxiso
rebuild:
make clean
make $(BIN_TARGET_PATH)/$(PROJECT).bin
-include $(DEPS)
clean:
rm -f $(OBJ_DIR)/*.d
rm -f $(OBJ_DIR)/*.o
rm -f $(OBJ_SOUNDS_DIR)/*.VAG
rm -f $(OBJ_LEVELS_DIR)/*.LVL
rm -f $(OBJ_LEVELS_DIR)/*.PLT
rm -f $(OBJ_SPRITES_PATH)/*.TIM
rm -f $(OBJ_FONTS_PATH)/*.TIM
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.c
@$(MKDIR) $(OBJ_DIR) $(MKDIR_FLAGS)
$(CC) $< $(DEFINE) $(CC_FLAGS) -MM > $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d
@$(MKDIR) $(OBJ_DIR) $(MKDIR_FLAGS)
$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD
$(EXE_PATH)/$(PROJECT).elf: $(OBJECTS)
@$(MKDIR) $(EXE_PATH) $(MKDIR_FLAGS)
$(LINKER) $^ -o $@ $(LIBS) -Wl,--gc-sections
$(GNU_SIZE) $@
$(EXE_PATH)/$(PROJECT).iso: $(EXE_PATH)/$(PROJECT).exe $(SOUND_OBJECTS) $(LEVEL_OBJECTS) $(SPRITE_OBJECTS)
@$(MKDIR) $(EXE_PATH) $(MKDIR_FLAGS)
mkisofs -o $@ -V $(PROJECT) -sysid PLAYSTATION $(CDROM_ROOT)
$(EXE_PATH)/$(PROJECT).exe: $(EXE_PATH)/$(PROJECT).elf
@$(MKDIR) $(EXE_PATH) $(MKDIR_FLAGS)
$(ELF2EXE) $< $@ $(ELF2EXE_FLAGS)
cp $@ $(CDROM_ROOT)
run: $(BIN_TARGET_PATH)/$(PROJECT).bin
export PATH=$$PATH:$(EMULATOR_DIR)
$(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS)
$(OBJ_SPRITES_PATH)/%.TIM: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags
@$(MKDIR) $(OBJ_SPRITES_PATH) $(MKDIR_FLAGS)
$(BMP2TIM) $< $@ `cat $(word 2,$^)`
$(OBJ_FONTS_PATH)/%.TIM: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags
@$(MKDIR) $(OBJ_FONTS_PATH) $(MKDIR_FLAGS)
$(BMP2TIM) $< $@ `cat $(word 2,$^)`
$(OBJ_SPRITES_PATH)/%.CLT: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags
@$(MKDIR) $(OBJ_SPRITES_PATH) $(MKDIR_FLAGS)
$(BMP2TIM) $< $@ `cat $(word 2,$^)`
$(OBJ_SOUNDS_DIR)/%.VAG: $(SOURCE_SOUNDS_FOLDER)/%.wav
@$(MKDIR) $(OBJ_SOUNDS_DIR) $(MKDIR_FLAGS)
wav2vag $^ $@
$(OBJ_LEVELS_DIR)/%.LVL: $(SRC_LEVELS_DIR)/%.LVL
@$(MKDIR) $(OBJ_LEVELS_DIR) $(MKDIR_FLAGS)
cp $^ $@
$(OBJ_LEVELS_DIR)/%.PLT: $(SRC_LEVELS_DIR)/%.PLT
@$(MKDIR) $(OBJ_LEVELS_DIR) $(MKDIR_FLAGS)
cp $^ $@
$(MUSIC_OBJ_DIR)/%.bin: $(MUSIC_SRC_DIR)/%.mp3
@$(MKDIR) $(MUSIC_OBJ_DIR) $(MKDIR_FLAGS)
$(FFMPEG_DIR)$(FFMPEG) -i $< $(FFMPEG_FLAGS) $@
# ----------------------------------------
# Phony targets
# ----------------------------------------
.PHONY: clean run
|