mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-08 14:56:12 -04:00
90 lines
3.6 KiB
Makefile
90 lines
3.6 KiB
Makefile
ifeq ($(strip $(PSN00BSDK_ROOT)),)
|
|
$(warning Please set PSN00BSDK_ROOT path in your environment. For example:)
|
|
$(warning export PSN00BSDK_ROOT=/usr/local/lib/psn00bsdk)
|
|
$(error Failed to find PSN00BSDK installation path)
|
|
endif
|
|
|
|
.SUFFIXES:
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Configurable options
|
|
#---------------------------------------------------------------------------------
|
|
# Name of the final output
|
|
TARGET := ClassiCube-ps1
|
|
# List of directories containing source code
|
|
SOURCE_DIRS := src src/ps1
|
|
# Directory where object files are placed
|
|
BUILD_DIR := build/ps1
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Compilable files
|
|
#---------------------------------------------------------------------------------
|
|
S_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
|
C_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
|
OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
|
|
|
# Dependency tracking
|
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
|
DEPFILES := $(OBJS:%.o=%.d)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Code generation
|
|
#---------------------------------------------------------------------------------
|
|
CINCLUDES := -I$(PSN00BSDK_ROOT)/include/libpsn00b
|
|
|
|
CFLAGS := -DPLAT_PS1 -DPSN00BSDK=1 -g -Wa,--strip-local-absolute -ffreestanding -fno-builtin -nostdlib -fdata-sections -ffunction-sections -fsigned-char -fno-strict-overflow -msoft-float -march=r3000 -mtune=r3000 -mabi=32 -mno-mt -mno-llsc -Og -mdivide-breaks -G8 -fno-pic -mno-abicalls -mgpopt -mno-extern-sdata
|
|
|
|
# Additional libraries to link against
|
|
# libpsxgpu -> $(PSN00BSDK_ROOT)/lib/libpsn00b/debug/libpsxgpu_exe_gprel.a
|
|
PS1LIBS := libpsxgpu libpsxgte libpsxspu libpsxcd libpsxpress libpsxsio libpsxetc libpsxapi libsmd liblzp libc
|
|
PS1LIBS := $(addprefix $(PSN00BSDK_ROOT)/lib/libpsn00b/debug/, $(PS1LIBS))
|
|
PS1LIBS := $(addsuffix _exe_gprel.a, $(PS1LIBS))
|
|
|
|
LDFLAGS = -g -T$(PSN00BSDK_ROOT)/lib/libpsn00b/ldscripts/exe.ld -nostdlib -Wl,-gc-sections -G8 -static
|
|
LIBS = -lgcc $(PS1LIBS)
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# main targets
|
|
#---------------------------------------------------------------------------------
|
|
default: $(BUILD_DIR) $(TARGET).bin
|
|
|
|
clean:
|
|
rm $(TARGET).bin $(TARGET).cue $(TARGET).exe $(BUILD_DIR)/$(TARGET).elf $(OBJS)
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $(BUILD_DIR)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# executable generation
|
|
#---------------------------------------------------------------------------------
|
|
$(BUILD_DIR)/$(TARGET).elf: $(OBJS)
|
|
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(LDFLAGS) $^ -o $@ $(LIBS)
|
|
|
|
$(TARGET).exe: $(BUILD_DIR)/$(TARGET).elf
|
|
$(PSN00BSDK_ROOT)/bin/elf2x -q $(BUILD_DIR)/$(TARGET).elf $(TARGET).exe
|
|
|
|
$(TARGET).bin: $(TARGET).exe
|
|
$(PSN00BSDK_ROOT)/bin/mkpsxiso -y -o $(TARGET).bin -c $(TARGET).cue misc/ps1/iso.xml
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# object generation
|
|
#---------------------------------------------------------------------------------
|
|
$(BUILD_DIR)/%.o: src/%.c
|
|
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(CFLAGS) $(CINCLUDES) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.o: src/ps1/%.c
|
|
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(CFLAGS) $(CINCLUDES) $(DEPFLAGS) -c $< -o $@
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Dependency tracking
|
|
#---------------------------------------------------------------------------------
|
|
$(DEPFILES):
|
|
|
|
include $(wildcard $(DEPFILES))
|