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