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