mirror of
https://github.com/zeldaret/ph
synced 2026-05-23 15:01:37 -04:00
132 lines
3.8 KiB
Makefile
132 lines
3.8 KiB
Makefile
ifeq ($(REGION), EUR)
|
|
GAME_NAME := ph_eur
|
|
GAME_CODE := AZEP01
|
|
else ifeq ($(REGION), USA)
|
|
GAME_NAME := ph_usa
|
|
GAME_CODE := AZEE01
|
|
else ifneq ($(REGION),)
|
|
$(error Unknown region '$(REGION)')
|
|
endif
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
WINE :=
|
|
else
|
|
WINE ?= wine
|
|
PYTHON ?= python3.11
|
|
endif
|
|
|
|
PYTHON ?= python
|
|
DSD ?= ./dsd
|
|
|
|
ROOT := $(shell pwd)
|
|
BUILD_DIR := build
|
|
TARGET_DIR := $(BUILD_DIR)/$(GAME_NAME)
|
|
TOOLS_DIR := tools
|
|
BASE_DIR := $(GAME_NAME)
|
|
ARM7_BIOS := arm7_bios.bin
|
|
DELINK_DIR := $(TARGET_DIR)/delink
|
|
|
|
CXX_FILES := $(shell find src -name *.cpp) $(shell find libs -name *.cpp)
|
|
C_FILES := $(shell find src -name *.c) $(shell find libs -name *.c)
|
|
CXX_OBJS = $(CXX_FILES:%.cpp=$(TARGET_DIR)/%.cpp.o)
|
|
C_OBJS = $(C_FILES:%.c=$(TARGET_DIR)/%.c.o)
|
|
CXX_CTXS = $(CXX_FILES:%.cpp=$(TARGET_DIR)/%.cpp.ctx)
|
|
C_CTXS = $(C_FILES:%.c=$(TARGET_DIR)/%.c.ctx)
|
|
|
|
DELINK_OBJS = $(shell find $(DELINK_DIR) -name *.o)
|
|
# ALL_OBJS = $(CXX_OBJS:$(TARGET_DIR)/%=%) $(C_OBJS:$(TARGET_DIR)/%=%) $(DELINK_OBJS:$(TARGET_DIR)/%=%)
|
|
ALL_OBJS = $(DELINK_OBJS:$(TARGET_DIR)/%=%)
|
|
|
|
OV_BINS := $(wildcard $(TARGET_DIR)/overlays/*.bin)
|
|
OV_LZS = $(OV_BINS:%.bin=%.lz)
|
|
|
|
NDS_FILE := $(GAME_NAME).nds
|
|
BASE_ROM := baserom_$(GAME_NAME).nds
|
|
CHECKSUM := $(GAME_NAME).sha1
|
|
|
|
MW_VER := 2.0/sp1p5
|
|
MW_CC := $(ROOT)/$(TOOLS_DIR)/mwccarm/$(MW_VER)/mwccarm.exe
|
|
MW_LD := $(ROOT)/$(TOOLS_DIR)/mwccarm/$(MW_VER)/mwldarm.exe
|
|
MW_LICENSE := $(ROOT)/$(TOOLS_DIR)/mwccarm/license.dat
|
|
LCF_FILE := $(ROOT)/$(BUILD_DIR)/$(GAME_NAME)/arm9_linker_script.lcf
|
|
OBJS_FILE := $(ROOT)/$(BUILD_DIR)/arm9_objects.txt
|
|
|
|
CC_FLAGS := -O4,p -enum int -char signed -str noreuse -proc arm946e -gccext,on -fp soft -inline on,noauto -Cpp_exceptions off -RTTI off -interworking -sym on -gccinc -i include -i libs/c/include -i libs/cpp/include -nolink -d $(REGION) -msgstyle gcc
|
|
C_FLAGS := -lang=c
|
|
CXX_FLAGS := -lang=c++
|
|
LD_FLAGS := -proc arm946e -nostdlib -interworking -nodead -m Entry -map closure,unused -o main.bin -msgstyle gcc
|
|
|
|
.PHONY: help
|
|
help:
|
|
@echo "Usage:"
|
|
@echo "make extract .................... Extracts provided base ROMs"
|
|
@echo "make extract REGION=(USA|EUR) ... Extracts specific base ROM"
|
|
@echo "make eur ........................ Builds European ROM"
|
|
@echo "make usa ........................ Builds American ROM"
|
|
@echo "make clean ...................... Clean up build files"
|
|
|
|
.PHONY: eur
|
|
eur:
|
|
$(MAKE) all REGION=EUR
|
|
|
|
.PHONY: usa
|
|
usa:
|
|
$(MAKE) all REGION=USA
|
|
|
|
.PHONY: all
|
|
all: rom
|
|
sha1sum $(NDS_FILE)
|
|
sha1sum -c $(CHECKSUM)
|
|
|
|
ifneq (,$(wildcard $(ARM7_BIOS)))
|
|
ARM7_BIOS_FLAG = --arm7-bios $(ARM7_BIOS)
|
|
endif
|
|
|
|
.PHONY: rom
|
|
rom: arm9
|
|
$(DSD) rom build $(ARM7_BIOS_FLAG) --extract-path $(BASE_DIR) --rom $(NDS_FILE)
|
|
|
|
.PHONY: extract
|
|
extract: tools
|
|
ifeq (,$(REGION))
|
|
$(MAKE) extract REGION=EUR
|
|
$(MAKE) extract REGION=USA
|
|
else
|
|
$(DSD) rom extract $(ARM7_BIOS_FLAG) --rom $(BASE_ROM) --output-path $(BASE_DIR)
|
|
endif
|
|
|
|
.PHONY: delink
|
|
delink:
|
|
ifeq (,$(REGION))
|
|
$(MAKE) delink REGION=EUR
|
|
$(MAKE) delink REGION=USA
|
|
else
|
|
$(DSD) delink --config-path config/$(GAME_CODE)/arm9/config.yaml --elf-path $(DELINK_DIR)
|
|
endif
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf build/
|
|
|
|
.PHONY: lcf
|
|
lcf:
|
|
$(DSD) lcf --config-path config/$(GAME_CODE)/arm9/config.yaml --output-path $(BUILD_DIR)/$(GAME_NAME)/arm9_linker_script.lcf
|
|
|
|
$(CXX_OBJS): $(TARGET_DIR)/%.o: % $(TARGET_DIR)/%.ctx
|
|
mkdir -p $(dir $@)
|
|
LM_LICENSE_FILE=$(MW_LICENSE) $(WINE) $(MW_CC) $(CC_FLAGS) $(CXX_FLAGS) $< -o $@
|
|
# $(TOOLS_DIR)/elf/elfkill -s $< -e $@
|
|
|
|
$(C_OBJS): $(TARGET_DIR)/%.o: % $(TARGET_DIR)/%.ctx
|
|
mkdir -p $(dir $@)
|
|
LM_LICENSE_FILE=$(MW_LICENSE) $(WINE) $(MW_CC) $(CC_FLAGS) $(C_FLAGS) $< -o $@
|
|
# $(TOOLS_DIR)/elf/elfkill -s $< -e $@
|
|
|
|
$(CXX_CTXS) $(C_CTXS): $(TARGET_DIR)/%.ctx: %
|
|
mkdir -p $(dir $@)
|
|
$(PYTHON) $(TOOLS_DIR)/m2ctx.py -f $@ $<
|
|
|
|
.PHONY: arm9
|
|
arm9: lcf $(CXX_OBJS) $(C_OBJS)
|
|
@cd $(TARGET_DIR) && LM_LICENSE_FILE=$(MW_LICENSE) $(WINE) $(MW_LD) $(LD_FLAGS) $(LCF_FILE) $(ALL_OBJS)
|