108 lines
4.1 KiB
Makefile
108 lines
4.1 KiB
Makefile
#---------------------------------------------------------------------------------
|
|
# MBMNET Switcher - 3DS Homebrew (.3dsx)
|
|
# Benötigt devkitPro mit dem Paket "3ds-dev" (libctru, citro3d, citro2d).
|
|
#---------------------------------------------------------------------------------
|
|
.SUFFIXES:
|
|
|
|
ifeq ($(strip $(DEVKITARM)),)
|
|
$(error "DEVKITARM ist nicht gesetzt. Bitte devkitPro installieren.")
|
|
endif
|
|
|
|
TOPDIR ?= $(CURDIR)
|
|
include $(DEVKITARM)/3ds_rules
|
|
|
|
TARGET := mbmnet
|
|
BUILD := build
|
|
SOURCES := source
|
|
INCLUDES := source
|
|
|
|
# Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer
|
|
VERSION := 3.0.4
|
|
|
|
APP_TITLE := MBMNET
|
|
APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk
|
|
APP_AUTHOR := MBMNET
|
|
ICON := icon.png
|
|
|
|
# CIA: feste Titel-ID 000400000FB4E000
|
|
APP_PRODUCT_CODE := CTR-H-MBMN
|
|
APP_UNIQUE_ID := 0xFB4E0
|
|
VERSION_PARTS := $(subst ., ,$(VERSION))
|
|
# Titelversion für die CIA. Muss bei jedem Release steigen, sonst verweigert der 3DS die
|
|
# Installation (Downgrade). makerom übernimmt die mittlere Stelle nicht, deshalb kodieren wir
|
|
# Haupt- und Unterversion zusammen in der ersten Stelle: 2.2.3 -> 22.0.3 (Unterversion max. 9).
|
|
TITLE_MAJOR := $(shell echo $$(( $(word 1,$(VERSION_PARTS)) * 10 + $(word 2,$(VERSION_PARTS)) )))
|
|
VERSION_NUM := $(shell echo $$(( ($(TITLE_MAJOR) << 10) | $(word 3,$(VERSION_PARTS)) )))
|
|
|
|
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
|
|
CFLAGS := -g -Wall -O2 -mword-relocations -ffunction-sections $(ARCH) $(INCLUDE) -D__3DS__ -DAPP_VERSION=\"$(VERSION)\" -DAPP_TITLE_VERSION=$(VERSION_NUM)
|
|
ASFLAGS := -g $(ARCH)
|
|
LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
|
LIBS := -lcitro2d -lcitro3d -lctru -lm
|
|
LIBDIRS := $(CTRULIB) $(PORTLIBS)
|
|
|
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
|
|
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
|
export TOPDIR := $(CURDIR)
|
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))
|
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
|
|
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
|
export LD := $(CC)
|
|
export OFILES := $(CFILES:.c=.o)
|
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
|
-I$(CURDIR)/$(BUILD)
|
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
|
export APP_ICON := $(TOPDIR)/$(ICON)
|
|
export _3DSXDEPS := $(OUTPUT).smdh
|
|
export _3DSXFLAGS += --smdh=$(OUTPUT).smdh
|
|
|
|
.PHONY: all clean cia $(BUILD)
|
|
|
|
all: $(BUILD)
|
|
|
|
# CIA zum Installieren mit FBI o. Ä. (braucht makerom und bannertool, siehe tools/Dockerfile)
|
|
cia: $(BUILD)
|
|
@bannertool makebanner -i assets/banner.png -a assets/banner.wav -o $(BUILD)/banner.bnr
|
|
@bannertool makesmdh -s "$(APP_TITLE)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -i $(ICON) -o $(BUILD)/icon.icn
|
|
@makerom -f cia -o $(TARGET).cia -elf $(TARGET).elf -rsf cia.rsf -target t -exefslogo \
|
|
-icon $(BUILD)/icon.icn -banner $(BUILD)/banner.bnr \
|
|
-DAPP_TITLE="$(APP_TITLE)" -DAPP_PRODUCT_CODE="$(APP_PRODUCT_CODE)" -DAPP_UNIQUE_ID="$(APP_UNIQUE_ID)" \
|
|
-ver $(VERSION_NUM)
|
|
@echo built ... $(TARGET).cia
|
|
|
|
$(BUILD):
|
|
@mkdir -p $@
|
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
|
|
|
# FTP-Hintergrund-Modul bauen und als Byte-Feld in die App einbetten
|
|
ftpmodul/ftpmodul.cxi: $(wildcard ftpmodul/source/*) ftpmodul/ftpmodul.rsf ftpmodul/Makefile
|
|
@$(MAKE) --no-print-directory -C ftpmodul
|
|
|
|
source/ftpmodul_data.c: ftpmodul/ftpmodul.cxi
|
|
@echo "// Automatisch erzeugt aus ftpmodul/ftpmodul.cxi - nicht bearbeiten" > $@
|
|
@echo "#include <3ds/types.h>" >> $@
|
|
@echo "const u8 ftpmodul_cxi[] __attribute__((aligned(4))) = {" >> $@
|
|
@od -An -v -tx1 $< | sed -e 's/ \([0-9a-f][0-9a-f]\)/0x\1,/g' >> $@
|
|
@echo "};" >> $@
|
|
@echo "const u32 ftpmodul_cxi_size = sizeof(ftpmodul_cxi);" >> $@
|
|
@echo "const u32 ftpmodul_status_addr = $$(cat ftpmodul/ftpmodul.sym);" >> $@
|
|
|
|
clean:
|
|
@echo clean ...
|
|
@rm -fr $(BUILD) $(TARGET).3dsx $(TARGET).smdh $(TARGET).elf $(TARGET).cia source/ftpmodul_data.c
|
|
@$(MAKE) --no-print-directory -C ftpmodul clean
|
|
|
|
else
|
|
|
|
DEPENDS := $(OFILES:.o=.d)
|
|
|
|
$(OUTPUT).3dsx : $(OUTPUT).elf $(_3DSXDEPS)
|
|
$(OUTPUT).elf : $(OFILES)
|
|
|
|
-include $(DEPENDS)
|
|
|
|
endif
|