1#--------------------------------------------------------------------------------- 2.SUFFIXES: 3#--------------------------------------------------------------------------------- 4ifeq ($(strip $(DEVKITARM)),) 5$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") 6endif 7 8include $(DEVKITARM)/ds_rules 9 10#--------------------------------------------------------------------------------- 11# BUILD is the directory where object files & intermediate files will be placed 12# SOURCES is a list of directories containing source code 13# INCLUDES is a list of directories containing extra header files 14# DATA is a list of directories containing binary files 15# all directories are relative to this makefile 16#--------------------------------------------------------------------------------- 17BUILD := build 18SOURCES := source 19INCLUDES := include 20DATA := 21 22 23#--------------------------------------------------------------------------------- 24# options for code generation 25#--------------------------------------------------------------------------------- 26ARCH := -mthumb -mthumb-interwork 27 28CFLAGS := -g -Wall -O2\ 29 -march=armv5te -mtune=arm946e-s -fomit-frame-pointer\ 30 -ffast-math \ 31 $(ARCH) 32 33CFLAGS += $(INCLUDE) -DARM9 34CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions 35 36ASFLAGS := -g $(ARCH) -march=armv5te -mtune=arm946e-s 37 38LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) 39 40#--------------------------------------------------------------------------------- 41# any extra libraries we wish to link with the project 42#--------------------------------------------------------------------------------- 43LIBS := -lnds9 44 45#--------------------------------------------------------------------------------- 46# list of directories containing libraries, this must be the top level containing 47# include and lib 48#--------------------------------------------------------------------------------- 49LIBDIRS := $(LIBNDS) 50 51#--------------------------------------------------------------------------------- 52# no real need to edit anything past this point unless you need to add additional 53# rules for different file extensions 54#--------------------------------------------------------------------------------- 55ifneq ($(BUILD),$(notdir $(CURDIR))) 56#--------------------------------------------------------------------------------- 57 58export ARM9ELF := $(CURDIR)/$(TARGET).elf 59export DEPSDIR := $(CURDIR)/$(BUILD) 60 61export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ 62 $(foreach dir,$(DATA),$(CURDIR)/$(dir)) 63 64CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) 65CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) 66SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) 67BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) 68 69#--------------------------------------------------------------------------------- 70# use CXX for linking C++ projects, CC for standard C 71#--------------------------------------------------------------------------------- 72ifeq ($(strip $(CPPFILES)),) 73#--------------------------------------------------------------------------------- 74 export LD := $(CC) 75#--------------------------------------------------------------------------------- 76else 77#--------------------------------------------------------------------------------- 78 export LD := $(CXX) 79#--------------------------------------------------------------------------------- 80endif 81#--------------------------------------------------------------------------------- 82 83export OFILES := $(addsuffix .o,$(BINFILES)) \ 84 $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) 85 86export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ 87 $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ 88 -I$(CURDIR)/$(BUILD) 89 90export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) 91 92.PHONY: $(BUILD) clean 93 94#--------------------------------------------------------------------------------- 95$(BUILD): 96 @[ -d $@ ] || mkdir -p $@ 97 @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile 98 99#--------------------------------------------------------------------------------- 100clean: 101 @echo clean ... 102 @rm -fr $(BUILD) *.elf *.nds* *.bin 103 104 105#--------------------------------------------------------------------------------- 106else 107 108#--------------------------------------------------------------------------------- 109# main targets 110#--------------------------------------------------------------------------------- 111$(ARM9ELF) : $(OFILES) 112 @echo linking $(notdir $@) 113 @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ 114 115#--------------------------------------------------------------------------------- 116# you need a rule like this for each extension you use as binary data 117#--------------------------------------------------------------------------------- 118%.bin.o : %.bin 119#--------------------------------------------------------------------------------- 120 @echo $(notdir $<) 121 @$(bin2o) 122 123-include $(DEPSDIR)/*.d 124 125#--------------------------------------------------------------------------------------- 126endif 127#--------------------------------------------------------------------------------------- 128