#--------------------------------------------------------------------------------- .SUFFIXES: #--------------------------------------------------------------------------------- .SECONDARY: ifeq ($(strip $(DEVKITARM)),) $(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") endif include $(DEVKITARM)/ds_rules export VERSION_MAJOR := 1 export VERSION_MINOR := 1 export VERSION_PATCH := 0 VERSION := $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH) #--------------------------------------------------------------------------------- # TARGET is the name of the output # BUILD is the directory where object files & intermediate files will be placed # SOURCES is a list of directories containing source code # INCLUDES is a list of directories containing extra header files # DATA is a list of directories containing binary files embedded using bin2o # GRAPHICS is a list of directories containing image files to be converted with grit #--------------------------------------------------------------------------------- TARGET := GodMode9i BUILD := build SOURCES := source INCLUDES := include source DATA := data GRAPHICS := gfx #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- ARCH := -mthumb -mthumb-interwork CFLAGS := -g -Wall -O2 \ -ffunction-sections -fdata-sections \ -march=armv5te -mtune=arm946e-s -fomit-frame-pointer\ -ffast-math \ $(ARCH) CFLAGS += $(INCLUDE) -DARM9 CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=c++11 ASFLAGS := -g $(ARCH) LDFLAGS = -specs=ds_arm9.specs -g -Wl,--gc-sections $(ARCH) -Wl,-Map,$(notdir $*.map) #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project (order is important) #--------------------------------------------------------------------------------- LIBS := -lfat -lnds9 #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- LIBDIRS := $(LIBNDS) #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions #--------------------------------------------------------------------------------- ifneq ($(BUILD),$(notdir $(CURDIR))) #--------------------------------------------------------------------------------- export TOPDIR := $(CURDIR) export OUTPUT := $(CURDIR)/$(TARGET) export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) export DEPSDIR := $(CURDIR)/$(BUILD) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) BMPFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.bmp))) PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) BINFILES := load.bin bootstub.bin #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C #--------------------------------------------------------------------------------- ifeq ($(strip $(CPPFILES)),) #--------------------------------------------------------------------------------- export LD := $(CC) #--------------------------------------------------------------------------------- else #--------------------------------------------------------------------------------- export LD := $(CXX) #--------------------------------------------------------------------------------- endif #--------------------------------------------------------------------------------- export OFILES := $(addsuffix .o,$(BINFILES)) \ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ -I$(CURDIR)/$(BUILD) export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) icons := $(wildcard *.bmp) ifneq (,$(findstring $(TARGET).bmp,$(icons))) export GAME_ICON := $(CURDIR)/$(TARGET).bmp else ifneq (,$(findstring icon.bmp,$(icons))) export GAME_ICON := $(CURDIR)/icon.bmp endif endif export GAME_TITLE := $(TARGET) .PHONY: bootloader bootstub clean arm7/$(TARGET).elf arm9/$(TARGET).elf all: bootloader bootstub $(TARGET).nds dsi: $(TARGET).dsi dist: all @rm -fr hbmenu @mkdir hbmenu @cp $(TARGET).nds hbmenu/BOOT.NDS @cp BootStrap/_BOOT_MP.NDS BootStrap/TTMENU.DAT BootStrap/_DS_MENU.DAT BootStrap/ez5sys.bin BootStrap/akmenu4.nds hbmenu @tar -cvjf $(TARGET)-$(VERSION).tar.bz2 hbmenu testfiles README.html COPYING hbmenu -X exclude.lst $(TARGET).nds: $(TARGET).arm7 $(TARGET).arm9 ndstool -c $(TARGET).nds -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf \ -b icon.bmp "GodMode9i;RocketRobz" \ -z 80040000 -u 00030004 python fix_ndsheader.py $(CURDIR)/$(TARGET).nds $(TARGET).dsi: $(TARGET).arm7 $(TARGET).arm9 ndstool -c $(TARGET).dsi -7 $(TARGET).arm7.elf -9 $(TARGET).arm9.elf \ -b icon.bmp "GodMode9i;RocketRobz" \ -g HGMA 00 "GODMODE9I" -z 80040000 -u 00030004 python fix_ndsheader.py $(CURDIR)/$(TARGET).dsi $(TARGET).arm7: arm7/$(TARGET).elf cp arm7/$(TARGET).elf $(TARGET).arm7.elf $(TARGET).arm9: arm9/$(TARGET).elf cp arm9/$(TARGET).elf $(TARGET).arm9.elf #--------------------------------------------------------------------------------- arm7/$(TARGET).elf: @$(MAKE) -C arm7 #--------------------------------------------------------------------------------- arm9/$(TARGET).elf: @$(MAKE) -C arm9 #--------------------------------------------------------------------------------- #$(BUILD): #@[ -d $@ ] || mkdir -p $@ #@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile #--------------------------------------------------------------------------------- clean: @echo clean ... @rm -fr data @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds @rm -fr $(TARGET).arm7.elf @rm -fr $(TARGET).arm9.elf @$(MAKE) -C bootloader clean @$(MAKE) -C bootstub clean @$(MAKE) -C arm9 clean @$(MAKE) -C arm7 clean data: @mkdir -p data bootloader: data @$(MAKE) -C bootloader LOADBIN=$(CURDIR)/data/load.bin bootstub: data @$(MAKE) -C bootstub #--------------------------------------------------------------------------------- else #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- #$(OUTPUT).nds : $(OUTPUT).elf #$(OUTPUT).elf : $(OFILES) #--------------------------------------------------------------------------------- %.bin.o : %.bin #--------------------------------------------------------------------------------- @echo $(notdir $<) $(bin2o) -include $(DEPSDIR)/*.d #--------------------------------------------------------------------------------------- endif #---------------------------------------------------------------------------------------