Makefile revision 1.1.1.1.16.2 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