#--------------------------------------------------------------------------------- # 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 := 2.8.2 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk (v$(VERSION)) 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)\" 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