Home | History | Annotate | Download | only in nintendods
      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