From 72969fee7ec7427e643b831290a91be62d219d7f Mon Sep 17 00:00:00 2001 From: Vencislav Atanasov Date: Fri, 13 Mar 2026 00:00:24 +0200 Subject: [PATCH] 3ds: Makefile improvements - Allow overriding of the smdhtool and 3dsxtool programs - Introduce dependencies in ctru.make for 3dsx and cia packages - Build these packages when the binary is built - Copy instead of moving the cia package when building a zip - Properly clean all build artifacts when make clean is used Change-Id: I2069bcc44d6ab6031ef61ed9980f92ff9a913bc9 --- packaging/ctru/ctru.make | 65 +++++++++++++++++++++++++++++----------- tools/buildzip.pl | 2 +- tools/configure | 2 +- tools/root.make | 3 +- 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/packaging/ctru/ctru.make b/packaging/ctru/ctru.make index 90dd6be959..2bcd7bd50c 100644 --- a/packaging/ctru/ctru.make +++ b/packaging/ctru/ctru.make @@ -56,16 +56,15 @@ ENABLE_L2_CACHE := false .SECONDEXPANSION: # $$(OBJ) is not populated until after this -MAKEROM ?= makerom -MAKEROM_ARGS := -elf "$(BINARY).elf" -rsf "$(RSF_PATH)" -banner "$(BUILDDIR)/banner.bnr" -icon "$(BUILDDIR)/icon.icn" -DAPP_TITLE="$(APP_TITLE)" -DAPP_PRODUCT_CODE="$(PRODUCT_CODE)" -DAPP_UNIQUE_ID="$(UNIQUE_ID)" -DAPP_ENCRYPTED="$(APP_ENCRYPTED)" -DAPP_SYSTEM_MODE="$(SYSTEM_MODE)" -DAPP_SYSTEM_MODE_EXT="$(SYSTEM_MODE_EXT)" -DAPP_CATEGORY="$(CATEGORY)" -DAPP_USE_ON_SD="$(USE_ON_SD)" -DAPP_MEMORY_TYPE="$(MEMORY_TYPE)" -DAPP_CPU_SPEED="$(CPU_SPEED)" -DAPP_ENABLE_L2_CACHE="$(ENABLE_L2_CACHE)" -MAKEROM_ARGS += -major $(VERSION_MAJOR) -minor $(VERSION_MINOR) -micro $(VERSION_MICRO) +SMDH_PATH := $(BUILDDIR)/rockbox.smdh +3DSX_PATH := $(BUILDDIR)/rockbox.3dsx -ifneq ($(strip $(LOGO)),) - MAKEROM_ARGS += -logo "$(LOGO)" -endif -ifneq ($(strip $(ROMFS)),) - MAKEROM_ARGS += -DAPP_ROMFS="$(ROMFS)" -endif +BANNER_PATH := $(BUILDDIR)/rockbox.bnr +ICON_PATH := $(BUILDDIR)/rockbox.icn +CIA_PATH := $(BUILDDIR)/rockbox.cia + +SMDHTOOL ?= smdhtool +3DSXTOOL ?= 3dsxtool BANNERTOOL ?= bannertool @@ -81,17 +80,47 @@ else BANNER_AUDIO_ARG := -a endif -# main binary +MAKEROM ?= makerom +MAKEROM_ARGS := -DAPP_TITLE="$(APP_TITLE)" -DAPP_PRODUCT_CODE="$(PRODUCT_CODE)" -DAPP_UNIQUE_ID="$(UNIQUE_ID)" \ + -DAPP_ENCRYPTED="$(APP_ENCRYPTED)" -DAPP_SYSTEM_MODE="$(SYSTEM_MODE)" \ + -DAPP_SYSTEM_MODE_EXT="$(SYSTEM_MODE_EXT)" -DAPP_CATEGORY="$(CATEGORY)" -DAPP_USE_ON_SD="$(USE_ON_SD)" \ + -DAPP_MEMORY_TYPE="$(MEMORY_TYPE)" -DAPP_CPU_SPEED="$(CPU_SPEED)" \ + -DAPP_ENABLE_L2_CACHE="$(ENABLE_L2_CACHE)" \ + -major $(VERSION_MAJOR) -minor $(VERSION_MINOR) -micro $(VERSION_MICRO) + +ifneq ($(strip $(LOGO)),) + MAKEROM_ARGS += -logo "$(LOGO)" +endif +ifneq ($(strip $(ROMFS)),) + MAKEROM_ARGS += -DAPP_ROMFS="$(ROMFS)" +endif + $(BUILDDIR)/$(BINARY): $$(OBJ) $(FIRMLIB) $(VOICESPEEXLIB) $(CORE_LIBS) ifeq ($(UNAME), Darwin) - $(call PRINTS,LD $(BINARY))$(CC) -o $@ $^ $(LDOPTS) $(GLOBAL_LDOPTS) -Wl,$(LDMAP_OPT),$(BUILDDIR)/rockbox.map + $(call PRINTS,LD $(@F))$(CC) -o $@ $^ $(LDOPTS) $(GLOBAL_LDOPTS) -Wl,$(LDMAP_OPT),$(BUILDDIR)/rockbox.map else - $(call PRINTS,LD $(BINARY))$(CC) -o $@ -Wl,--start-group $^ -Wl,--end-group $(LDOPTS) $(GLOBAL_LDOPTS) \ + $(call PRINTS,LD $(@F))$(CC) -o $@ -Wl,--start-group $^ -Wl,--end-group $(LDOPTS) $(GLOBAL_LDOPTS) \ -Wl,$(LDMAP_OPT),$(BUILDDIR)/rockbox.map endif - @mv $(BINARY) $(BINARY).elf - smdhtool --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) "rockbox.smdh" - 3dsxtool $(BINARY).elf $(BINARY).3dsx --smdh="rockbox.smdh" - $(BANNERTOOL) makebanner $(BANNER_IMAGE_ARG) "$(BANNER_IMAGE)" $(BANNER_AUDIO_ARG) "$(BANNER_AUDIO)" -o "$(BUILDDIR)/banner.bnr" - $(BANNERTOOL) makesmdh -s "$(APP_TITLE)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -i "$(APP_ICON)" -f "$(ICON_FLAGS)" -o "$(BUILDDIR)/icon.icn" - $(MAKEROM) -f cia -o "$(BINARY).cia" -target t -exefslogo $(MAKEROM_ARGS) + +$(SMDH_PATH): $(APP_ICON) + $(SMDHTOOL) --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $< $@ + +$(3DSX_PATH): $(BUILDDIR)/$(BINARY) $(SMDH_PATH) + $(3DSXTOOL) $< $@ --smdh=$(SMDH_PATH) + +$(BANNER_PATH): $(BANNER_IMAGE) $(BANNER_AUDIO) + $(BANNERTOOL) makebanner $(BANNER_IMAGE_ARG) $(BANNER_IMAGE) $(BANNER_AUDIO_ARG) $(BANNER_AUDIO) -o $@ + +$(ICON_PATH): $(APP_ICON) + $(BANNERTOOL) makesmdh -s "$(APP_TITLE)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -i $< -f $(ICON_FLAGS) -o $@ + +$(CIA_PATH): $(BUILDDIR)/$(BINARY) $(RSF_PATH) $(BANNER_PATH) $(ICON_PATH) + $(MAKEROM) -f cia -o $@ -target t -exefslogo -elf $< -rsf $(RSF_PATH) -banner $(BANNER_PATH) \ + -icon $(ICON_PATH) $(MAKEROM_ARGS) + +# add dependencies to build the packages +CTRU_PACKAGES := $(3DSX_PATH) $(CIA_PATH) + +build: $(CTRU_PACKAGES) +bin: $(CTRU_PACKAGES) diff --git a/tools/buildzip.pl b/tools/buildzip.pl index cdb1f43c32..13808ec20a 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl @@ -750,7 +750,7 @@ sub runone { # add hbmenu shortcut and cia file to zip file if ($modelname =~ /ctru/) { - move("rockbox.cia", "3ds"); + copy("rockbox.cia", "3ds"); copy("$ROOT/packaging/ctru/rockbox.xml", "3ds"); system("$ziptool -u $output 3ds/rockbox.xml $target >/dev/null"); diff --git a/tools/configure b/tools/configure index f67058e44f..4e6439a0c1 100755 --- a/tools/configure +++ b/tools/configure @@ -4159,7 +4159,7 @@ fi boottool="cp " bmp2rb_mono="$rootdir/tools/bmp2rb -f 0" bmp2rb_native="$rootdir/tools/bmp2rb -f 4" - output="rockbox" + output="rockbox.elf" bootoutput="rockbox" appextra="recorder:gui" plugins="yes" diff --git a/tools/root.make b/tools/root.make index 4423d21359..869b46c794 100644 --- a/tools/root.make +++ b/tools/root.make @@ -234,7 +234,8 @@ clean:: $(LINKRAM) $(LINKROM) rockbox.elf rockbox.map rockbox.bin \ make.dep rombox.elf rombox.map rombox.bin romstart.txt \ $(BINARY) $(FLASHFILE) uisimulator bootloader flash $(BOOTLINK) \ - rockbox.apk lang_enum.h rbversion.h fontbundle.h + rockbox.apk lang_enum.h rbversion.h fontbundle.h 3ds rockbox.3dsx \ + rockbox.bnr rockbox.cia rockbox.icn rockbox.smdh #### linking the binaries: ####