OSDN Git Service

Added license header.
[bluetank/bluetank.git] / firm / bare_metal / Makefile
1 #
2 # Project name (also used for output file name)
3 #
4 PROJECT = bluetank
5
6 #
7 # Source files and search directories
8 #
9 CSRC   += lcd.c led.c main.c mmc.c pff.c twi.c ssm2603.c bfin_util.c uzume.c
10 ASRC   +=
11 VPATH   =
12
13 #
14 # Optimization level (0, 1, 2, 3, 4 or s)
15 #
16 OPTIMIZE = s
17
18 #
19 # C Standard level (c89, gnu89, c99 or gnu99)
20 #
21 CSTD = gnu89
22
23 #
24 # Processor type for CSRC/ASRC files.
25 #
26 CPU = bf592-any
27
28 #
29 # Linker script for the target MCU
30 #
31 LINKSCRIPT =
32
33 #
34 # Output file format (ihex, bin or both) and debugger type
35 #
36 OUTPUT  = ihex
37 DEBUG   = dwarf-2
38
39 #
40 # Include dirs, library dirs and definitions
41 #
42 LIBS    =
43 LIBDIRS =
44 INCDIRS = ../common/bfuart
45 DEFS    =
46 ADEFS   =
47
48 #
49 # Warning contorls
50 #
51 WARNINGS = all extra
52
53 #
54 # Object output directory
55 #
56 OBJDIR = obj
57
58 #
59 # Programs to build porject
60 #
61 CC      = bfin-elf-gcc
62 OBJCOPY = bfin-elf-objcopy
63 OBJDUMP = bfin-elf-objdump
64 SIZE    = bfin-elf-size
65 NM      = bfin-elf-nm
66
67 #
68 # Define all object files
69 #
70 COBJ      = $(CSRC:.c=.o)
71 AOBJ      = $(ASRC:.S=.o)
72 COBJ      := $(addprefix $(OBJDIR)/,$(COBJ))
73 AOBJ      := $(addprefix $(OBJDIR)/,$(AOBJ))
74 PROJECT   := $(OBJDIR)/$(PROJECT)
75
76 #
77 # Flags for C files
78 #
79 CFLAGS += -std=$(CSTD)
80 CFLAGS += -g$(DEBUG)
81 CFLAGS += -O$(OPTIMIZE)
82 CFLAGS += -fmessage-length=0
83 CFLAGS += $(addprefix -W,$(WARNINGS))
84 CFLAGS += $(addprefix -I,$(INCDIRS))
85 CFLAGS += $(addprefix -D,$(DEFS))
86 CFLAGS += -Wp,-M,-MP,-MT,$(OBJDIR)/$(*F).o,-MF,$(OBJDIR)/$(*F).d
87
88 #
89 # Assembler flags
90 #
91 ASFLAGS += $(addprefix -D,$(ADEFS)) -Wa,-g$(DEBUG)
92
93 #
94 # Linker flags
95 #
96 LDFLAGS += -Wl,-Map=$(PROJECT).map,--cref,--gc-sections
97 LDFLAGS += -lc -lgcc
98 LDFLAGS += $(patsubst %,-L%,$(LIBDIRS)) $(patsubst %,-l%,$(LIBS))
99 #LDFLAGS += -T$(LINKSCRIPT)
100 #LDFLAGS += -nostartfiles
101 #LDFLAGS += -nodefaultlibs
102 #LDFLAGS += -nostdlib
103 #LDFLAGS += -fno-builtin
104
105 # Combine all necessary flags and optional flags.
106 # Add target processor to flags.
107 ALL_CFLAGS  = -mcpu=$(CPU) -I. $(CFLAGS)
108 ALL_ASFLAGS = -mcpu=$(CPU) -I. -x assembler-with-cpp $(ASFLAGS)
109
110 #
111 # Default target.
112 #
113 all: version build size
114
115 ifeq ($(OUTPUT),ihex)
116 build: elf hex lst sym
117 hex: $(PROJECT).hex
118 else
119 ifeq ($(OUTPUT),binary)
120 build: elf bin lst sym
121 bin: $(PROJECT).bin
122 else
123 ifeq ($(OUTPUT),both)
124 build: elf hex bin lst sym
125 hex: $(PROJECT).hex
126 bin: $(PROJECT).bin
127 else
128 $(error "Invalid format: $(OUTPUT)")
129 endif
130 endif
131 endif
132
133 elf: $(PROJECT).elf
134 lst: $(PROJECT).lst
135 sym: $(PROJECT).sym
136
137 #
138 # Display compiler version information.
139 #
140 version :
141         @$(CC) --version
142
143 #
144 # Create final output file (.hex or .bin) from ELF output file.
145 #
146 %.hex: %.elf
147         @echo
148         $(OBJCOPY) -O ihex $< $@
149
150 %.bin: %.elf
151         @echo
152         $(OBJCOPY) -O binary $< $@
153
154 #
155 # Create extended listing file from ELF output file.
156 #
157 %.lst: %.elf
158         @echo
159         $(OBJDUMP) -h -S -C $< > $@
160
161 #
162 # Create a symbol table from ELF output file.
163 #
164 %.sym: %.elf
165         @echo
166         $(NM) -n $< > $@
167
168 #
169 # Display size of file.
170 #
171 size:
172         @echo
173         $(SIZE) -A $(PROJECT).elf
174
175 #
176 # Link: create ELF output file from object files.
177 #
178 %.elf:  $(AOBJ) $(COBJ)
179         @echo
180         @echo Linking...
181         $(CC) $(ALL_CFLAGS) $(AOBJ) $(COBJ) --output $@ $(LDFLAGS)
182
183 #
184 # Compile: create object files from C source files.
185 #
186 $(COBJ) : $(OBJDIR)/%.o : %.c
187         @echo
188         @echo $< :
189         $(CC) -c $(ALL_CFLAGS) $< -o $@
190
191 #
192 # Assemble: create object files from assembler source files.
193 #
194 $(AOBJ) : $(OBJDIR)/%.o : %.S
195         @echo
196         @echo $< :
197         $(CC) -c $(ALL_ASFLAGS) $< -o $@
198
199 #
200 # Target: clean project.
201 #
202 clean:
203         @echo
204         rm -f -r $(OBJDIR) | exit 0
205
206 #
207 # Load: Load ldr for Blackfin
208 #
209 load:
210         bfin-elf-ldr -T BF592 -c $(PROJECT).ldr $(PROJECT).elf
211         bfin-elf-ldr -l $(PROJECT).ldr /dev/ttyUSB0 -b 57600 -C
212
213 #
214 # Console: Console
215 #
216 console:
217         minicom -b 57600 -D /dev/ttyUSB0
218
219 #
220 # Include the dependency files.
221 #
222 -include $(shell mkdir $(OBJDIR) 2>/dev/null) $(wildcard $(OBJDIR)/*.d)
223