blob: 21f4c0cafa112685ee2e5b0d0e44f56101b44191 [file] [log] [blame]
Shad Ansari2f7f9be2017-06-07 13:34:53 -07001# Common Makefile rules
2#
3
4# For linux_lib we don't build anything. Object files are just added
5# when compiling modules depending on the libs
6
7ifeq ("$(MOD_TYPE)", "linux_lib")
8 # Skip libraries that might have crept in dependencies
9 SKIP_LIB_MODULES = y
10 export SKIP_LIB_MODULES
11endif
12
13ifeq ("$(MOD_TYPE)", "linux_module")
14 # Skip libraries that might have crept in dependencies
15 SKIP_LIB_MODULES = y
16 export SKIP_LIB_MODULES
17endif
18
19ifeq ("$(MOD_TYPE)", "lib")
20 MODULE_IS_A_LIBRARY = y
21else ifeq ("$(MOD_TYPE)", "shared_lib")
22 MODULE_IS_A_LIBRARY = y
23else
24 MODULE_IS_A_LIBRARY = n
25endif
26
27# Include module's own auto-generated Makefile.config.$(MODULE) file if any
28# It in turn includes all dependencies
29ifeq (x"$(V)", x"2")
30 $(info !!!MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_TARGET=$(MOD_TARGET))
31 $(info !!!Including own dependency file: $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
32endif
33-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
34ifeq (x"$(V)", x"2")
35 $(info !!!After include of $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
36endif
37
38ifeq (x"$(V)", x"2")
39 $(info !!! Building $(MOD_TYPE) module $(MOD_NAME): depends on $(MOD_DEPS_FILES) SKIP_LIBS=$(SKIP_LIB_MODULES))
40endif
41
42# Skip default rules for custom module
43ifneq ("$(MOD_CUSTOM)", "y")
44
45# Default lib rule
46ifeq ("$(MOD_TYPE)", "lib")
47
48ifeq ("$(SKIP_LIB_MODULES)", "y")
49
50$(MOD_TARGET):
51
52else
53
54# Rule to compile all module's C files in one go
55ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y")
56
57$(MOD_TARGET): $(SRCS) $(AS_OBJS) $(as_OBJS)
58
59# Create library if there are any objects
60ifneq ("$(SRCS)$(AS_SRCS)$(as_SRCS)$(GEN_SRCS)", "")
61
62ifneq ("$(SRCS)$(GEN_SRCS)", "")
63ifeq (x"$(V)", x"0")
64 @echo "CC $(srcs) $(gen_srcs)"
65endif
66 $(SILENT_BUILD)mkdir -p $(dir $@)
67 $(SILENT_BUILD)cd $(dir $@) && $(BLD_CC) $(CFLAGS) -c $(SRCS) $(GEN_SRCS)
68endif
69 $(SILENT_BUILD)cd $(dir $@) && $(BLD_AR) $(ARFLAGS) $@ $(OBJS)
70 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
71 @$(BOLD_PRINT) "done: $@"
72# ifneq ("$(SRCS)$(AS_SRCS)$(as_SRCS)$(GEN_SRCS)", "")
73endif
74
75# ifeq ("$(COMPILE_ALL_IN_ONE_GO)", "y")
76else
77
78# Create library if there are any objects
79$(MOD_TARGET): $(OBJS)
80ifneq ("$(OBJS)", "")
81 $(SILENT_BUILD)$(BLD_AR) $(ARFLAGS) $@ $(OBJS)
82 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
83 @$(BOLD_PRINT) "done: $@"
84endif
85
86# end of ifeq ($(COMPILE_ALL_IN_ONE_GO), "y")
87endif
88
89# end of ifeq ("$(SKIP_LIB_MODULES)", "y")
90endif
91
92# end of ifeq ("$(MOD_TYPE)", "lib")
93endif
94
95# Default shared_lib rule
96ifeq ("$(MOD_TYPE)", "shared_lib")
97
98EXTRA_CFLAGS += -fPIC
99
100# Create library if there are any objects
101$(MOD_TARGET): $(OBJS)
102ifneq ("$(OBJS)", "")
103 $(SILENT_BUILD)$(BLD_CC) -shared -rdynamic -o $@ $(OBJS) $(LFLAGS)
104 $(SILENT_BUILD)mkdir -p $(SHARED_LIB_PATH)/
105 $(SILENT_BUILD)cp $@ $(SHARED_LIB_PATH)/
106 @$(BOLD_PRINT) "done: $@"
107endif
108 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
109
110# end of ifeq ("$(MOD_TYPE)", "shared_lib")
111endif
112
113# Default app rule
114ifeq ("$(MOD_TYPE)", "app")
115
116# Currently, ThreadX image doesn't support any applications, apart from the
117# image itself. Disable building applications for ThreadX
118ifneq ("$(OS)", "threadx")
119
120$(MOD_TARGET): $(OBJS) $(MOD_DEPS_FILES)
121 $(SILENT_BUILD)$(BLD_CC) -o $@ $(OBJS) $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
122 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
123 @$(BOLD_PRINT) "done: $(OUT_DIR)/$(MOD_NAME)"
124
125# else of ifneq ("$(OS)", "threadx")
126else
127
128$(MOD_TARGET):
129
130
131# endif of ifneq ("$(OS)", "threadx")
132endif
133
134# endif of ifeq ("$(MOD_TYPE)", "app")
135endif
136
137# For linux_lib we don't build anything. Object files are just added
138# when compiling modules depending on the libs
139ifeq ("$(MOD_TYPE)", "linux_lib")
140 LINUX_LIB_OBJECTS := $(srcs:%.c=$(SRC_DIR)/%.o)
141
142$(MOD_TARGET): $(SRCS) $(GEN_SRCS) $(MOD_DEPS_FILES)
143 $(SILENT_BUILD)touch $(MOD_TARGET)
144 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
145
146endif
147
148# Default linux_module$(srcs:%=$(SRC_DIR)/%)
149ifeq ("$(MOD_TYPE)", "linux_module")
150 obj-m += $(MOD_NAME).o
151 $(MOD_NAME)-objs := $(srcs:%.c=%.o)
152 LIB_OBJS_REL_PATH = $(foreach oo,$(ALL_LIB_OBJS),$(shell python -c "import os.path; print os.path.relpath('$(oo)', '$(SRC_DIR)')"))
153
154 _KERNEL_MAKEPARMS = -C $(KERNELDIR) M=$(SRC_DIR) KBUILD_EXTRA_SYMBOLS="$(KBUILD_EXTRA_SYMBOLS)" \
155 O=$(KERNEL_OUTDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) V=$(V) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
156 obj-m=$(obj-m) $(MOD_NAME)-objs="$($(MOD_NAME)-objs) $(LIB_OBJS_REL_PATH)"
157 KERNEL_MAKEPARMS = $(_KERNEL_MAKEPARMS:%os_abstraction/posix=%os_abstraction/linux)
158
159 # Prevent parallel build
160.NOTPARALLEL:
161
162 # Only build linux module if not already being built by another make thread.
163 # Otherwise, linux build system get confused
164 # Also, remove -s flag using MAKEFLAGS. Otherwise, linux build system will not print names of the files
165 # being compiled
166$(MOD_TARGET): $(SRCS) $(MOD_DEPS_FILES)
167ifneq ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
168 @cp -f $(TOP_DIR)/$(MOD_DIR)/Makefile $(SRC_DIR)
169endif
170 $(SILENT_BUILD)if [ ! -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ]; then \
171 touch $(SRC_DIR)/.$(MOD_NAME)_in_progress; \
172 MAKEFLAGS= $(MAKE) $(KERNEL_MAKEPARMS) ;\
173 if [[ "$$?" != "0" ]]; then \
174 rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress;\
175 exit -2;\
176 fi; \
177 mkdir -p $(OUT_DIR_BASE)/linux_modules ;\
178 touch -c $(MOD_TARGET) ;\
179 cp $(SRC_DIR)/$(MOD_NAME).ko $(OUT_DIR_BASE)/linux_modules/ ;\
180 touch $(OUT_DIR_BASE)/.$(MOD_NAME) ;\
181 $(BOLD_PRINT) "done: $(MOD_TARGET)" ;\
182 rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ;\
183 fi
184
185# Take care of compiling generated code for linux kernel
186ifneq ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
187
188$(SRC_DIR)/%.c : $(CODEGEN_OUTPUT_DIR)/../%.c
189 $(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
190
191$(SRC_DIR)/%.h : $(CODEGEN_OUTPUT_DIR)/../%.h
192 $(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
193
194endif
195
196# End of MOD_TYPE==linux_module
197endif
198
199else
200# only for MOD_CUSTOM include Module Makefile second time for propagate
201# custom rules, first time included in Makefile.config for all modules
202include $(SRC_DIR)/Makefile
203# End of ifneq ($(MOD_CUSTOM), y)
204endif
205
206$(OUT_DIR)/%.o: $(SRC_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
207ifeq (x"$(V)", x"0")
208 @echo "CC $<"
209endif
210 $(SILENT_BUILD)mkdir -p $(dir $@)
211 $(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
212ifeq (x"$(USE_LINT)", x"yes")
213ifeq (x"$(V)", x"0")
214 @echo "LINT $<"
215endif
216 $(SILENT_BUILD)FORCE_LINT=$(FORCE_LINT) $(MAKE_DEVICE_DIR)/lint.sh $(LINT_FLAGS) $(filter -I% -D%, $(CFLAGS)) $< || { rm $@; false; }
217endif
218ifeq (x"$(USE_CLANG)", x"y")
219ifeq (x"$(V)", x"0")
220 _fn=`basename "$<" .c` ;\
221 eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
222 if test "$$_disable_fn_set" != "y" ; then echo "CLANG $<"; else echo "CLANG $< ... skipped"; fi
223endif
224 _fn=`basename "$<" .c` ;\
225 eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
226 if test "$$_disable_fn_set" != "y" ; then $(CLANG) $(CLANG_FLAGS) -c $< -o $@.clang && rm -f $@.clang; fi
227# ifeq (x"$(USE_CLANG)", x"y")
228endif
229
230$(OUT_DIR)/%.o: $(SRC_DIR)/%.s $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
231ifeq (x"$(V)", x"0")
232 @echo "AS $<"
233endif
234 $(SILENT_BUILD)mkdir -p $(dir $@)
235 $(SILENT_BUILD)$(BLD_AS) $(asFLAGS) -o $@ $<
236
237$(OUT_DIR)/%.o: $(SRC_DIR)/%.S $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
238ifeq (x"$(V)", x"0")
239 @echo "AS $<"
240endif
241 $(SILENT_BUILD)mkdir -p $(dir $@)
242 $(SILENT_BUILD)$(BLD_CC) $(ASFLAGS) -o $@ $<
243
244
245$(OUT_DIR)/%.d: $(SRC_DIR)/%.c $(SRC_DIR)/Makefile
246ifneq ("$(BUILD_DEPS_IN_CC)", "y")
247ifeq (x"$(V)", x"0")
248 @echo "DP $<"
249endif
250 $(SILENT_BUILD)mkdir -p $(dir $@)
251 $(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $< > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
252endif
253
254$(CODEGEN_OUTPUT_DIR)/%.o: $(CODEGEN_OUTPUT_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
255ifeq (x"$(V)", x"0")
256 @echo "CC $<"
257endif
258 $(SILENT_BUILD)mkdir -p $(dir $@)
259 $(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
260
261$(CODEGEN_OUTPUT_DIR)/%.d: $(CODEGEN_OUTPUT_DIR)/%.c $(SRC_DIR)/Makefile
262ifneq ("$(BUILD_DEPS_IN_CC)", "y")
263ifeq (x"$(V)", x"0")
264 @echo "DP $<"
265endif
266 $(SILENT_BUILD)mkdir -p $(dir $@)
267 $(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $< > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
268endif
269
270ifneq ("$(SKIP_DEPS)", "yes")
271ifneq ("$(MOD_TYPE)", "linux_module")
272ifneq ("$(MOD_TYPE)", "linux_lib")
273-include $(OBJS:.o=.d)
274endif
275endif
276endif
277
278BUILD_UNITEST = $(UNITEST)
279ifeq ("$(OBJS)", "")
280 BUILD_UNITEST = n
281endif
282ifeq ("$(OS)", "threadx")
283 BUILD_UNITEST = n
284endif
285
286# Only build unitest if library objects are included
287ifeq ("$(BUILD_UNITEST)", "y")
288
289unitest: $(OUT_DIR)/unitest
290
291$(OUT_DIR)/unitest: $(OUT_DIR)/unitest.o $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
292 $(SILENT_BUILD)$(BLD_CC) -o $@ $(OUT_DIR)/unitest.o $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
293 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
294 @$(BOLD_PRINT) "done: $@"
295
296# else of ifneq ("$(BUILD_UNITEST)", "y")
297else
298
299unitest: $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
300
301# endif of ifneq ("$(BUILD_UNITEST)", "y")
302endif
303
304# Generate version header
305MODEL_REVISION_FILE = $(MODEL_OUT_DIR)/bcmolt_model_revision.h
306
307ifneq ("$(RELEASE_BUILD)", "y")
308$(MODEL_REVISION_FILE): $(MODEL_FILE)
309 mkdir -p $(MODEL_OUT_DIR)
310 @$(TOP_DIR)/scripts/update_model_revision.sh $< $@
311
312# Generate sources if necessary
313ifneq ("$(GEN_SRCS)", "")
314ifneq ("$(CUSTOM_CODEGEN)", "y")
315
316$(CODEGEN_OUTPUT_DIR)/.generated: $(MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*) $(MODEL_REVISION_FILE)
317 $(SILENT_BUILD)rm -fr $@
318 @echo "Generating code in $(CODEGEN_OUTPUT_DIR) from model..."
319 @mkdir -p $(CODEGEN_OUTPUT_DIR)
320 $(SILENT_BUILD)$(MONO_PATH) $(CODEGEN_EXE) --genobjmodel -objtags=$(GEN_OBJTAGS) -objset=$(MODEL_FILE) \
321 $(GEN_EXTRA_TYPES) -templatedir=$(CODEGEN_INPUT_DIR) -outdir=$(CODEGEN_OUTPUT_DIR)
322 $(SILENT_BUILD)touch $@
323 @echo "Code generation in $(CODEGEN_OUTPUT_DIR) complete!"
324
325$(GEN_SRCS): $(CODEGEN_OUTPUT_DIR)/.generated
326
327# ifneq ("$(CUSTOM_CODEGEN)", "y")
328endif
329
330# ifneq ("$(GEN_SRCS)", "")
331endif
332
333# ifneq ("$(RELEASE_BUILD)", "y")
334endif
335
336#
337# Dependency rules generation: --> Makefile.config.$(MOD_NAME)
338#
339
340MOD_CONFIG_FILE = $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
341MOD_CONFIG_DEF = $(MOD_NAME)_DEP_DEFINED
342ifneq ("$(MOD_INC_DIRS)", "")
343 # Make sure that each directory is an absolute path
344 MOD_INCS = $(addprefix -I$(TOP_DIR)/, $(subst $(TOP_DIR)/,,$(MOD_INC_DIRS)))
345else
346 MOD_INCS = -I$(SRC_DIR)
347endif
348
349#
350# Generate Makefile.config.$(MODULE) capable of re-creating the module
351#
352moddep: $(GEN_SRCS)
353ifeq (x"$(V)", x"3")
354 @echo "!!!!! moddep for MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_CUSTOM=$(MOD_CUSTOM)!!!"
355endif
356 $(SILENT_BUILD)mkdir -p $(OUT_DIR_BASE)
357 @rm -fr $(MOD_CONFIG_FILE)
358 @rm -fr $(OBJS:.o=.d)
359
360 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
361 @echo " $$""(info !!! MODULE=$$""(MOD_NAME) --> $(MOD_CONFIG_FILE): $(MOD_CONFIG_DEF)=$$""($(MOD_CONFIG_DEF)), DEPS=$(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
362 @echo "endif" >> $(MOD_CONFIG_FILE)
363
364 # Prevent double inclusion
365 @echo "ifneq (\"$$""($(MOD_CONFIG_DEF))\", \"y\")" >> $(MOD_CONFIG_FILE)
366 @echo "" >> $(MOD_CONFIG_FILE)
367 @echo "$(MOD_CONFIG_DEF) := y" >> $(MOD_CONFIG_FILE)
368
369 ifeq ("$(MODULE_IS_A_LIBRARY)", "y")
370 @echo "_skip_it := y" >> $(MOD_CONFIG_FILE)
371 else
372 @echo "_skip_it := n" >> $(MOD_CONFIG_FILE)
373 endif
374 @echo "ifneq (\"$$""(SKIP_LIB_MODULES)\", \"y\")" >> $(MOD_CONFIG_FILE)
375 @echo " _skip_it := n" >> $(MOD_CONFIG_FILE)
376 @echo "endif" >> $(MOD_CONFIG_FILE)
377
378 @echo "ifneq (\"$$""(_skip_it)\", \"y\")" >> $(MOD_CONFIG_FILE)
379
380 ifeq ("$(MODULE_IS_A_LIBRARY)", "y")
381 ifneq ("$(OBJS)", "")
382 @echo "EXTRA_LIBS += $(LIBS_MARKER)$(TARGET_LIB)" >> $(MOD_CONFIG_FILE)
383 @echo "EXTRA_LIBS_PATH += $(LIBS_PATH_MARKER)$(OUT_DIR)" >> $(MOD_CONFIG_FILE)
384 endif
385 ifneq ("$(MOD_LIBS)", "")
386 @echo "EXTRA_LIBS += $(MOD_LIBS)" >> $(MOD_CONFIG_FILE)
387 endif
388 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
389 @echo " MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
390 @echo "endif" >> $(MOD_CONFIG_FILE)
391 ifneq ("$(startup_src)", "")
392 @echo "" >> $(MOD_CONFIG_FILE)
393 @echo "ENTRY_POINT_SRC = $(SRC_DIR)/$(startup_src)" >> $(MOD_CONFIG_FILE)
394 @echo "" >> $(MOD_CONFIG_FILE)
395 endif
396 endif
397
398 ifeq ("$(MOD_TYPE)", "linux_lib")
399 ifneq ("$(OBJS)", "")
400 @echo "ALL_LIB_OBJS += $(LINUX_LIB_OBJECTS)" >> $(MOD_CONFIG_FILE)
401 endif
402 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
403 @echo " MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
404 @echo "endif" >> $(MOD_CONFIG_FILE)
405 endif
406
407 ifeq ("$(MOD_TYPE)", "linux_module")
408 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
409 @echo " KBUILD_EXTRA_SYMBOLS += $(SRC_DIR)/Module.symvers" >> $(MOD_CONFIG_FILE)
410 @echo " MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
411 @echo "endif" >> $(MOD_CONFIG_FILE)
412 endif
413
414 # Module creation rules
415 @echo "$(MOD_NAME)_$(SUBSYSTEM): $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
416 @echo "" >> $(MOD_CONFIG_FILE)
417 @echo "$(OUT_DIR_BASE)/.$(MOD_NAME): .FORCE" >> $(MOD_CONFIG_FILE)
418 ifeq ("$(MOD_CUSTOM)", "y")
419 @echo " $$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
420 else
421 ifneq ("$(OBJS)", "")
422 @echo " $$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
423 endif
424 ifeq ("$(OBJS)", "")
425 @echo " if [ ! -f $(OUT_DIR_BASE)/.$(MOD_NAME) ]; then touch $(OUT_DIR_BASE)/.$(MOD_NAME); fi" >> $(MOD_CONFIG_FILE)
426 endif
427 endif
428 @echo "" >> $(MOD_CONFIG_FILE)
429 @echo ".FORCE:" >> $(MOD_CONFIG_FILE)
430 @echo "" >> $(MOD_CONFIG_FILE)
431
432 ifneq ("$(MOD_DEFS)", "")
433 @echo "EXTRA_CFLAGS += $(MOD_DEFS)" >> $(MOD_CONFIG_FILE)
434 endif
435
436 @echo "endif" >> $(MOD_CONFIG_FILE)
437
438 # If it is a library and this file is included as someone's dependency - extend MOD_DEP_FULL_NAMES
439 # and generate a rule to rebuilt the library
440 ifneq ("$(MOD_DEPS)", "")
441 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
442 @echo " $$""(info !!! Now include dependencies $(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
443 @echo "endif" >> $(MOD_CONFIG_FILE)
444 @echo "$(MOD_NAME)_MOD_DEPS = $(MOD_DEPS)" >> $(MOD_CONFIG_FILE)
445 @echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")" >> $(MOD_CONFIG_FILE)
446 @echo "include $$""($(MOD_NAME)_MOD_DEPS:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
447 @echo "endif" >> $(MOD_CONFIG_FILE)
448 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
449 @echo " $$""(info !!! $(MOD_NAME) finished including dependencies)" >> $(MOD_CONFIG_FILE)
450 @echo "endif" >> $(MOD_CONFIG_FILE)
451 endif
452
453 @echo "EXTRA_CFLAGS += $(MOD_INCS)" >> $(MOD_CONFIG_FILE)
454
455 @echo "" >> $(MOD_CONFIG_FILE)
456 @echo "endif" >> $(MOD_CONFIG_FILE)
457#
458# end of moddep: target
459#
460
461clean_module:
462ifeq ("$(MOD_TYPE)", "linux_module")
463 $(SILENT_BUILD)-test -f $(SRC_DIR)/Makefile && $(MAKE) $(KERNEL_MAKEPARMS) clean
464 $(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $($(MOD_NAME)-objs) $($(MOD_NAME)-objs:../%=../.%.cmd)
465 $(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/linux_modules/$(MOD_NAME).ko
466endif
467ifeq ("$(MOD_TYPE)", "linux_lib")
468 $(SILENT_BUILD)rm -fr $(LINUX_LIB_OBJECTS)
469endif
470 $(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $(patsubst %.c,.%.o.cmd,$(srcs))
471 $(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.[o,d,a]' -print0 | xargs -0 rm -rf
472 $(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*~' -print0 | xargs -0 rm -rf
473 $(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.ko' -print0 | xargs -0 rm -rf
474 $(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '.*.cmd' -print0 | xargs -0 rm -rf
475 $(SILENT_BUILD)rm -fr $(SRC_DIR)/*.mod.c $(SRC_DIR)/modules.order $(SRC_DIR)/Module.symvers $(SRC_DIR)/.tmp_versions
476 $(SILENT_BUILD)rm -fr $(MOD_TARGET) $(OUT_DIR)/$(TARGET) $(OUT_DIR)/unitest $(TARGET_LIB_FNAME)
477 $(SILENT_BUILD)rm -fr $(ALL_LIB_OBJS)
478 $(SILENT_BUILD)rm -fr $(GEN_SRCS) $(CODEGEN_OUTPUT_DIR)/.generated
479ifneq ("$(MOD_NAME)", "")
480 $(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/.$(MOD_NAME)
481 $(SILENT_BUILD)rm -fr $(SRC_DIR)/.$(MOD_NAME)_in_progress
482endif
483
484clobber: clean_module
485 $(SILENT_BUILD)rm -fr $(OUT_DIR)
486
487# Optional platform-specific rules
488-include $(MAKE_DEVICE_DIR)/Makefile.$(SUBSYSTEM).rules
489
490# Generate board-specific environment if any
491board_env: $(BOARD_ENV_RULE)
492
493
494module_name:
495 $(info $(MOD_NAME))