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 #---------------------------------------------------------------------------------------