1f21a677aa213646fa417e1c89b39ba8edcecf13
[mTask.git] / int / com / pj / pj.mk
1 #Common makefile include for all projectes
2
3 ifeq ($(SPECS),none)
4 SPECS :=
5 else
6 ifeq ($(SPECS),)
7 SPECS := -specs=nano.specs
8 endif
9 endif
10
11 ifeq ($(SYSTEM),)
12 S_GCC :=
13 ifeq ($(S_GCC),)
14 SYSTEM := $(shell ls -rd /usr/local/gcc-arm-none-eabi-* 2>/dev/null |head -n 1)/bin/arm-none-eabi
15 S_GCC := $(shell which $(SYSTEM)-gcc 2>/dev/null)
16 endif
17 ifeq ($(S_GCC),)
18 SYSTEM := arm-none-eabi
19 S_GCC := $(shell which $(SYSTEM)-gcc 2>/dev/null)
20 endif
21 ifeq ($(S_GCC),)
22 SYSTEM := echo "arm-none-eabi toolchain not found "; false -
23 S_GCC :=
24 endif
25 $(info using gcc: $(S_GCC) )
26 endif
27
28 SRCS_C += $(SRCS_ADD)
29 SRCS_C += $(wildcard $(patsubst %,%/*.c,$(PORTDIRS)))
30 SRCS_C += $(wildcard $(patsubst %,%/*.c,$(CSRCDIRS)))
31 SRCS_C += $(LIBSRCS)
32 VPATH := $(COMDIR)
33
34 GLBL_GCC = -ffunction-sections -fdata-sections -fmessage-length=0
35 CFLAGS1 = $(CPU_OPT) $(CMSIS_OPT) $(OTHER_OPT) $(LIBS_OPT) $(GCC_OPT) $(OPTIMIZE) $(GLBL_GCC)
36 CFLAGS = $(CFLAGS1) $(patsubst %,-I%,$(INC))
37 ASFLAGS = $(CFLAGS) -x assembler-with-cpp
38 LDFLAGS = $(CFLAGS1) $(SPECS) -Wl,--gc-sections,-Map=$(MAP),-cref$(LDOPT) -T $(LDDIR)/$(LDSCRIPT) $(patsubst %,-L%,$(LDINC))
39 ARFLAGS = cr
40 OBJCOPYBIN = -Obinary
41 OBJCOPYHEX = -Oihex
42 OBJCOPYS19 = -Osrec
43 OBJDUMPFLAGS = -S
44
45 CC = $(SYSTEM)-gcc
46 CCDEP = $(SYSTEM)-gcc
47 LD = $(SYSTEM)-gcc
48 AR = $(SYSTEM)-ar
49 AS = $(SYSTEM)-gcc
50 OBJCOPY = $(SYSTEM)-objcopy
51 OBJDUMP = $(SYSTEM)-objdump
52 SIZE = $(SYSTEM)-size
53 GDB = $(SYSTEM)-gdb
54
55 OBJ_OUT = $(OBJDIR)
56
57 OUT = $(PJNAME).out
58 BIN = $(PJNAME).bin
59 BINZ = $(PJNAME).bin.gz
60 LST = $(PJNAME).list
61 HEX = $(PJNAME).hex
62 S19 = $(PJNAME).s19
63 MAP = $(PJNAME).map
64 DEP = $(PJNAME).d
65
66 OBJSC := $(patsubst %.c,%.o,$(SRCS_C))
67 OBJSC := $(patsubst $(COMDIR)/%,%,$(OBJSC))
68 OBJSC := $(patsubst %,$(OBJ_OUT)/%,$(OBJSC))
69 #OBJSC := $(abspath $(OBJSC))
70
71 OBJSS := $(patsubst %.s,%.o,$(SRCS_S))
72 OBJSS := $(patsubst $(COMDIR)/%,%,$(OBJSS))
73 OBJSS := $(patsubst %,$(OBJ_OUT)/%,$(OBJSS))
74 #OBJSS := $(abspath $(OBJSS))
75
76 SRCS = $(SRCS_C) $(SRCS_S)
77 OBJS = $(OBJSC) $(OBJSS) $(STARTUP_OBJ) $(SYSTEM_OBJ)
78
79 info:
80 $(info using cc toolchain : $(SYSTEM))
81 $(info project export to : $(EXPDIR)/$(PJNAME))
82 $(info using cc options : $(CFLAGS))
83 # $(info using as options : $(ASFLAGS))
84 $(info using ld options : $(LDFLAGS))
85 $(info objects to build : $(OBJS))
86 $(info archives to build : $(LIBS))
87 $(info sources : $(SRCS))
88 # $(info c sources : $(SRCS_C))
89 # @$(CC) --version
90
91 all: $(BIN)
92
93 ifeq '$(BL)' '-bl1'
94 #all: $(BINZ)
95 endif
96
97 ifeq '$(BL)' '-bl'
98 #all: $(S19)
99 endif
100
101 filelist: $(OUT)
102 make --debug=v |grep -E "(Prerequisite )|(makefile )" |sed -e s/\`/\'/ |cut -d "'" -f 2 |sort |uniq |grep -v -E "([.][ado])|([.]out)\$$" >filelist
103 -test -d cube && find cube/ -iname "*.ioc" >>filelist
104 @echo $(FILES_ADD) >>filelist
105
106 pjexport: filelist
107 -mkdir -p $(EXPDIR)/$(PJNAME)
108 -mkdir -p $(EXPDIR)/$(PJNAME)/a
109 -mkdir -p $(EXPDIR)/$(PJNAME)/o
110 cp -v --parents `cat filelist` ../Makefile $(EXPDIR)/$(PJNAME)
111
112 reset:
113 $(OCD_RESET)
114
115 ifeq '$(BL)' '-bl1'
116 flashz: $(BINZ)
117 $(OCD_ZFLASH)
118
119 flash: $(BIN)
120 $(OCD_FFLASH)
121
122 else
123 ifeq '$(BL)' '-bl'
124 flash: $(BIN) $(HEX)
125 $(BLTCS) -i $(BIN) -o $(BIN).out
126 $(OCD_BFLASH)
127
128 else
129 flash: $(BIN) $(HEX)
130 $(OCD_FLASH)
131 endif
132 endif
133
134 gdb:
135 $(OCD_GDB)
136
137 ifeq '$(BL)' '-bl'
138 boot: $(S19) $(BLTCMD)
139 $(BLT) $(S19)
140 endif
141
142 $(HEX): $(OUT)
143 @echo objcopy $(HEX)
144 @$(OBJCOPY) $(OBJCOPYHEX) $(OUT) $(HEX)
145
146 $(S19): $(BIN) $(BLTCS)
147 $(BLTCS) -i $(BIN) -o $(BIN).out
148 $(SREC) $(BIN).out -binary -offset $(VTOR_INIT) -o $(S19)
149 $(SREC_INFO) $(S19)
150 -rm -f $(BIN).out
151
152 $(BIN): $(OUT)
153 @echo objcopy $(BIN)
154 @$(OBJCOPY) $(OBJCOPYBIN) $(OUT) $(BIN)
155 @echo objdump $(LST)
156 @$(OBJDUMP) $(OBJDUMPFLAGS) $(OUT) > $(LST)
157 @echo size $(OUT)
158 @$(SIZE) $(OUT)
159 ifeq '$(BL)' '-bl1'
160 @echo gzip $(BIN)
161 @gzip -c $(BIN) >$(BINZ)
162 endif
163 @echo Make finished
164
165 #$(BINZ): $(BIN)
166 # @echo gzip $(BIN)
167 # @gzip -c $(BIN) >$(BINZ)
168
169 $(OUT): $(GEN_ADD) $(LIBS) $(OBJS) $(LDDIR)/$(LDSCRIPT)
170 @echo ld $@
171 # @echo $(LD) $(LDFLAGS) -o $@
172 @$(LD) $(LDFLAGS) -o $@ $(OBJS) -Wl,--start-group,--whole-archive $(LIBS) -Wl,--end-group,--no-whole-archive $(STDLIBS)
173
174 #$(LIBS):
175 # ${MAKE} -C $@
176 # @$(foreach LIB,$(LIBDIRS),${MAKE} -C $(LIB) || exit 1;)
177
178 -include $(LIBS:.a=.d)
179
180 gen: clean-gen $(GEN_ADD)
181
182 clean:
183 @-rm -f $(OBJS) $(OBJS:.o=.d) $(OBJS:.o=.sl) $(OUT) $(BIN) $(BINZ) $(HEX) $(S19) $(LST) $(MAP) $(DEP) $(CLEAN_ADD)
184 @$(foreach LIB,$(LIBS),${MAKE} -s -C $(LIBDIR) -f $(patsubst $(ARDIR)/%.a,%.mk,$(LIB)) clean || exit 1;)
185 @-rm -f jlink.reset jlink.flash filelist
186
187 clean-nl:
188 @-rm -f $(OBJS) $(OBJS:.o=.d) $(OBJS:.o=.sl) $(OUT) $(BIN) $(BINZ) $(HEX) $(S19) $(LST) $(MAP) $(DEP)
189 # @$(foreach LIB,$(LIBS),${MAKE} -s -C $(LIBDIR) -f $(patsubst $(ARDIR)/%.a,%.mk,$(LIB)) clean || exit 1;)
190 @-rm -f jlink.reset jlink.flash filelist
191
192 clean-add:
193 @-rm -f $(CLEAN_ADD)
194
195 clean-gen:
196 @-rm -f $(GEN_ADD)
197
198 depend dep: $(DEP)
199
200 #$(DEP): Src/*.c
201 # $(CCDEP) $(CFLAGS) -MM $^ | sed -e 's@.*.o:@Src/&@' > $(DEP)
202
203 #$(DEP): $(LIB_SRCS_C)
204 # $(CCDEP) $(CFLAGS) -MM $^ > $(DEP)
205
206 #$(DEP): $(SRCS)
207 # @rm -f $(DEP)
208 # @$(foreach SRC,$(SRCS_S),echo dep $(SRC); $(CCDEP) $(CFLAGS) -MM -MT $(OBJ_OUT)/$(SRC:.s=.o) $(SRC) >> $(DEP);)
209 # @$(foreach SRC,$(SRCS_C),echo dep $(SRC); $(CCDEP) $(CFLAGS) -MM -MT $(OBJ_OUT)/$(SRC:.c=.o) $(SRC) >> $(DEP);)
210
211 $(LIBS): %.a:
212 @-mkdir -p a
213 ${MAKE} -C $(LIBDIR) -f $(patsubst $(ARDIR)/%,%,$*).mk
214
215 $(SYSTEM_OBJ): $(SYSTEM_SRC)
216 @echo cc $<
217 @$(CC) $(CFLAGS) -MMD -c -o $@ $<
218
219 $(STARTUP_OBJ): $(STARTUP_SRC)
220 @echo as $<
221 @$(AS) $(CFLAGS) -MMD -c -o $@ $<
222
223 $(OBJSC): $(OBJ_OUT)/%.o: %.c
224 @mkdir -p $(dir $@)
225 ifeq ($(SHOWPJ),1)
226 @echo cc \[$(PJNAME)\] $<
227 else
228 @echo cc $<
229 endif
230 # @echo $(CFLAGS)
231 @$(CC) $(CFLAGS) -MMD -c -o $@ -Wa,-adhln=$(@:.o=.sl) $<
232 # @$(CC) $(CFLAGS) --save-temps -MMD -c -o $@ $<
233 # @$(CC) $(CFLAGS) -MMD -c -o $@ $<
234
235 $(OBJSS): $(OBJ_OUT)/%.o: %.s
236 @mkdir -p $(dir $@)
237 @echo as $<
238 @$(AS) $(ASFLAGS) -MMD -c -o $@ $<
239
240 -include $(OBJS:.o=.d)
241 #-include $(DEP)
242
243 $(OBJS) $(LIBS): Makefile $(COMDIR)/pj/pjhdr.mk $(COMDIR)/pj/pj.mk $(COMDIR)/lib/lib.mk