aboutsummaryrefslogtreecommitdiff
path: root/Source/Makefile
blob: 7393dd13e7f3254dafc0c522407c5f1267475519 (plain) (blame)
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
# Project-wise definitions
PROJECT = AIRPORT

# 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 -Os -Wfatal-errors

# Path definitions
PSXSDK_PATH = /usr/local/psxsdk
PATH := $(PATH):$(PSXSDK_PATH)/bin/
PROJECT_DIR = ~/$(PROJECT)

#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 = /usr/local/psxsdk/share/licenses/infoeur.dat

# PCSX-R
EMULATOR_DIR = ~/pcsxr
EMULATOR = pcsxr.exe
# 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)
		
# Source dependencies:
DEPS = $(OBJECTS:.o=.d)

# CD-DA objects:
MUSIC_TRACKS = --track=../Bin/TRACK01.bin --track=../Bin/TRACK02.bin --track=../Bin/TRACK03.bin
FFMPEG = ffmpeg
FFMPEG_DIR = ../Music/ffmpeg/bin
FFMPEG_FLAGS = -f s16le -acodec pcm_s16le

# VAG objects:
SOURCE_SOUNDS_FOLDER = ../Sounds
SOUNDS_FOLDER = ../cdimg/DATA/SOUNDS
SOUND_OBJECTS = $(addprefix $(SOUNDS_FOLDER)/,	BELL.VAG		\
												ACCEPT.VAG		\
												TRAYCL.VAG		\
												SPINDISK.VAG	\
												BEEP.VAG		\
												TAKEOFF1.VAG	\
												RCTM1F1.VAG		\
												RCPW1A1.VAG		\
												RCPM1A1.VAG		)
# ------------------------------------
# Instructions
# ------------------------------------

build: sounds levels $(PROJECT).bin

rebuild: clean build

-include $(DEPS)
			
music_objects:	$(addprefix ../Music/, TRACK01.bin TRACK02.bin TRACK03.bin)
			
clean:
	rm -f Obj/*.o
	rm -f ../cdimg/DATA/SOUNDS/*.VAG
	
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d
	$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD
	
$(PROJECT).elf: $(OBJECTS)
	$(LINKER) Obj/*.o -o Exe/$(PROJECT).elf $(LIBS) -Wl,--gc-sections

$(PROJECT).iso: $(PROJECT).exe
#	rm -f $@
	mkisofs -o $(PROJECT).iso -V $(PROJECT) -sysid PLAYSTATION ../cdimg

$(PROJECT).bin: $(PROJECT).iso
	rm -f $@
	rm -f $(PROJECT).cue
	mkpsxiso $(PROJECT).iso $(PROJECT).bin $(LICENSE_FILE) $(MUSIC_TRACKS)
# $(PROJECT).cue is automatically generated by mkpsxiso
	rm -f $^
	mv $@ ../Bin
	mv $(PROJECT).cue ../Bin
	$(GNU_SIZE) Exe/$(PROJECT).elf
	
$(PROJECT).exe: $(PROJECT).elf
	$(ELF2EXE) Exe/$(PROJECT).elf Exe/$(PROJECT).exe $(ELF2EXE_FLAGS)
	cp Exe/$(PROJECT).exe ../cdimg
	
emulator:
	export PATH=$$PATH:$(EMULATOR_DIR)
	$(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS)
	
remove_elf_iso:
	rm -f $(PROJECT).elf cdimg/$(PROJECT).exe $(PROJECT).bin $(PROJECT).cue cdimg/README.txt
	rm -f $(PROJECT).iso $(PROJECT).exe $(PROJECT).elf

tiles:
	rm -f ../cdimg/DATA/SPRITES/*.TIM
	rm -f ../cdimg/DATA/FONTS/*.FNT
	bmp2tim ../Sprites/PSXDisk.bmp 		../cdimg/DATA/SPRITES/PSXDISK.TIM 16 -org=384,0 -mpink
	bmp2tim ../Sprites/IntroFnt.bmp 	../cdimg/DATA/SPRITES/INTROFNT.TIM 16 -org=384,76 -mpink
	bmp2tim ../Sprites/Tileset1.bmp 	../cdimg/DATA/SPRITES/TILESET1.TIM 16 -org=384,0 -mpink
	bmp2tim ../Sprites/Tileset2.bmp 	../cdimg/DATA/SPRITES/TILESET2.TIM 16 -org=640,0 -mpink
	bmp2tim ../Sprites/MainMenu.bmp 	../cdimg/DATA/SPRITES/MAINMENU.TIM 16 -org=768,384 -mpink
	bmp2tim ../Sprites/Loading.bmp 		../cdimg/DATA/SPRITES/LOADING.TIM 4 -mpink -org=768,256 -clut=384,496
	bmp2tim ../Sprites/Plane.bmp 		../cdimg/DATA/SPRITES/PLANE.TIM 16 -org=536,240 -mpink	
	bmp2tim ../Sprites/Buttons.bmp 		../cdimg/DATA/SPRITES/BUTTONS.TIM 16 -org=384,240 -mpink
	bmp2tim ../Sprites/GamePln.bmp 		../cdimg/DATA/SPRITES/GAMEPLN.TIM 8 -mpink -org=800,256 -clut=384,497
	bmp2tim ../Sprites/GamePln_Blue.bmp ../cdimg/DATA/SPRITES/PLNBLUE.CLT 8 -mpink -clut=384,501
	bmp2tim ../Sprites/Bubble.bmp 		../cdimg/DATA/SPRITES/BUBBLE.TIM 8 -org=584,240 -mpink -clut=384,498
	bmp2tim ../Sprites/Font_1_4bit.bmp	../cdimg/DATA/FONTS/FONT_1.FNT 4 -org=960,256 -mpink -clut=384,500
	bmp2tim ../Sprites/Font_2_4bit.bmp	../cdimg/DATA/FONTS/FONT_2.FNT 4 -org=768,288 -mpink -clut=384,499
	bmp2tim ../Sprites/GPL_4bit.bmp		../cdimg/DATA/SPRITES/GPL.TIM 4 -org=384,174 -mpink -clut=384,502
	bmp2tim ../Sprites/OpSrc_8bit.bmp	../cdimg/DATA/SPRITES/OPENSRC.TIM 8 -org=464,0 -mpink -clut=384,503
	bmp2tim ../Sprites/Mouse.bmp		../cdimg/DATA/SPRITES/MOUSE.TIM 16 -org=596,240 -mpink
	bmp2tim ../Sprites/DepArr.bmp		../cdimg/DATA/SPRITES/DEPARR.TIM 16 -org=552,240 -mpink
	bmp2tim ../Sprites/PageUpDn.bmp		../cdimg/DATA/SPRITES/PAGEUPDN.TIM 16 -org=504,240 -mpink
	bmp2tim ../Sprites/Bldngs1.bmp		../cdimg/DATA/SPRITES/BLDNGS1.TIM 16 -org=640,128 -mpink

$(SOUNDS_FOLDER)/%.VAG: $(SOURCE_SOUNDS_FOLDER)/%.wav
	wav2vag $^	$@
	
sounds: $(SOUND_OBJECTS)
	
levels: LEVEL1.LVL LEVEL1.PLT

%.LVL:
	cp ../Levels/$@ ../cdimg/DATA/LEVELS/
	
%.PLT:
	cp ../Levels/$@ ../cdimg/DATA/LEVELS

music: clean_music music_objects

clean_music:
	rm -f ../Music/*.bin

%.bin: %.mp3
	rm -f ../Bin/$@1
	$(FFMPEG) -i $< $(FFMPEG_FLAGS) $@
	cp ../Music/$@ ../Bin/