From 11defee46f355583d60f1d1dc5fe46db8806bd42 Mon Sep 17 00:00:00 2001 From: ProjectOblivion Date: Mon, 24 Feb 2025 23:45:02 +0000 Subject: [PATCH 1/2] Segregated everything by platform --- Makefile | 245 +++++++++------------------------------------ Makefile.psp.mk | 40 ++++++++ Makefile.psx.mk | 148 ++++++++++++++++++++++++++- Makefile.saturn.mk | 31 ++++++ 4 files changed, 262 insertions(+), 202 deletions(-) diff --git a/Makefile b/Makefile index d7b78d8c5c..2abbee11a8 100644 --- a/Makefile +++ b/Makefile @@ -1,73 +1,19 @@ +# Make configuration .SECONDEXPANSION: .SECONDARY: .DEFAULT_GOAL := all -# Variables -# User environment +# Environment +ifeq ($(VERSION),) +$(info VERSION not defined, defaulting to VERSION=us) VERSION ?= us - -# VERSION=us -# main dra ric weapon -PSX_US_GAME := main dra ric weapon -# are cat cen chi dai dre lib mad no0 no1 no2 no3 no4 np3 nz0 nz1 sel st0 top wrp -PSX_US_STAGE := cen chi dre lib no0 no1 no3 np3 nz0 st0 wrp mad sel no4 -# rare rcat rcen rchi rdai rlib rno0 rno1 rno2 rno3 rno4 rnz0 rnz1 rtop rwrp -PSX_US_REV_STAGE:= rwrp -# bo0 bo1 bo2 bo3 bo4 bo5 bo6 bo7 mar rbo0 rbo1 rbo2 rbo3 rbo4 rbo5 rbo6 rbo7 rbo8 -PSX_US_ALL_BOSS := bo4 mar rbo3 -# tt_000 tt_001 tt_002 tt_003 tt_004 tt_005 tt_006 -PSX_US_SERVANTS := tt_000 tt_001 tt_002 tt_003 tt_004 - -# VERSION=hd -PSX_HD_GAME := dra ric -PSX_HD_STAGE := cen wrp -PSX_HD_REV_STAGE:= -PSX_HD_ALL_BOSS := -PSX_HD_SERVANTS := tt_000 - -# VERSION=pspeu -PSP_EU_GAME := dra -PSP_EU_STAGE := lib no4 st0 wrp -PSP_EU_REV_STAGE:= -PSP_EU_ALL_BOSS := -PSP_EU_SERVANTS := tt_000 - -# VERSION=saturn -SATURN_GAME := GAME ALUCARD -SATURN_STAGE := STAGE_02 WARP -SATURN_REV_STAGE:= -SATURN_ALL_BOSS := -SATURN_SERVANTS := T_BAT - -ifeq ($(VERSION),us) -VERSION_PREFIX := PSX_US -else ifeq ($(VERSION),hd) -VERSION_PREFIX := PSX_HD -else ifeq ($(VERSION),pspeu) -VERSION_PREFIX := PSP_EU -else ifeq ($(VERSION),saturn) -VERSION_PREFIX := SATURN endif -$(VERSION_PREFIX)_ALLSTAGES := $($(VERSION_PREFIX)_STAGE) $($(VERSION_PREFIX)_REV_STAGE) -$(VERSION_PREFIX)_EXTRACT_TARGETS := $($(VERSION_PREFIX)_GAME) $(addprefix st,$($(VERSION_PREFIX)_ALLSTAGES)) $(addprefix bo,$($(VERSION_PREFIX)_ALL_BOSS)) $($(VERSION_PREFIX)_SERVANTS) -$(VERSION_PREFIX)_BUILD_TARGETS := $($(VERSION_PREFIX)_GAME) $($(VERSION_PREFIX)_ALLSTAGES) $($(VERSION_PREFIX)_ALL_BOSS) $($(VERSION_PREFIX)_SERVANTS) - # Compilers -CC1PSX := ./bin/cc1-psx-26 CROSS := mipsel-linux-gnu- -AS := $(CROSS)as -CC := $(CC1PSX) LD := $(CROSS)ld -CPP := $(CROSS)cpp OBJCOPY := $(CROSS)objcopy -CC_FLAGS += -G0 -w -O2 -funsigned-char -fpeephole -ffunction-cse -fpcc-struct-return -fcommon -fverbose-asm -msoft-float -g -CPP_FLAGS += -Iinclude -Iinclude/psxsdk -undef -Wall -fno-builtin -CPP_FLAGS += -Dmips -D__GNUC__=2 -D__OPTIMIZE__ -D__mips__ -D__mips -Dpsx -D__psx__ -D__psx -D_PSYQ -D__EXTENSIONS__ -D_MIPSEL -D_LANGUAGE_C -DLANGUAGE_C -DNO_LOGS -DHACKS -DUSE_INCLUDE_ASM -CPP_FLAGS += -D_internal_version_$(VERSION) -DSOTN_STR -LD_FLAGS := -nostdlib --no-check-sections - # Directories ASM_DIR := asm/$(VERSION) BIN_DIR := bin @@ -84,7 +30,11 @@ MAIN_TARGET := $(BUILD_DIR)/main BASE_SYMBOLS := $(CONFIG_DIR)/symbols.$(VERSION).txt # Tooling -PYTHON := python3 +SHELL = /bin/bash -e -o pipefail +VENV_DIR ?= .venv +PYTHON_BIN := $(VENV_DIR)/bin +PYTHON := $(PYTHON_BIN)/python3 +PIP := $(PYTHON_BIN)/pip3 SPLAT := splat split ASMDIFFER_DIR := $(TOOLS_DIR)/asm-differ ASMDIFFER_APP := $(ASMDIFFER_DIR)/diff.py @@ -108,72 +58,16 @@ PNG2S := $(PYTHON) $(TOOLS_DIR)/png2s.py ICONV := iconv --from-code=UTF-8 --to-code=Shift-JIS DIRT_PATCHER := $(PYTHON) $(TOOLS_DIR)/dirt_patcher.py SHASUM := shasum -SATURN_SPLITTER_DIR := $(TOOLS_DIR)/saturn-splitter -SATURN_SPLITTER_APP := $(SATURN_SPLITTER_DIR)/rust-dis/target/release/rust-dis -VENV_PATH ?= .venv -export PATH := $(VENV_PATH)/bin:$(PATH) +export PATH := $(VENV_DIR)/bin:$(PATH) + +# Dependencies +DEPENDENCIES = $(ASMDIFFER_APP) $(M2CTX_APP) $(M2C_APP) $(MASPSX_APP) $(GO) python-dependencies SOTNDISK_SOURCES := $(shell find tools/sotn-disk -name '*.go') SOTNASSETS_SOURCES := $(shell find tools/sotn-assets -name '*.go') CHECK_FILES := $(shell cut -d' ' -f3 config/check.$(VERSION).sha) -# Platform specific variables -ifneq (,$(filter $(VERSION),us hd)) # Both us and hd versions use the PSX platform -# flags -AS_FLAGS += -Iinclude -march=r3000 -mtune=r3000 -no-pad-sections -O1 -G0 -PSXCC_FLAGS := -quiet -mcpu=3000 -fgnu-linker -mgas -gcoff - -# libs -PSXLIBS := $(addprefix lib, c c2 api etc card gpu gs gte cd snd spu) - -# Files -PSXLIB_DIRS := $(addprefix psxsdk/, . $(PSXLIBS)) -PSXLIB_DATA_DIRS := $(addprefix data/, . $(PSXLIB_DIRS)) -MAIN_ASM_DIRS := $(addprefix $(ASM_DIR)/main/,. $(PSXLIB_DIRS) data $(PSXLIB_DATA_DIRS)) -MAIN_SRC_DIRS := $(addprefix $(SRC_DIR)/main/,. $(PSXLIB_DIRS)) - -MAIN_S_FILES := $(wildcard $(addsuffix /*.s, $(MAIN_ASM_DIRS))) -MAIN_C_FILES := $(wildcard $(addsuffix /*.c, $(MAIN_SRC_DIRS))) -MAIN_O_FILES := $(patsubst %.s,%.s.o,$(MAIN_S_FILES)) -MAIN_O_FILES += $(patsubst %.c,%.c.o,$(MAIN_C_FILES)) -MAIN_O_FILES := $(addprefix $(BUILD_DIR)/,$(MAIN_O_FILES)) -else ifeq ($(VERSION),pspeu) -# Flags -AS_FLAGS += -EL -I include/ -G0 -march=allegrex -mabi=eabi -MWCCPSP_FLAGS := -gccinc -Iinclude -D_internal_version_$(VERSION) -c -lang c -sdatathreshold 0 -char unsigned -fl divbyzerocheck -MWLDPSP_FLAGS := -partial -nostdlib -msgstyle gcc -sym full,elf -g - -# Tools -ALLEGREX_AS := $(BIN_DIR)/allegrex-as -AS := $(ALLEGREX_AS) -WIBO := $(BIN_DIR)/wibo -MWCCPSP := $(BIN_DIR)/mwccpsp.exe -CCPSP := MWCIncludes=$(BIN_DIR) $(WIBO) $(MWCCPSP) - -MWASPSP := $(WIBO) $(BIN_DIR)/asm_psp_elf.exe -gnu -MWLDPSP := $(WIBO) $(BIN_DIR)/mwldpsp.exe - -MWCCGAP_DIR := $(TOOLS_DIR)/mwccgap -MWCCGAP_APP := $(MWCCGAP_DIR)/mwccgap.py -MWCCGAP := $(PYTHON) $(MWCCGAP_APP) -else ifeq ($(VERSION),saturn) -SATURN_ASSETS_DIR := $(ASSETS_DIR)/saturn -SATURN_LIB_TARGETS := lib/gfs lib/spr lib/dma lib/scl lib/csh lib/per lib/cdc lib/mth lib/bup lib/sys - -DOSEMU := dosemu -DOSEMU_FLAGS := -quiet -dumb -f ./dosemurc -K . -E -DOSEMU_APP := $(DOSEMU) $(DOSEMU_FLAGS) -SATURN_TOOLCHAIN := bin/cygnus-2.7-96Q3-bin -CC1_SATURN := $(BUILD_DIR)/CC1.EXE -SATURN_ADPCM_EXTRACT_APP := $(SATURN_SPLITTER_DIR)/adpcm-extract/target/release/adpcm-extract - -SATURN_BUILD_PRGS := $(addprefix $(BUILD_DIR)/,$(addsuffix .PRG,$(SATURN_BUILD_TARGETS))) -SATURN_LIB_OBJECTS := $(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(SATURN_LIB_TARGETS))) -SATURN_PCM_FILES := $(wildcard disks/saturn/SD/*.PCM) -SATURN_WAV_FILES := $(patsubst disks/saturn/SD/%.PCM,$(SATURN_ASSETS_DIR)/SD/%.wav,$(SATURN_PCM_FILES)) -endif - # Functions define list_src_files $(foreach dir,$(ASM_DIR)/$(1),$(wildcard $(dir)/**.s)) @@ -220,6 +114,7 @@ define link endef # Helper Functions +# These will eventually be merged with the equivalent PSX functions define list_src_files_psp $(foreach dir,$(ASM_DIR)/$(1),$(wildcard $(dir)/**.s)) $(foreach dir,$(ASM_DIR)/$(1)/data,$(wildcard $(dir)/**.s)) @@ -247,7 +142,13 @@ define link_with_deadstrip -T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).$(1).txt endef -.PHONY: build +ifneq (,$(filter $(VERSION),us hd)) # Both us and hd versions use the PSX platform +include Makefile.psx.mk +else ifeq ($(VERSION),pspeu) +include Makefile.psp.mk +else ifeq ($(VERSION),saturn) +include Makefile.saturn.mk +endif ##@ Variables ##@ @@ -256,15 +157,19 @@ endef ##@ Primary Targets ##@ +.PHONY: all all: ##@ (Default) build and check all: build check +.PHONY: extract extract: ##@ split game files into assets and assembly extract: extract_$(VERSION) +.PHONY: build build: ##@ build game files build: build_$(VERSION) +.PHONY: clean clean: ##@ clean extracted files, assets, and build artifacts git clean -fdx assets/ git clean -fdx asm/$(VERSION)/ @@ -298,9 +203,11 @@ help: ##@ Print listing of key targets with their descriptions }; \ }' +.PHONY: format format: ##@ Format source code, clean symbols, other linting format: format-src format-tools format-symbols format-license +.PHONY: format-src format-src: bin/clang-format cargo run --release --manifest-path ./tools/lints/sotn-lint/Cargo.toml ./src @# find explainer: @@ -316,10 +223,14 @@ format-src: bin/clang-format -o \( -type f \( -name '*.c' -o -name '*.h' \) \) \ -print0 \ | xargs -0 -n10 -P$$(nproc) bin/clang-format -i + +.PHONY: format-tools format-tools: black tools/*.py black tools/splat_ext/*.py black tools/split_jpt_yaml/*.py + +.PHONY: format-symbols format-symbols: VERSION=us $(PYTHON) ./tools/symbols.py sort VERSION=hd $(PYTHON) ./tools/symbols.py sort @@ -363,12 +274,16 @@ format-license: python3 ./tools/lint-license.py include/memcard.h AGPL-3.0-or-later # fast-format +.PHONY: ff ff: MAKEFLAGS += --jobs ff: $(MAKE) format +.PHONY: patch patch: $(DIRT_PATCHER) config/dirt.$(VERSION).json + +.PHONY: check check: ##@ compare built files to original game files check: config/check.$(VERSION).sha patch $(CHECK_FILES) @$(SHASUM) --check $< | awk 'BEGIN{ FS=": " }; { \ @@ -380,76 +295,13 @@ check: config/check.$(VERSION).sha patch $(CHECK_FILES) system("tput setaf " color "; printf " $$2 "; tput sgr0"); \ printf " ]\n"; \ }' | column --separator $$'\t' --table + +.PHONY: expected expected: check mkdir -p expected/build rm -rf expected/build/$(VERSION) cp -r build/$(VERSION) expected/build/ -main: $(MAIN_TARGET).exe -main_dirs: - $(foreach dir,$(MAIN_ASM_DIRS) $(MAIN_SRC_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(dir))) -$(MAIN_TARGET).exe: $(MAIN_TARGET).elf - $(OBJCOPY) -O binary $< $@ -$(MAIN_TARGET).elf: $(MAIN_O_FILES) $(BUILD_DIR)/main.ld $(CONFIG_DIR)/undefined_syms.$(VERSION).txt $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).main.txt - $(LD) $(LD_FLAGS) -o $@ \ - -Map $(MAIN_TARGET).map \ - -T $(BUILD_DIR)/main.ld \ - -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ - -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).main.txt - -# Weapon overlays -WEAPON0_FILES := $(foreach num,$(shell seq -w 000 058),$(BUILD_DIR)/weapon/f0_$(num).bin $(BUILD_DIR)/weapon/w0_$(num).bin) -WEAPON1_FILES := $(foreach num,$(shell seq -w 000 058),$(BUILD_DIR)/weapon/f1_$(num).bin $(BUILD_DIR)/weapon/w1_$(num).bin) -WEAPON_DIRS := $(BUILD_DIR)/$(ASSETS_DIR)/weapon $(BUILD_DIR)/$(ASM_DIR)/weapon/data $(BUILD_DIR)/$(SRC_DIR)/weapon $(BUILD_DIR)/weapon -weapon: $(WEAPON_DIRS) $(BUILD_DIR)/WEAPON0.BIN -$(WEAPON_DIRS): - @mkdir -p $@ -$(BUILD_DIR)/WEAPON0.BIN: $(WEAPON0_FILES) - cat $^ > $@ -$(BUILD_DIR)/weapon/f%.bin: $(BUILD_DIR)/weapon/f%.elf - $(OBJCOPY) -O binary $< $@ -$(BUILD_DIR)/weapon/w%.bin: $(BUILD_DIR)/weapon/w%.elf - $(OBJCOPY) -O binary $< $@ - dd status=none if=/dev/zero of=$@ bs=1 seek=12287 count=1 conv=notrunc -$(ASM_DIR)/weapon/data/w_%.data.s: # create a fake empty file if all the data has been imported - touch $@ -$(ASM_DIR)/weapon/data/w_%.sbss.s: # create a fake empty file if all the bss section has been imported - touch $@ -$(BUILD_DIR)/weapon/w0_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o - $(LD) $(LD_FLAGS) --no-check-sections -o $@ \ - -Map $(BUILD_DIR)/weapon/w0_$*.map \ - -T weapon0.ld \ - -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ - -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).weapon.txt \ - -T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).weapon.txt \ - $^ -$(BUILD_DIR)/weapon/w1_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o - $(LD) $(LD_FLAGS) --no-check-sections -o $@ \ - -Map $(BUILD_DIR)/weapon/w1_$*.map \ - -T weapon1.ld \ - -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ - -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).weapon.txt \ - -T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).weapon.txt \ - $^ -$(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o: $(SRC_DIR)/weapon/w_%.c $(MASPSX_APP) $(CC1PSX) | weapon_dirs - $(CPP) $(CPP_FLAGS) -lang-c -DW_$* $< | $(SOTNSTR) | $(ICONV) | $(CC) $(CC_FLAGS) $(PSXCC_FLAGS) | $(MASPSX) | $(AS) $(AS_FLAGS) -o $@ -$(BUILD_DIR)/$(SRC_DIR)/weapon/w_029.c.o: $(SRC_DIR)/weapon/w_029.c $(MASPSX_APP) $(CC1PSX) | weapon_dirs - $(CPP) $(CPP_FLAGS) -lang-c -DW_029 $< | $(SOTNSTR) | $(ICONV) | $(CC) $(CC_FLAGS) $(PSXCC_FLAGS) -O1 | $(MASPSX) | $(AS) $(AS_FLAGS) -o $@ -$(BUILD_DIR)/weapon/f0_%.elf: $(BUILD_DIR)/$(ASSETS_DIR)/weapon/f_%.o | weapon_dirs - $(LD) -r -b binary -o $@ $< -$(BUILD_DIR)/weapon/f1_%.elf: $(BUILD_DIR)/$(ASSETS_DIR)/weapon/f_%.o - $(LD) -r -b binary -o $@ $< -$(BUILD_DIR)/$(ASSETS_DIR)/weapon/%.o: $(ASSETS_DIR)/weapon/%.png - ./tools/png2bin.py $< $@ - -ifneq (,$(filter $(VERSION),us hd)) # Both us and hd versions use the PSX platform -include Makefile.psx.mk -else ifeq ($(VERSION),pspeu) -include Makefile.psp.mk -else ifeq ($(VERSION),saturn) -include Makefile.saturn.mk -endif - # Force to extract all the assembly code regardless if a function is already decompiled force_extract: mv src src_tmp @@ -488,6 +340,7 @@ context: ##@ create a context for decomp.me. Set the SOURCE variable prior to ca VERSION=$(VERSION) $(M2CTX) $(SOURCE) @echo ctx.c has been updated. +.PHONY: extract_% extract_disk: ##@ Extract game files from a disc image. extract_disk: extract_disk_$(VERSION) disk_prepare: build $(SOTNDISK) @@ -544,6 +397,7 @@ disk_debug: disk_prepare $(SOTNDISK) make build/sotn.$(VERSION).cue $(DISK_DIR) $(CONFIG_DIR)/disk.us.lba # put this here as both PSX HD and PSP use it +.PHONY: extract_% extract_disk_psp%: mkdir -p disks/psp$* 7z x -y disks/sotn.psp$*.iso -odisks/psp$*/ @@ -573,14 +427,16 @@ duplicates-report: --threshold .90 \ --output-file ../../gh-duplicates/duplicates.txt +.PHONY: update-dependencies python-dendencies python-dependencies: # the python setup cannot depend on the virtualenv # because it may not be set up yet - [ -d $(VENV_PATH) ] || python3 -m venv $(VENV_PATH) + [ -d $(VENV_DIR) ] || python3 -m venv $(VENV_DIR) pip install -r $(TOOLS_DIR)/requirements-python.txt +.PHONY: update-dependencies update-dependencies: ##@ update tools and internal dependencies -update-dependencies: $(ASMDIFFER_APP) $(M2CTX_APP) $(M2C_APP) $(MASPSX_APP) $(GO) $(ALLEGREX_AS) python-dependencies +update-dependencies: $(DEPENDENCIES) rm $(SOTNDISK) && make $(SOTNDISK) || true rm $(SOTNASSETS) && make $(SOTNASSETS) || true git clean -fd bin/ @@ -638,12 +494,11 @@ $(BUILD_DIR)/$(ASSETS_DIR)/%.dec.o: $(ASSETS_DIR)/%.dec $(BUILD_DIR)/$(ASSETS_DIR)/%.png.o: $(ASSETS_DIR)/%.png touch $@ -SHELL = /bin/bash -e -o pipefail - ##@ ##@ Disc Dumping Targets ##@ +.PHONY: dump_disk dump_disk_% dump_disk: ##@ dump a physical game disk dump_disk: dump_disk_$(VERSION) dump_disk_eu: dump_disk_cd @@ -659,6 +514,7 @@ dump_disk_xbla%: dump_disk_not_supported dump_disk_cd: disks/sotn.$(VERSION).cue dump_disk_not_supported: @echo "Automated dumping of $(VERSION) is not supported" >&2 && exit 1 + disks/sotn.%.bin disks/sotn.%.cue: @( which -s cdrdao && which -s toc2cue ) || (echo "cdrdao(1) and toc2cue(1) must be installed" && exit 1 ) cd disks && \ @@ -671,14 +527,3 @@ disks/sotn.%.bin disks/sotn.%.cue: sotn.$*.toc && \ toc2cue sotn.$*.toc sotn.$*.cue && \ rm sotn.$*.toc - -.PHONY: all clean patch check build expected -.PHONY: format ff format-src format-tools format-symbols -.PHONY: main dra ric weapon -.PHONY: cen chi dre lib mad no0 no1 no3 no4 np3 nz0 st0 wrp rwrp -.PHONY: mar bo4 rbo3 -.PHONY: tt_000 tt_001 tt_002 tt_003 tt_004 -.PHONY: %_dirs -.PHONY: extract extract_% -.PHONY: update-dependencies python-dendencies -.PHONY: dump_disk dump_disk_% diff --git a/Makefile.psp.mk b/Makefile.psp.mk index 52d6cd43ad..2e4376cd7f 100644 --- a/Makefile.psp.mk +++ b/Makefile.psp.mk @@ -1,3 +1,43 @@ +# Game OVL options: main dra ric weapon +# Both stage and reverse stage fall under "STAGES" variable, they are split only for readability. +# Stage OVL options: are cat cen chi dai dre lib mad no0 no1 no2 no3 no4 np3 nz0 nz1 sel st0 top wrp +# Reverse stage OVL options: rare rcat rcen rchi rdai rlib rno0 rno1 rno2 rno3 rno4 rnz0 rnz1 rtop rwrp +# Boss OVL options: bo0 bo1 bo2 bo3 bo4 bo5 bo6 bo7 mar rbo0 rbo1 rbo2 rbo3 rbo4 rbo5 rbo6 rbo7 rbo8 +# Servant OVL options: tt_000 tt_001 tt_002 tt_003 tt_004 tt_005 tt_006 + +VERSION_PREFIX := PSP_EU +PSP_EU_GAME := dra +PSP_EU_STAGES := lib no4 st0 wrp +PSP_EU_STAGES += +PSP_EU_BOSSES := +PSP_EU_SERVANTS := tt_000 + +# Extract targets is for when stages and bosses need to be prefixed with st and bo respectively +$(VERSION_PREFIX)_EXTRACT_TARGETS := $($(VERSION_PREFIX)_GAME) $(addprefix st,$($(VERSION_PREFIX)_STAGES)) $(addprefix bo,$($(VERSION_PREFIX)_BOSSES)) $($(VERSION_PREFIX)_SERVANTS) +# Build targets is for when the non-prefixed name is needed +$(VERSION_PREFIX)_BUILD_TARGETS := $($(VERSION_PREFIX)_GAME) $($(VERSION_PREFIX)_STAGES) $($(VERSION_PREFIX)_BOSSES) $($(VERSION_PREFIX)_SERVANTS) + +# Flags +AS_FLAGS += -EL -I include/ -G0 -march=allegrex -mabi=eabi +MWCCPSP_FLAGS := -gccinc -Iinclude -D_internal_version_$(VERSION) -c -lang c -sdatathreshold 0 -char unsigned -fl divbyzerocheck +MWLDPSP_FLAGS := -partial -nostdlib -msgstyle gcc -sym full,elf -g + +# Tools +ALLEGREX_AS := $(BIN_DIR)/allegrex-as +AS := $(ALLEGREX_AS) +WIBO := $(BIN_DIR)/wibo +MWCCPSP := $(BIN_DIR)/mwccpsp.exe +CCPSP := MWCIncludes=$(BIN_DIR) $(WIBO) $(MWCCPSP) + +MWASPSP := $(WIBO) $(BIN_DIR)/asm_psp_elf.exe -gnu +MWLDPSP := $(WIBO) $(BIN_DIR)/mwldpsp.exe + +MWCCGAP_DIR := $(TOOLS_DIR)/mwccgap +MWCCGAP_APP := $(MWCCGAP_DIR)/mwccgap.py +MWCCGAP := $(PYTHON) $(MWCCGAP_APP) + +DEPENDENCIES += $(ALLEGREX_AS) + # PSP specific targets build_pspeu: $(addsuffix _psp,$(PSP_EU_EXTRACT_TARGETS)) diff --git a/Makefile.psx.mk b/Makefile.psx.mk index d97edcbf6f..88d2d52350 100644 --- a/Makefile.psx.mk +++ b/Makefile.psx.mk @@ -1,3 +1,66 @@ +# Game OVL options: main dra ric weapon +# Both stage and reverse stage fall under "STAGES" variable, they are split only for readability. +# Stage OVL options: are cat cen chi dai dre lib mad no0 no1 no2 no3 no4 np3 nz0 nz1 sel st0 top wrp +# Reverse stage OVL options: rare rcat rcen rchi rdai rlib rno0 rno1 rno2 rno3 rno4 rnz0 rnz1 rtop rwrp +# Boss OVL options: bo0 bo1 bo2 bo3 bo4 bo5 bo6 bo7 mar rbo0 rbo1 rbo2 rbo3 rbo4 rbo5 rbo6 rbo7 rbo8 +# Servant OVL options: tt_000 tt_001 tt_002 tt_003 tt_004 tt_005 tt_006 + +ifeq ($(VERSION),us) +VERSION_PREFIX := PSX_US +else ifeq ($(VERSION),hd) +VERSION_PREFIX := PSX_HD +endif + +PSX_US_GAME := main dra ric weapon +PSX_US_STAGES := cen chi dre lib no0 no1 no3 np3 nz0 st0 wrp mad sel no4 +PSX_US_STAGES += rwrp # Second line for stages for future readability +PSX_US_BOSSES := bo4 mar rbo3 # Second line for stages for future readability +PSX_US_SERVANTS := tt_000 tt_001 tt_002 tt_003 tt_004 + +# VERSION=hd +PSX_HD_GAME := dra ric +PSX_HD_STAGES := cen wrp +PSX_HD_STAGES += +PSX_HD_BOSSES := +PSX_HD_SERVANTS := tt_000 + +# Extract targets is for when stages and bosses need to be prefixed with st and bo respectively +$(VERSION_PREFIX)_EXTRACT_TARGETS := $($(VERSION_PREFIX)_GAME) $(addprefix st,$($(VERSION_PREFIX)_STAGES)) $(addprefix bo,$($(VERSION_PREFIX)_BOSSES)) $($(VERSION_PREFIX)_SERVANTS) +# Build targets is for when the non-prefixed name is needed +$(VERSION_PREFIX)_BUILD_TARGETS := $($(VERSION_PREFIX)_GAME) $($(VERSION_PREFIX)_STAGES) $($(VERSION_PREFIX)_BOSSES) $($(VERSION_PREFIX)_SERVANTS) + +# compiler +CC1PSX := ./bin/cc1-psx-26 +CC := $(CC1PSX) +AS := $(CROSS)as +CPP := $(CROSS)cpp + +# flags +CC_FLAGS += -G0 -w -O2 -funsigned-char -fpeephole -ffunction-cse -fpcc-struct-return -fcommon -fverbose-asm -msoft-float -g +CPP_FLAGS += -Iinclude -Iinclude/psxsdk -undef -Wall -fno-builtin +CPP_FLAGS += -Dmips -D__GNUC__=2 -D__OPTIMIZE__ -D__mips__ -D__mips -Dpsx -D__psx__ -D__psx -D_PSYQ -D__EXTENSIONS__ -D_MIPSEL -D_LANGUAGE_C -DLANGUAGE_C -DNO_LOGS -DHACKS -DUSE_INCLUDE_ASM +CPP_FLAGS += -D_internal_version_$(VERSION) -DSOTN_STR +AS_FLAGS += -Iinclude -march=r3000 -mtune=r3000 -no-pad-sections -O1 -G0 +PSXCC_FLAGS := -quiet -mcpu=3000 -fgnu-linker -mgas -gcoff +LD_FLAGS := -nostdlib --no-check-sections + +# libs +PSXLIBS := $(addprefix lib, c c2 api etc card gpu gs gte cd snd spu) + +# Files +PSXLIB_DIRS := $(addprefix psxsdk/, . $(PSXLIBS)) +PSXLIB_DATA_DIRS := $(addprefix data/, . $(PSXLIB_DIRS)) +MAIN_ASM_DIRS := $(addprefix $(ASM_DIR)/main/,. $(PSXLIB_DIRS) data $(PSXLIB_DATA_DIRS)) +MAIN_SRC_DIRS := $(addprefix $(SRC_DIR)/main/,. $(PSXLIB_DIRS)) + +MAIN_S_FILES := $(wildcard $(addsuffix /*.s, $(MAIN_ASM_DIRS))) +MAIN_C_FILES := $(wildcard $(addsuffix /*.c, $(MAIN_SRC_DIRS))) +MAIN_O_FILES := $(patsubst %.s,%.s.o,$(MAIN_S_FILES)) +MAIN_O_FILES += $(patsubst %.c,%.c.o,$(MAIN_C_FILES)) +MAIN_O_FILES := $(addprefix $(BUILD_DIR)/,$(MAIN_O_FILES)) + +DEPENDENCIES += $(MASPSX_APP) + # PSX specific targets extract_us: $(addprefix $(BUILD_DIR)/,$(addsuffix .ld,$(PSX_US_EXTRACT_TARGETS))) $(PNG2S) bdecode config/gfx.game.json disks/us assets/game @@ -102,12 +165,26 @@ $(BUILD_DIR)/assets/st/sel/memcard_%.png.o: assets/st/sel/memcard_%.png $(AS) $(AS_FLAGS) -o $(BUILD_DIR)/assets/st/sel/memcard_$*.pal.o $(BUILD_DIR)/assets/st/sel/memcard_$*.pal.s rm $(BUILD_DIR)/assets/st/sel/memcard_$*.pal.s - # anything from MAD is an exception and it should be ignored $(BUILD_DIR)/$(ASSETS_DIR)/st/mad/%.o: touch $@ +.PHONY: main +main: $(MAIN_TARGET).exe +.PHONY: %_dirs +main_dirs: + $(foreach dir,$(MAIN_ASM_DIRS) $(MAIN_SRC_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(dir))) +$(MAIN_TARGET).exe: $(MAIN_TARGET).elf + $(OBJCOPY) -O binary $< $@ +$(MAIN_TARGET).elf: $(MAIN_O_FILES) $(BUILD_DIR)/main.ld $(CONFIG_DIR)/undefined_syms.$(VERSION).txt $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).main.txt + $(LD) $(LD_FLAGS) -o $@ \ + -Map $(MAIN_TARGET).map \ + -T $(BUILD_DIR)/main.ld \ + -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ + -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).main.txt + # Game category structure +.PHONY: dra dra: $(BUILD_DIR)/DRA.BIN $(BUILD_DIR)/DRA.BIN: $(BUILD_DIR)/dra.elf $(OBJCOPY) -O binary $< $@ @@ -117,6 +194,7 @@ $(BUILD_DIR)/SEL.BIN: $(BUILD_DIR)/stsel.elf $(OBJCOPY) -O binary $< $@ # Richter category structure +.PHONY: ric ric: $(BUILD_DIR)/RIC.BIN $(BUILD_DIR)/RIC.BIN: $(BUILD_DIR)/ric.elf $(OBJCOPY) -O binary $< $@ @@ -124,84 +202,98 @@ $(BUILD_DIR)/ric.elf: $(call list_o_files,ric) $(call link,ric,$@) # Stage category structure +.PHONY: cen cen: $(BUILD_DIR)/CEN.BIN $(BUILD_DIR)/F_CEN.BIN $(BUILD_DIR)/CEN.BIN: $(BUILD_DIR)/stcen.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_CEN.BIN: $(GFXSTAGE) e assets/st/cen $@ +.PHONY: chi chi: $(BUILD_DIR)/CHI.BIN $(BUILD_DIR)/F_CHI.BIN $(BUILD_DIR)/CHI.BIN: $(BUILD_DIR)/stchi.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_CHI.BIN: $(GFXSTAGE) e assets/st/chi $@ +.PHONY: dre dre: $(BUILD_DIR)/DRE.BIN $(BUILD_DIR)/F_DRE.BIN $(BUILD_DIR)/DRE.BIN: $(BUILD_DIR)/stdre.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_DRE.BIN: $(GFXSTAGE) e assets/st/dre $@ +.PHONY: lib lib: $(BUILD_DIR)/LIB.BIN $(BUILD_DIR)/F_LIB.BIN $(BUILD_DIR)/LIB.BIN: $(BUILD_DIR)/stlib.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_LIB.BIN: $(GFXSTAGE) e assets/st/lib $@ +.PHONY: mad mad: $(BUILD_DIR)/MAD.BIN $(BUILD_DIR)/F_MAD.BIN $(BUILD_DIR)/MAD.BIN: $(BUILD_DIR)/stmad.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_MAD.BIN: $(GFXSTAGE) e assets/st/mad $@ + PHONY: no0 no0: $(BUILD_DIR)/NO0.BIN $(BUILD_DIR)/F_NO0.BIN $(BUILD_DIR)/NO0.BIN: $(BUILD_DIR)/stno0.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NO0.BIN: $(GFXSTAGE) e assets/st/no0 $@ +.PHONY: no1 no1: $(BUILD_DIR)/NO1.BIN $(BUILD_DIR)/F_NO1.BIN $(BUILD_DIR)/NO1.BIN: $(BUILD_DIR)/stno1.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NO1.BIN: $(GFXSTAGE) e assets/st/no1 $@ +.PHONY: no3 no3: $(BUILD_DIR)/NO3.BIN $(BUILD_DIR)/F_NO3.BIN $(BUILD_DIR)/NO3.BIN: $(BUILD_DIR)/stno3.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NO3.BIN: $(GFXSTAGE) e assets/st/no3 $@ +.PHONY: no4 no4: $(BUILD_DIR)/NO4.BIN $(BUILD_DIR)/F_NO4.BIN $(BUILD_DIR)/NO4.BIN: $(BUILD_DIR)/stno4.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NO4.BIN: $(GFXSTAGE) e assets/st/no4 $@ +.PHONY: np3 np3: $(BUILD_DIR)/NP3.BIN $(BUILD_DIR)/F_NP3.BIN $(BUILD_DIR)/NP3.BIN: $(BUILD_DIR)/stnp3.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NP3.BIN: $(GFXSTAGE) e assets/st/np3 $@ +.PHONY: nz0 nz0: $(BUILD_DIR)/NZ0.BIN $(BUILD_DIR)/F_NZ0.BIN $(BUILD_DIR)/NZ0.BIN: $(BUILD_DIR)/stnz0.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_NZ0.BIN: $(GFXSTAGE) e assets/st/nz0 $@ +.PHONY: st0 st0: $(BUILD_DIR)/ST0.BIN $(BUILD_DIR)/F_ST0.BIN $(BUILD_DIR)/ST0.BIN: $(BUILD_DIR)/stst0.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_ST0.BIN: $(GFXSTAGE) e assets/st/st0 $@ +.PHONY: wrp wrp: $(BUILD_DIR)/WRP.BIN $(BUILD_DIR)/F_WRP.BIN $(BUILD_DIR)/WRP.BIN: $(BUILD_DIR)/stwrp.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_WRP.BIN: $(GFXSTAGE) e assets/st/wrp $@ +.PHONY: rwrp rwrp: $(BUILD_DIR)/RWRP.BIN $(BUILD_DIR)/F_RWRP.BIN $(BUILD_DIR)/RWRP.BIN: $(BUILD_DIR)/strwrp.elf $(OBJCOPY) -O binary $< $@ @@ -209,18 +301,21 @@ $(BUILD_DIR)/F_RWRP.BIN: $(GFXSTAGE) e assets/st/rwrp $@ # Boss category structure +.PHONY: bo4 bo4: $(BUILD_DIR)/BO4.BIN $(BUILD_DIR)/F_BO4.BIN $(BUILD_DIR)/BO4.BIN: $(BUILD_DIR)/bobo4.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_BO4.BIN: $(GFXSTAGE) e assets/boss/bo4 $@ +.PHONY: mar mar: $(BUILD_DIR)/MAR.BIN $(BUILD_DIR)/F_MAR.BIN $(BUILD_DIR)/MAR.BIN: $(BUILD_DIR)/bomar.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR)/F_MAR.BIN: $(GFXSTAGE) e assets/boss/mar $@ +.PHONY: rbo3 rbo3: $(BUILD_DIR)/RBO3.BIN $(BUILD_DIR)/F_RBO3.BIN $(BUILD_DIR)/RBO3.BIN: $(BUILD_DIR)/borbo3.elf $(OBJCOPY) -O binary $< $@ @@ -228,6 +323,7 @@ $(BUILD_DIR)/F_RBO3.BIN: $(GFXSTAGE) e assets/boss/rbo3 $@ # servant (familiar) targets +.PHONY: tt_000 tt_001 tt_002 tt_003 tt_004 tt_000: $(BUILD_DIR)/TT_000.BIN tt_001: $(BUILD_DIR)/TT_001.BIN tt_002: $(BUILD_DIR)/TT_002.BIN @@ -250,6 +346,7 @@ mad_fix: stmad_dirs $$(call list_o_files,st/mad) $$(call list_o_files,st) -T $(CONFIG_DIR)/undefined_funcs_auto.stmad.txt $(OBJCOPY) -O binary $(BUILD_DIR)/stmad_fix.elf $(BUILD_DIR)/MAD.BIN +.PHONY: %_dirs tt_%_dirs: $(foreach dir,$(ASM_DIR)/servant/tt_$* $(ASM_DIR)/servant/tt_$*/data $(SRC_DIR)/servant/tt_$* $(ASSETS_DIR)/servant/tt_$*,$(shell mkdir -p $(BUILD_DIR)/$(dir))) bo%_dirs: @@ -272,4 +369,51 @@ $(BUILD_DIR)/stsel.elf: $$(call list_o_files,st/sel) $$(call list_shared_o_files $(BUILD_DIR)/st%.elf: $$(call list_st_o_files,st/$$*) $$(call list_shared_o_files,st) $(call link,st$*,$@) $(BUILD_DIR)/bo%.elf: $$(call list_st_o_files,boss/$$*) $$(call list_shared_o_files,boss) - $(call link,bo$*,$@) \ No newline at end of file + $(call link,bo$*,$@) + +# Weapon overlays +WEAPON0_FILES := $(foreach num,$(shell seq -w 000 058),$(BUILD_DIR)/weapon/f0_$(num).bin $(BUILD_DIR)/weapon/w0_$(num).bin) +WEAPON1_FILES := $(foreach num,$(shell seq -w 000 058),$(BUILD_DIR)/weapon/f1_$(num).bin $(BUILD_DIR)/weapon/w1_$(num).bin) +WEAPON_DIRS := $(BUILD_DIR)/$(ASSETS_DIR)/weapon $(BUILD_DIR)/$(ASM_DIR)/weapon/data $(BUILD_DIR)/$(SRC_DIR)/weapon $(BUILD_DIR)/weapon + +.PHONY: weapon +weapon: $(WEAPON_DIRS) $(BUILD_DIR)/WEAPON0.BIN +$(WEAPON_DIRS): + @mkdir -p $@ +$(BUILD_DIR)/WEAPON0.BIN: $(WEAPON0_FILES) + cat $^ > $@ +$(BUILD_DIR)/weapon/f%.bin: $(BUILD_DIR)/weapon/f%.elf + $(OBJCOPY) -O binary $< $@ +$(BUILD_DIR)/weapon/w%.bin: $(BUILD_DIR)/weapon/w%.elf + $(OBJCOPY) -O binary $< $@ + dd status=none if=/dev/zero of=$@ bs=1 seek=12287 count=1 conv=notrunc +$(ASM_DIR)/weapon/data/w_%.data.s: # create a fake empty file if all the data has been imported + touch $@ +$(ASM_DIR)/weapon/data/w_%.sbss.s: # create a fake empty file if all the bss section has been imported + touch $@ +$(BUILD_DIR)/weapon/w0_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o + $(LD) $(LD_FLAGS) --no-check-sections -o $@ \ + -Map $(BUILD_DIR)/weapon/w0_$*.map \ + -T weapon0.ld \ + -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ + -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).weapon.txt \ + -T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).weapon.txt \ + $^ +$(BUILD_DIR)/weapon/w1_%.elf: $(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.data.s.o $(BUILD_DIR)/$(ASM_DIR)/weapon/data/w_%.sbss.s.o + $(LD) $(LD_FLAGS) --no-check-sections -o $@ \ + -Map $(BUILD_DIR)/weapon/w1_$*.map \ + -T weapon1.ld \ + -T $(CONFIG_DIR)/undefined_syms.$(VERSION).txt \ + -T $(CONFIG_DIR)/undefined_syms_auto.$(VERSION).weapon.txt \ + -T $(CONFIG_DIR)/undefined_funcs_auto.$(VERSION).weapon.txt \ + $^ +$(BUILD_DIR)/$(SRC_DIR)/weapon/w_%.c.o: $(SRC_DIR)/weapon/w_%.c $(MASPSX_APP) $(CC1PSX) | weapon_dirs + $(CPP) $(CPP_FLAGS) -lang-c -DW_$* $< | $(SOTNSTR) | $(ICONV) | $(CC) $(CC_FLAGS) $(PSXCC_FLAGS) | $(MASPSX) | $(AS) $(AS_FLAGS) -o $@ +$(BUILD_DIR)/$(SRC_DIR)/weapon/w_029.c.o: $(SRC_DIR)/weapon/w_029.c $(MASPSX_APP) $(CC1PSX) | weapon_dirs + $(CPP) $(CPP_FLAGS) -lang-c -DW_029 $< | $(SOTNSTR) | $(ICONV) | $(CC) $(CC_FLAGS) $(PSXCC_FLAGS) -O1 | $(MASPSX) | $(AS) $(AS_FLAGS) -o $@ +$(BUILD_DIR)/weapon/f0_%.elf: $(BUILD_DIR)/$(ASSETS_DIR)/weapon/f_%.o | weapon_dirs + $(LD) -r -b binary -o $@ $< +$(BUILD_DIR)/weapon/f1_%.elf: $(BUILD_DIR)/$(ASSETS_DIR)/weapon/f_%.o + $(LD) -r -b binary -o $@ $< +$(BUILD_DIR)/$(ASSETS_DIR)/weapon/%.o: $(ASSETS_DIR)/weapon/%.png + ./tools/png2bin.py $< $@ diff --git a/Makefile.saturn.mk b/Makefile.saturn.mk index 06380f1047..02f340de0f 100644 --- a/Makefile.saturn.mk +++ b/Makefile.saturn.mk @@ -1,3 +1,34 @@ +# Saturn is special and does not yet conform +VERSION_PREFIX := SATURN +SATURN_GAME := GAME ALUCARD +SATURN_STAGES := STAGE_02 WARP +SATURN_STAGES += +SATURN_BOSSES := +SATURN_SERVANTS := T_BAT + +# Extract targets is for when stages and bosses need to be prefixed with st and bo respectively +$(VERSION_PREFIX)_EXTRACT_TARGETS := $($(VERSION_PREFIX)_GAME) $(addprefix st,$($(VERSION_PREFIX)_STAGES)) $(addprefix bo,$($(VERSION_PREFIX)_BOSSES)) $($(VERSION_PREFIX)_SERVANTS) +# Build targets is for when the non-prefixed name is needed +$(VERSION_PREFIX)_BUILD_TARGETS := $($(VERSION_PREFIX)_GAME) $($(VERSION_PREFIX)_STAGES) $($(VERSION_PREFIX)_BOSSES) $($(VERSION_PREFIX)_SERVANTS) + +SATURN_SPLITTER_DIR := $(TOOLS_DIR)/saturn-splitter +SATURN_SPLITTER_APP := $(SATURN_SPLITTER_DIR)/rust-dis/target/release/rust-dis +SATURN_ASSETS_DIR := $(ASSETS_DIR)/saturn +SATURN_LIB_TARGETS := lib/gfs lib/spr lib/dma lib/scl lib/csh lib/per lib/cdc lib/mth lib/bup lib/sys + +DOSEMU := dosemu +DOSEMU_FLAGS := -quiet -dumb -f ./dosemurc -K . -E +DOSEMU_APP := $(DOSEMU) $(DOSEMU_FLAGS) +SATURN_TOOLCHAIN := bin/cygnus-2.7-96Q3-bin +CC1_SATURN := $(BUILD_DIR)/CC1.EXE +SATURN_ADPCM_EXTRACT_APP := $(SATURN_SPLITTER_DIR)/adpcm-extract/target/release/adpcm-extract + +SATURN_BUILD_PRGS := $(addprefix $(BUILD_DIR)/,$(addsuffix .PRG,$(SATURN_BUILD_TARGETS))) +SATURN_LIB_OBJECTS := $(addprefix $(BUILD_DIR)/,$(addsuffix .o,$(SATURN_LIB_TARGETS))) +SATURN_PCM_FILES := $(wildcard disks/saturn/SD/*.PCM) +SATURN_WAV_FILES := $(patsubst disks/saturn/SD/%.PCM,$(SATURN_ASSETS_DIR)/SD/%.wav,$(SATURN_PCM_FILES)) +DEPENDENCIES += $(SATURN_SPLITTER_APP) + # Saturn specific targets .PHONY: saturn saturn: build_saturn check_saturn From 8a6479c648f5902c9130426ec75d7b6e4b3092e4 Mon Sep 17 00:00:00 2001 From: ProjectOblivion Date: Tue, 25 Feb 2025 14:35:12 +0000 Subject: [PATCH 2/2] Python fix --- Makefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2abbee11a8..97ee4fa463 100644 --- a/Makefile +++ b/Makefile @@ -32,9 +32,10 @@ BASE_SYMBOLS := $(CONFIG_DIR)/symbols.$(VERSION).txt # Tooling SHELL = /bin/bash -e -o pipefail VENV_DIR ?= .venv -PYTHON_BIN := $(VENV_DIR)/bin -PYTHON := $(PYTHON_BIN)/python3 -PIP := $(PYTHON_BIN)/pip3 +#PYTHON_BIN := $(VENV_DIR)/bin +#PYTHON := $(PYTHON_BIN)/python3 +PYTHON := python3 +#PIP := $(PYTHON_BIN)/pip3 SPLAT := splat split ASMDIFFER_DIR := $(TOOLS_DIR)/asm-differ ASMDIFFER_APP := $(ASMDIFFER_DIR)/diff.py