blob: 886b22f1e802223e232327b7a773a2b06fa4fb89 [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
52# of ifneq ("$(SKIP_LIB_MODULES)", "y")
53else
54
55# Create library if there are any objects
56$(MOD_TARGET): $(OBJS)
57ifneq ("$(OBJS)", "")
58 $(SILENT_BUILD)$(BLD_AR) $(ARFLAGS) $@ $(OBJS)
59ifeq ("$(MOD_POST_BUILD)", "")
60 @$(BOLD_PRINT) "done: $@"
61endif
62endif
63ifneq ("$(MOD_POST_BUILD)", "")
64 $(SILENT_BUILD)$(MOD_POST_BUILD)
65 @$(BOLD_PRINT) "done: $@"
66endif
67 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
68
69# end of ifeq ("$(SKIP_LIB_MODULES)", "y")
70endif
71
72# end of ifeq ("$(MOD_TYPE)", "lib")
73endif
74
75# Default shared_lib rule
76ifeq ("$(MOD_TYPE)", "shared_lib")
77
78EXTRA_CFLAGS += -fPIC
79
80# Create library if there are any objects
81$(MOD_TARGET): $(OBJS)
82ifneq ("$(OBJS)", "")
83 $(SILENT_BUILD)$(BLD_CC) -shared -o $@ $(OBJS) $(LFLAGS)
84 $(SILENT_BUILD)mkdir -p $(SHARED_LIB_DIR)
85 $(SILENT_BUILD)cp $@ $(SHARED_LIB_DIR)/
86ifeq ("$(MOD_POST_BUILD)", "")
87 @$(BOLD_PRINT) "done: $@"
88endif
89endif
90ifneq ("$(MOD_POST_BUILD)", "")
91 $(SILENT_BUILD)$(MOD_POST_BUILD)
92 @$(BOLD_PRINT) "done: $@"
93endif
94 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
95
96# end of ifeq ("$(MOD_TYPE)", "shared_lib")
97endif
98
99# Default app rule
100ifeq ("$(MOD_TYPE)", "app")
101
102$(MOD_TARGET): $(OBJS) $(MOD_DEPS_FILES)
103 $(SILENT_BUILD)$(BLD_CC) -o $@ $(OBJS) $(LFLAGS) $(EXTRA_LIBS_PATH) $(EXTRA_LIBS_NOREC_BEFORE) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(EXTRA_LIBS_NOREC_AFTER) $(LIBS)
104ifneq ("$(MOD_POST_BUILD)", "")
105 $(SILENT_BUILD)$(MOD_POST_BUILD)
106endif
107 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
108 @$(BOLD_PRINT) "done: $(OUT_DIR)/$(MOD_NAME)"
109
110# endif of ifeq ("$(MOD_TYPE)", "app")
111endif
112
113# For linux_lib we don't build anything. Object files are just added
114# when compiling modules depending on the libs
115ifeq ("$(MOD_TYPE)", "linux_lib")
116 LINUX_LIB_OBJECTS := $(srcs:%.c=$(SRC_DIR)/%.o)
117
118$(MOD_TARGET): $(SRCS) $(GEN_SRCS) $(MOD_DEPS_FILES)
119 $(SILENT_BUILD)touch $(MOD_TARGET)
120 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
121
122endif
123
124# Default linux_module$(srcs:%=$(SRC_DIR)/%)
125ifeq ("$(MOD_TYPE)", "linux_module")
126 obj-m += $(MOD_NAME).o
127 $(MOD_NAME)-objs := $(srcs:%.c=%.o)
128 LIB_OBJS_REL_PATH = $(foreach oo,$(ALL_LIB_OBJS),$(shell python -c "import os.path; print os.path.relpath('$(oo)', '$(SRC_DIR)')"))
129
130 _KERNEL_MAKEPARMS = -C $(KERNELDIR) M=$(SRC_DIR) KBUILD_EXTRA_SYMBOLS="$(KBUILD_EXTRA_SYMBOLS)" \
131 O=$(KERNEL_OUTDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) V=$(V) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
132 obj-m=$(obj-m) $(MOD_NAME)-objs="$($(MOD_NAME)-objs) $(LIB_OBJS_REL_PATH)"
133 KERNEL_MAKEPARMS = $(_KERNEL_MAKEPARMS:%os_abstraction/posix=%os_abstraction/linux)
134
135 # Prevent parallel build
136.NOTPARALLEL:
137
138 # Only build linux module if not already being built by another make thread.
139 # Otherwise, linux build system get confused
140 # Also, remove -s flag using MAKEFLAGS. Otherwise, linux build system will not print names of the files
141 # being compiled
142$(MOD_TARGET): $(SRCS) $(MOD_DEPS_FILES)
143ifneq ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
144 @cp -f $(TOP_DIR)/$(MOD_DIR)/Makefile $(SRC_DIR)
145endif
146 $(SILENT_BUILD)if [ ! -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ]; then \
147 touch $(SRC_DIR)/.$(MOD_NAME)_in_progress; \
148 MAKEFLAGS= $(MAKE) $(KERNEL_MAKEPARMS) ;\
149 if [[ "$$?" != "0" ]]; then \
150 rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress;\
151 exit -2;\
152 fi; \
153 mkdir -p $(OUT_DIR_BASE)/linux_modules ;\
154 touch -c $(MOD_TARGET) ;\
155 cp $(SRC_DIR)/$(MOD_NAME).ko $(OUT_DIR_BASE)/linux_modules/ ;\
156 touch $(OUT_DIR_BASE)/.$(MOD_NAME) ;\
157 $(BOLD_PRINT) "done: $(MOD_TARGET)" ;\
158 rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ;\
159 fi
160
161# Take care of compiling generated code for linux kernel
162ifneq ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
163
164$(SRC_DIR)/%.c : $(CODEGEN_OUTPUT_DIR)/../%.c
165 $(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
166
167$(SRC_DIR)/%.h : $(CODEGEN_OUTPUT_DIR)/../%.h
168 $(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/
169
170endif
171
172# End of MOD_TYPE==linux_module
173endif
174
175# else of ifneq ("$(MOD_CUSTOM)", "y")
176else
177
178# only for MOD_CUSTOM include Module Makefile second time for propagate
179# custom rules, first time included in Makefile.config for all modules
180include $(SRC_DIR)/Makefile
181
182# End of ifneq ($(MOD_CUSTOM), y)
183endif
184
185$(OUT_DIR)/%.o: $(SRC_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
186ifeq (x"$(V)", x"0")
187 @echo "CC $<"
188endif
189 $(SILENT_BUILD)mkdir -p $(dir $@)
190 $(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
191ifeq (x"$(USE_LINT)", x"yes")
192ifeq (x"$(V)", x"0")
193 @echo "LINT $<"
194endif
195 $(SILENT_BUILD)FORCE_LINT=$(FORCE_LINT) $(MAKE_DEVICE_DIR)/lint.sh $(LINT_FLAGS) $(filter -I% -D%, $(CFLAGS)) $< || { rm $@; false; }
196endif
197ifeq (x"$(USE_CLANG)", x"y")
198ifeq (x"$(V)", x"0")
199 _fn=`basename "$<" .c` ;\
200 eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
201 if test "$$_disable_fn_set" != "y" ; then echo "CLANG $<"; else echo "CLANG $< ... skipped"; fi
202endif
203 _fn=`basename "$<" .c` ;\
204 eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
205 if test "$$_disable_fn_set" != "y" ; then $(CLANG) $(CLANG_FLAGS) -c $< -o $@.clang && rm -f $@.clang; fi
206# end of ifeq (x"$(USE_CLANG)", x"y")
207endif
208
209$(OUT_DIR)/%.o: $(SRC_DIR)/%.s $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
210ifeq (x"$(V)", x"0")
211 @echo "AS $<"
212endif
213 $(SILENT_BUILD)mkdir -p $(dir $@)
214 $(SILENT_BUILD)$(BLD_AS) $(asFLAGS) -o $@ $<
215
216$(OUT_DIR)/%.o: $(SRC_DIR)/%.S $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
217ifeq (x"$(V)", x"0")
218 @echo "AS $<"
219endif
220 $(SILENT_BUILD)mkdir -p $(dir $@)
221 $(SILENT_BUILD)$(BLD_CC) $(ASFLAGS) -o $@ $<
222
223
224$(OUT_DIR)/%.d: $(SRC_DIR)/%.c $(SRC_DIR)/Makefile
225ifneq ("$(BUILD_DEPS_IN_CC)", "y")
226ifeq (x"$(V)", x"0")
227 @echo "DP $<"
228endif
229 $(SILENT_BUILD)mkdir -p $(dir $@)
230 $(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $< > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
231endif
232
233$(CODEGEN_OUTPUT_DIR)/%.o: $(CODEGEN_OUTPUT_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
234ifeq (x"$(V)", x"0")
235 @echo "CC $<"
236endif
237 $(SILENT_BUILD)mkdir -p $(dir $@)
238 $(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
239
240$(CODEGEN_OUTPUT_DIR)/%.d: $(CODEGEN_OUTPUT_DIR)/%.c $(SRC_DIR)/Makefile
241ifneq ("$(BUILD_DEPS_IN_CC)", "y")
242ifeq (x"$(V)", x"0")
243 @echo "DP $<"
244endif
245 $(SILENT_BUILD)mkdir -p $(dir $@)
246 $(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $< > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
247endif
248
249ifneq ("$(SKIP_DEPS)", "yes")
250ifneq ("$(MOD_TYPE)", "linux_module")
251ifneq ("$(MOD_TYPE)", "linux_lib")
252-include $(OBJS:.o=.d)
253endif
254endif
255endif
256
257BUILD_UNITEST = $(UNITEST)
258ifeq ("$(OBJS)", "")
259 BUILD_UNITEST = n
260endif
261
262# Only build unitest if library objects are included
263ifeq ("$(BUILD_UNITEST)", "y")
264
265unitest: $(OUT_DIR)/unitest
266
267$(OUT_DIR)/unitest: $(OUT_DIR)/unitest.o $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
268 $(SILENT_BUILD)$(BLD_CC) -o $@ $(OUT_DIR)/unitest.o $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
269 $(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
270 @$(BOLD_PRINT) "done: $@"
271
272# else of ifneq ("$(BUILD_UNITEST)", "y")
273else
274
275unitest: $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
276
277# endif of ifneq ("$(BUILD_UNITEST)", "y")
278endif
279
280# Generate sources if necessary
281ifneq ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")
282
283$(GEN_BAL_SRCS) $(GEN_BAL_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_bal
284$(GEN_OMCI_SRCS) $(GEN_OMCI_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci
285$(GEN_OMCI_STACK_SRCS) $(GEN_OMCI_STACK_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack
286
287$(OUT_DIR)/.$(MOD_NAME)_generated_bal: $(BAL_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
288 $(call gen_cmd,$(GEN_BAL_SRCS),$(GEN_BAL_HDRS),$(BAL_MODEL_FILE),"bcmbal")
289
290$(OUT_DIR)/.$(MOD_NAME)_generated_omci: $(OMCI_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
291 $(call gen_cmd,$(GEN_OMCI_SRCS),$(GEN_OMCI_HDRS),$(OMCI_MODEL_FILE),"bcmomci")
292
293$(OMCI_STACK_CODEGEN_EXE): $(OMCI_STACK_CODEGEN_INPUT_DIR)/omci_me_codegen.c
294 mkdir -p $(OUT_DIR)
295 $(BLD_CC_HOST) $(EXTRA_CFLAGS) -gdwarf-3 -o $@ $< -I$(TOP_DIR)/src/common/os_abstraction -I$(TOP_DIR)/src/common/os_abstraction/posix -I$(TOP_DIR)/src/common/config -I$(TOP_DIR)/src/core/platform -I$(TOP_DIR)/src/common/include
296
297$(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack: $(OMCI_STACK_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*) $(OMCI_STACK_CODEGEN_EXE)
298 $(call gen_omci_stack_cmd,$(GEN_OMCI_STACK_SRCS),$(GEN_OMCI_STACK_HDRS),$(OMCI_STACK_MODEL_FILE),"bcm_omci")
299
300define gen_cmd
301 mkdir -p $(CODEGEN_OUTPUT_DIR)
302 echo "Generating code from model: $(notdir $1 $2)"
303 $(MONO_PATH) $(CODEGEN_EXE) --genobjmodel -objset="$3" -style=bal -prefix=$4 \
304 -templatedir="$(CODEGEN_INPUT_DIR)" -outdir="$(CODEGEN_OUTPUT_DIR)"
305 touch $@
306 echo "Code generation complete!"
307endef
308
309define gen_omci_stack_cmd
310 echo "Generating code from model: $(notdir $1 $2)"
311 $(OMCI_STACK_CODEGEN_EXE) $4 $(OUT_DIR) $3 $(addprefix $(OMCI_STACK_CODEGEN_INPUT_DIR)/, $(addsuffix .tmpl, $(notdir $1 $2)))
312 for file in $(GEN_OMCI_STACK_HDRS) $(GEN_OMCI_STACK_SRCS); do \
313 $(TOP_DIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(TOP_DIR)/COPYRIGHT $$file > $$file.tmp; \
314 mv $$file.tmp $$file; \
315 done
316 touch $@
317 echo "Code generation complete!"
318endef
319
320# end of ifneq ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")
321endif
322
323#
324# Dependency rules generation: --> Makefile.config.$(MOD_NAME)
325#
326
327MOD_CONFIG_FILE = $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
328MOD_CONFIG_DEF = $(MOD_NAME)_DEP_DEFINED
329ifneq ("$(MOD_INC_DIRS)", "")
330 # Make sure that each directory is an absolute path
331 MOD_INCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(MOD_INC_DIRS)))))
332else
333 MOD_INCS = -I$(SRC_DIR)
334 ifneq ("$(GEN_HDRS)", "")
335 MOD_INCS += -I$(CODEGEN_OUTPUT_DIR)
336 endif
337endif
338
339#
340# Generate Makefile.config.$(MODULE) capable of re-creating the module
341#
342moddep: $(GEN_SRCS) $(GEN_HDRS)
343ifeq (x"$(V)", x"3")
344 @echo "!!!!! moddep for MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_CUSTOM=$(MOD_CUSTOM)!!!"
345endif
346 $(SILENT_BUILD)mkdir -p $(OUT_DIR_BASE)
347 @rm -fr $(MOD_CONFIG_FILE)
348 @rm -fr $(OBJS:.o=.d)
349
350 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
351 @echo " $$""(info !!! MODULE=$$""(MOD_NAME) --> $(MOD_CONFIG_FILE): $(MOD_CONFIG_DEF)=$$""($(MOD_CONFIG_DEF)), DEPS=$(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
352 @echo "endif" >> $(MOD_CONFIG_FILE)
353
354 # Prevent double inclusion
355 @echo "ifneq (\"$$""($(MOD_CONFIG_DEF))\", \"y\")" >> $(MOD_CONFIG_FILE)
356 @echo "" >> $(MOD_CONFIG_FILE)
357 @echo "$(MOD_CONFIG_DEF) := y" >> $(MOD_CONFIG_FILE)
358 @echo "export $(MOD_NAME)_DIR := $(SRC_DIR)" >> $(MOD_CONFIG_FILE)
359 @echo "export $(MOD_NAME)_OUT_DIR := $(OUT_DIR)" >> $(MOD_CONFIG_FILE)
360
361 ifeq ("$(MODULE_IS_A_LIBRARY)", "y")
362 @echo "_skip_it := y" >> $(MOD_CONFIG_FILE)
363 else
364 @echo "_skip_it := n" >> $(MOD_CONFIG_FILE)
365 endif
366 @echo "ifneq (\"$$""(SKIP_LIB_MODULES)\", \"y\")" >> $(MOD_CONFIG_FILE)
367 @echo " _skip_it := n" >> $(MOD_CONFIG_FILE)
368 @echo "endif" >> $(MOD_CONFIG_FILE)
369
370 @echo "ifneq (\"$$""(_skip_it)\", \"y\")" >> $(MOD_CONFIG_FILE)
371
372 ifeq ("$(MODULE_IS_A_LIBRARY)", "y")
373 ifneq ("$(OBJS)", "")
374 @echo "EXTRA_LIBS += $(LIBS_MARKER)$(TARGET_LIB)" >> $(MOD_CONFIG_FILE)
375 @echo "EXTRA_LIBS_PATH += $(LIBS_PATH_MARKER)$(OUT_DIR)" >> $(MOD_CONFIG_FILE)
376 endif
377 ifneq ("$(MOD_LIBS)", "")
378 @echo "EXTRA_LIBS += $(MOD_LIBS)" >> $(MOD_CONFIG_FILE)
379 endif
380 ifneq ("$(MOD_LIBS_NOREC_BEFORE)", "")
381 @echo "EXTRA_LIBS_NOREC_BEFORE += $(MOD_LIBS_NOREC_BEFORE)" >> $(MOD_CONFIG_FILE)
382 endif
383 ifneq ("$(MOD_LIBS_NOREC_AFTER)", "")
384 @echo "EXTRA_LIBS_NOREC_AFTER += $(MOD_LIBS_NOREC_AFTER)" >> $(MOD_CONFIG_FILE)
385 endif
386 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
387 @echo " MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
388 @echo "endif" >> $(MOD_CONFIG_FILE)
389 endif
390
391 ifeq ("$(MOD_TYPE)", "linux_lib")
392 ifneq ("$(OBJS)", "")
393 @echo "ALL_LIB_OBJS += $(LINUX_LIB_OBJECTS)" >> $(MOD_CONFIG_FILE)
394 endif
395 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
396 @echo " MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
397 @echo "endif" >> $(MOD_CONFIG_FILE)
398 endif
399
400 ifeq ("$(MOD_TYPE)", "linux_module")
401 @echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")" >> $(MOD_CONFIG_FILE)
402 @echo " KBUILD_EXTRA_SYMBOLS += $(SRC_DIR)/Module.symvers" >> $(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 # Module creation rules
408 @echo "$(MOD_NAME)_$(SUBSYSTEM): $(OUT_DIR_BASE)/.$(MOD_NAME)" >> $(MOD_CONFIG_FILE)
409 @echo "" >> $(MOD_CONFIG_FILE)
410 @echo "$(OUT_DIR_BASE)/.$(MOD_NAME): .FORCE" >> $(MOD_CONFIG_FILE)
411 ifeq ("$(MOD_CUSTOM)", "y")
412 @echo " $$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
413 else
414 ifneq ("$(OBJS)", "")
415 @echo " $$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
416 endif
417 ifeq ("$(OBJS)", "")
418 @echo " if [ ! -f $(OUT_DIR_BASE)/.$(MOD_NAME) ]; then touch $(OUT_DIR_BASE)/.$(MOD_NAME); fi" >> $(MOD_CONFIG_FILE)
419 endif
420 endif
421 @echo "" >> $(MOD_CONFIG_FILE)
422 @echo ".FORCE:" >> $(MOD_CONFIG_FILE)
423 @echo "" >> $(MOD_CONFIG_FILE)
424
425 ifneq ("$(MOD_DEFS)", "")
426 @echo "EXTRA_CFLAGS += $(MOD_DEFS)" >> $(MOD_CONFIG_FILE)
427 endif
428
429 @echo "endif" >> $(MOD_CONFIG_FILE)
430
431 # If it is a library and this file is included as someone's dependency - extend MOD_DEP_FULL_NAMES
432 # and generate a rule to rebuilt the library
433 ifneq ("$(MOD_DEPS)$(MOD_DEPS_OPT)", "")
434 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
435 @echo " $$""(info !!! Now include dependencies $(MOD_DEPS) $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
436 @echo "endif" >> $(MOD_CONFIG_FILE)
437 ifneq ("$(MOD_DEPS)", "")
438 @echo "$(MOD_NAME)_MOD_DEPS = $(MOD_DEPS)" >> $(MOD_CONFIG_FILE)
439 @echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")" >> $(MOD_CONFIG_FILE)
440 @echo "include $$""($(MOD_NAME)_MOD_DEPS:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
441 @echo "endif" >> $(MOD_CONFIG_FILE)
442 endif
443 ifneq ("$(MOD_DEPS_OPT)", "")
444 @echo "$(MOD_NAME)_MOD_DEPS_OPT = $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
445 @echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")" >> $(MOD_CONFIG_FILE)
446 @echo "-include $$""($(MOD_NAME)_MOD_DEPS_OPT:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
447 @echo "endif" >> $(MOD_CONFIG_FILE)
448 endif
449 @echo "ifeq (x\"$$""(V)\", x\"2\")" >> $(MOD_CONFIG_FILE)
450 @echo " $$""(info !!! $(MOD_NAME) finished including dependencies)" >> $(MOD_CONFIG_FILE)
451 @echo "endif" >> $(MOD_CONFIG_FILE)
452 endif
453
454 @echo "EXTRA_CFLAGS += $(MOD_INCS)" >> $(MOD_CONFIG_FILE)
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) $(GEN_HDRS) $(OUT_DIR)/.$(MOD_NAME)_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 subsystem-specific rules
488-include mk/$(SUBSYSTEM)/Makefile.$(SUBSYSTEM).rules
489
490# Generate board-specific environment if any
491board_env: $(BOARD_ENV_RULE)
492
493module_name:
494 $(info $(MOD_NAME))