1 #--------------------------------------------------------------------------------- 2 .SUFFIXES: 3 #--------------------------------------------------------------------------------- 4 5 ifeq ($(strip $(DEVKITARM)),) 6 $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") 7 endif 8 9 include $(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 #--------------------------------------------------------------------------------- 18 TARGET := $(shell basename $(CURDIR)) 19 BUILD := build 20 SOURCES := ../../ 21 DATA := data 22 INCLUDES := include 23 24 #--------------------------------------------------------------------------------- 25 # options for code generation 26 #--------------------------------------------------------------------------------- 27 ARCH := -mthumb -mthumb-interwork 28 29 CFLAGS := -Wall -O2\ 30 -march=armv5te -mtune=arm946e-s \ 31 -fomit-frame-pointer -ffast-math \ 32 $(ARCH) 33 34 CFLAGS += $(INCLUDE) -DARM9 35 CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions 36 37 ASFLAGS := $(ARCH) -march=armv5te -mtune=arm946e-s 38 LDFLAGS = -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 #--------------------------------------------------------------------------------- 44 LIBDIRS := $(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 #--------------------------------------------------------------------------------- 50 ifneq ($(BUILD),$(notdir $(CURDIR))) 51 #--------------------------------------------------------------------------------- 52 53 export OUTPUT := $(CURDIR)/lib/libz.a 54 55 export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ 56 $(foreach dir,$(DATA),$(CURDIR)/$(dir)) 57 58 export DEPSDIR := $(CURDIR)/$(BUILD) 59 60 CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) 61 CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) 62 SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) 63 BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) 64 65 #--------------------------------------------------------------------------------- 66 # use CXX for linking C++ projects, CC for standard C 67 #--------------------------------------------------------------------------------- 68 ifeq ($(strip $(CPPFILES)),) 69 #--------------------------------------------------------------------------------- 70 export LD := $(CC) 71 #--------------------------------------------------------------------------------- 72 else 73 #--------------------------------------------------------------------------------- 74 export LD := $(CXX) 75 #--------------------------------------------------------------------------------- 76 endif 77 #--------------------------------------------------------------------------------- 78 79 export OFILES := $(addsuffix .o,$(BINFILES)) \ 80 $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) 81 82 export 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 #--------------------------------------------------------------------------------- 89 all: $(BUILD) 90 @[ -d $@ ] || mkdir -p include 91 @cp ../../*.h include 92 93 lib: 94 @[ -d $@ ] || mkdir -p $@ 95 96 $(BUILD): lib 97 @[ -d $@ ] || mkdir -p $@ 98 @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile 99 100 #--------------------------------------------------------------------------------- 101 clean: 102 @echo clean ... 103 @rm -fr $(BUILD) lib 104 105 #--------------------------------------------------------------------------------- 106 else 107 108 DEPENDS := $(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 #--------------------------------------------------------------------------------------- 125 endif 126 #--------------------------------------------------------------------------------------- 127