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