# 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 # Path definitions PSXSDK_PATH = /usr/local/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 = /usr/local/psxsdk/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 #~ 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 $(CC) $< $(DEFINE) $(CC_FLAGS) -MM > $@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d $(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD $(EXE_PATH)/$(PROJECT).elf: $(OBJECTS) $(LINKER) $^ -o $@ $(LIBS) -Wl,--gc-sections $(GNU_SIZE) $@ $(EXE_PATH)/$(PROJECT).iso: $(EXE_PATH)/$(PROJECT).exe $(SOUND_OBJECTS) $(LEVEL_OBJECTS) $(SPRITE_OBJECTS) mkisofs -o $@ -V $(PROJECT) -sysid PLAYSTATION $(CDROM_ROOT) $(EXE_PATH)/$(PROJECT).exe: $(EXE_PATH)/$(PROJECT).elf $(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 $(BMP2TIM) $< $@ `cat $(word 2,$^)` $(OBJ_FONTS_PATH)/%.TIM: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags $(BMP2TIM) $< $@ `cat $(word 2,$^)` $(OBJ_SPRITES_PATH)/%.CLT: $(SRC_SPRITES_PATH)/%.bmp $(SRC_SPRITES_PATH)/%.flags $(BMP2TIM) $< $@ `cat $(word 2,$^)` $(OBJ_SOUNDS_DIR)/%.VAG: $(SOURCE_SOUNDS_FOLDER)/%.wav wav2vag $^ $@ $(OBJ_LEVELS_DIR)/%.LVL: $(SRC_LEVELS_DIR)/%.LVL cp $^ $@ $(OBJ_LEVELS_DIR)/%.PLT: $(SRC_LEVELS_DIR)/%.PLT cp $^ $@ $(MUSIC_OBJ_DIR)/%.bin: $(MUSIC_SRC_DIR)/%.mp3 $(FFMPEG_DIR)$(FFMPEG) -i $< $(FFMPEG_FLAGS) $@ # ---------------------------------------- # Phony targets # ---------------------------------------- .PHONY: clean run