ClassiCube/misc/ps2/Makefile
2024-09-21 08:37:01 +10:00

99 lines
3.2 KiB
Makefile

ifeq ($(strip $(PS2SDK)),)
$(error "PS2SDK must be set in your environment")
endif
SOURCE_DIRS := src third_party/bearssl/src misc/ps2
BUILD_DIR = build-ps2
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)
IOP_MODS:= DEV9_irx.o NETMAN_irx.o SMAP_irx.o USBD_irx.o BDM_irx.o BDMFS_FATFS_irx.o USBMASS_BD_irx.o USBHDFSD_irx.o USBMOUSE_irx.o USBKBD_irx.o
TARGET = ClassiCube-ps2
EE_OBJS = $(OBJS) $(patsubst %.o, $(BUILD_DIR)/%.o, $(IOP_MODS))
EE_LIBS = -lpatches -lpad -lpacket -ldma -lgraph -ldraw -lc -lps2ip -lnetman -lmc -lmouse -lkbd
EE_INCS := -I$(PS2SDK)/ee/include -I$(PS2SDK)/common/include -Ithird_party/bearssl/inc
EE_CFLAGS := -D_EE -G0 -O2 -Wall -gdwarf-2 -gz -DPLAT_PS2
EE_LDFLAGS := -L$(PS2SDK)/ee/lib -Wl,-zmax-page-size=128
EE_LINKFILE := $(PS2SDK)/ee/startup/linkfile
all: $(BUILD_DIR) $(TARGET)-min.elf
clean:
rm -f $(TARGET)-min.elf $(TARGET).elf $(EE_OBJS)
$(BUILD_DIR):
mkdir -p $@
include $(PS2SDK)/samples/Makefile.pref
# Networking IRX modules
$(BUILD_DIR)/DEV9_irx.c: $(PS2SDK)/iop/irx/ps2dev9.irx
bin2c $< $@ DEV9_irx
$(BUILD_DIR)/NETMAN_irx.c: $(PS2SDK)/iop/irx/netman.irx
bin2c $< $@ NETMAN_irx
$(BUILD_DIR)/SMAP_irx.c: $(PS2SDK)/iop/irx/smap.irx
bin2c $< $@ SMAP_irx
# USB storage IRX modules
$(BUILD_DIR)/USBD_irx.c: $(PS2SDK)/iop/irx/usbd.irx
bin2c $< $@ USBD_irx
$(BUILD_DIR)/BDM_irx.c: $(PS2SDK)/iop/irx/bdm.irx
bin2c $< $@ BDM_irx
$(BUILD_DIR)/BDMFS_FATFS_irx.c: $(PS2SDK)/iop/irx/bdmfs_fatfs.irx
bin2c $< $@ BDMFS_FATFS_irx
$(BUILD_DIR)/USBMASS_BD_irx.c: $(PS2SDK)/iop/irx/usbmass_bd.irx
bin2c $< $@ USBMASS_BD_irx
$(BUILD_DIR)/USBHDFSD_irx.c: $(PS2SDK)/iop/irx/usbhdfsd.irx
bin2c $< $@ USBHDFSD_irx
# USB input IRX modules
$(BUILD_DIR)/USBMOUSE_irx.c: $(PS2SDK)/iop/irx/ps2mouse.irx
bin2c $< $@ USBMOUSE_irx
$(BUILD_DIR)/USBKBD_irx.c: $(PS2SDK)/iop/irx/ps2kbd.irx
bin2c $< $@ USBKBD_irx
#---------------------------------------------------------------------------------
# executable generation
#---------------------------------------------------------------------------------
$(TARGET).elf : $(EE_OBJS)
$(EE_CC) -T$(EE_LINKFILE) -O2 -o $(TARGET).elf $(EE_OBJS) $(EE_LDFLAGS) $(EE_LIBS)
$(TARGET)-min.elf : $(TARGET).elf
$(EE_STRIP) $(TARGET).elf -o $(TARGET)-min.elf
#---------------------------------------------------------------------------------
# object generation
#---------------------------------------------------------------------------------
$(BUILD_DIR)/%.o: src/%.c
$(EE_CC) $(DEPFLAGS) $(EE_CFLAGS) $(EE_INCS) -c $< -o $@
$(BUILD_DIR)/%.o: third_party/bearssl/src/%.c
$(EE_CC) $(DEPFLAGS) $(EE_CFLAGS) $(EE_INCS) -c $< -o $@
$(BUILD_DIR)/%.o: misc/ps2/%.S
$(EE_CC) $(DEPFLAGS) $(EE_CFLAGS) $(EE_INCS) -c $< -o $@
$(BUILD_DIR)/%.o: $(BUILD_DIR)/%.c # IOP modules
$(EE_CC) $(EE_CFLAGS) $(EE_INCS) -c $< -o $@
# Dependency tracking
$(DEPFILES):
include $(wildcard $(DEPFILES))