# Common Makefile rules
#

# For linux_lib we don't build anything. Object files are just added
# when compiling modules depending on the libs

ifeq  ("$(MOD_TYPE)", "linux_lib")
	# Skip libraries that might have crept in dependencies
    SKIP_LIB_MODULES = y
    export SKIP_LIB_MODULES
endif    

ifeq  ("$(MOD_TYPE)", "linux_module")
	# Skip libraries that might have crept in dependencies
    SKIP_LIB_MODULES = y
    export SKIP_LIB_MODULES
endif    

ifeq ("$(MOD_TYPE)", "lib")
    MODULE_IS_A_LIBRARY = y
else ifeq ("$(MOD_TYPE)", "shared_lib")
    MODULE_IS_A_LIBRARY = y
else
    MODULE_IS_A_LIBRARY = n
endif

# Include module's own auto-generated Makefile.config.$(MODULE) file if any
# It in turn includes all dependencies
ifeq (x"$(V)", x"2")
    $(info !!!MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_TARGET=$(MOD_TARGET))
    $(info !!!Including own dependency file: $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
endif
-include $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
ifeq (x"$(V)", x"2")
    $(info !!!After include of $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME))
endif

ifeq (x"$(V)", x"2")
    $(info !!! Building $(MOD_TYPE) module $(MOD_NAME): depends on $(MOD_DEPS_FILES) SKIP_LIBS=$(SKIP_LIB_MODULES))
endif

# Skip default rules for custom module
ifneq  ("$(MOD_CUSTOM)", "y")
 
# Default lib rule
ifeq  ("$(MOD_TYPE)", "lib")

ifeq ("$(SKIP_LIB_MODULES)", "y")

$(MOD_TARGET): 

# of ifneq  ("$(SKIP_LIB_MODULES)", "y")
else

# Create library if there are any objects 
$(MOD_TARGET): $(OBJS)
ifneq ("$(OBJS)", "")
	$(SILENT_BUILD)$(BLD_AR) $(ARFLAGS) $@ $(OBJS)
ifeq ("$(MOD_POST_BUILD)", "")
	@$(BOLD_PRINT) "done: $@"
endif	
endif
ifneq ("$(MOD_POST_BUILD)", "")
	$(SILENT_BUILD)$(MOD_POST_BUILD)
	@$(BOLD_PRINT) "done: $@"
endif	
	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)

# end of ifeq ("$(SKIP_LIB_MODULES)", "y")
endif

# end of ifeq  ("$(MOD_TYPE)", "lib")
endif
 
# Default shared_lib rule
ifeq  ("$(MOD_TYPE)", "shared_lib")

EXTRA_CFLAGS += -fPIC

# Create library if there are any objects 
$(MOD_TARGET): $(OBJS)
ifneq ("$(OBJS)", "")
	$(SILENT_BUILD)$(BLD_CC) -shared -o $@ $(OBJS) $(LFLAGS)
	$(SILENT_BUILD)mkdir -p $(SHARED_LIB_DIR)
	$(SILENT_BUILD)cp $@ $(SHARED_LIB_DIR)/
ifeq ("$(MOD_POST_BUILD)", "")
	@$(BOLD_PRINT) "done: $@"
endif	
endif
ifneq ("$(MOD_POST_BUILD)", "")
	$(SILENT_BUILD)$(MOD_POST_BUILD)
	@$(BOLD_PRINT) "done: $@"
endif	
	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)

# end of ifeq  ("$(MOD_TYPE)", "shared_lib")
endif

# Default app rule
ifeq  ("$(MOD_TYPE)", "app")

$(MOD_TARGET): $(OBJS) $(MOD_DEPS_FILES)
	$(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)
ifneq ("$(MOD_POST_BUILD)", "")
	$(SILENT_BUILD)$(MOD_POST_BUILD)
endif	
	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
	@$(BOLD_PRINT) "done: $(OUT_DIR)/$(MOD_NAME)"

# endif of ifeq  ("$(MOD_TYPE)", "app")
endif

# For linux_lib we don't build anything. Object files are just added
# when compiling modules depending on the libs
ifeq  ("$(MOD_TYPE)", "linux_lib")
    LINUX_LIB_OBJECTS := $(srcs:%.c=$(SRC_DIR)/%.o)

$(MOD_TARGET): $(SRCS) $(GEN_SRCS) $(MOD_DEPS_FILES)
	$(SILENT_BUILD)touch $(MOD_TARGET)
	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)

endif

# Default linux_module$(srcs:%=$(SRC_DIR)/%)
ifeq  ("$(MOD_TYPE)", "linux_module")
    obj-m    += $(MOD_NAME).o
    $(MOD_NAME)-objs := $(srcs:%.c=%.o)
    LIB_OBJS_REL_PATH = $(foreach oo,$(ALL_LIB_OBJS),$(shell python -c "import os.path; print os.path.relpath('$(oo)', '$(SRC_DIR)')"))

    _KERNEL_MAKEPARMS = -C $(KERNELDIR) M=$(SRC_DIR) KBUILD_EXTRA_SYMBOLS="$(KBUILD_EXTRA_SYMBOLS)" \
    	O=$(KERNEL_OUTDIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) V=$(V) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
    	obj-m=$(obj-m) $(MOD_NAME)-objs="$($(MOD_NAME)-objs) $(LIB_OBJS_REL_PATH)"
    KERNEL_MAKEPARMS = $(_KERNEL_MAKEPARMS:%os_abstraction/posix=%os_abstraction/linux)

	# Prevent parallel build    
.NOTPARALLEL:

    # Only build linux module if not already being built by another make thread.
    # Otherwise, linux build system get confused
    # Also, remove -s flag using MAKEFLAGS. Otherwise, linux build system will not print names of the files
    # being compiled
$(MOD_TARGET): $(SRCS) $(MOD_DEPS_FILES)
ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")
	@cp -f $(TOP_DIR)/$(MOD_DIR)/Makefile $(SRC_DIR)
endif
	$(SILENT_BUILD)if [ ! -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ]; then \
		touch $(SRC_DIR)/.$(MOD_NAME)_in_progress; \
		MAKEFLAGS= $(MAKE) $(KERNEL_MAKEPARMS) ;\
		if [[ "$$?" != "0" ]]; then \
			rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress;\
			exit -2;\
		fi; \
		mkdir -p $(OUT_DIR_BASE)/linux_modules ;\
		touch -c $(MOD_TARGET) ;\
		cp $(SRC_DIR)/$(MOD_NAME).ko $(OUT_DIR_BASE)/linux_modules/ ;\
		touch $(OUT_DIR_BASE)/.$(MOD_NAME) ;\
		$(BOLD_PRINT) "done: $(MOD_TARGET)" ;\
		rm -f $(SRC_DIR)/.$(MOD_NAME)_in_progress ;\
	fi

# Take care of compiling generated code for linux kernel
ifneq  ("$(SRC_DIR)", "$(TOP_DIR)/$(MOD_DIR)")

$(SRC_DIR)/%.c : $(CODEGEN_OUTPUT_DIR)/../%.c
	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/

$(SRC_DIR)/%.h : $(CODEGEN_OUTPUT_DIR)/../%.h
	$(SILENT_BUILD)cp -f $(CODEGEN_OUTPUT_DIR)/../*.[c,h] $(SRC_DIR)/

endif

# End of MOD_TYPE==linux_module
endif

# else of ifneq  ("$(MOD_CUSTOM)", "y")
else

# only for MOD_CUSTOM include Module Makefile second time for propagate  
# custom rules, first time included in Makefile.config for all modules 
include $(SRC_DIR)/Makefile

# End of ifneq ($(MOD_CUSTOM), y)
endif

$(OUT_DIR)/%.o: $(SRC_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
ifeq (x"$(V)", x"0")
	@echo "CC $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<
ifeq (x"$(USE_LINT)", x"yes")
ifeq (x"$(V)", x"0")
	@echo "LINT $<"
endif
	$(SILENT_BUILD)FORCE_LINT=$(FORCE_LINT) $(MAKE_DEVICE_DIR)/lint.sh $(LINT_FLAGS) $(filter -I% -D%, $(CFLAGS)) $< || { rm $@; false; }
endif
ifeq (x"$(USE_CLANG)", x"y")
ifeq (x"$(V)", x"0")
	_fn=`basename "$<" .c` ;\
	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
	if test "$$_disable_fn_set" != "y" ; then echo "CLANG $<"; else echo "CLANG $< ... skipped"; fi
endif
	_fn=`basename "$<" .c` ;\
	eval "_disable_fn_set=\$${DISABLE_CLANG_$$_fn}"; \
	if test "$$_disable_fn_set" != "y" ; then  $(CLANG) $(CLANG_FLAGS) -c $< -o $@.clang && rm -f $@.clang; fi
# end of ifeq (x"$(USE_CLANG)", x"y")	
endif	

$(OUT_DIR)/%.o: $(SRC_DIR)/%.s $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
ifeq (x"$(V)", x"0")
	@echo "AS $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_AS) $(asFLAGS) -o $@ $<

$(OUT_DIR)/%.o: $(SRC_DIR)/%.S $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
ifeq (x"$(V)", x"0")
	@echo "AS $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_CC) $(ASFLAGS) -o $@ $<


$(OUT_DIR)/%.d: $(SRC_DIR)/%.c $(SRC_DIR)/Makefile
ifneq ("$(BUILD_DEPS_IN_CC)", "y")
ifeq (x"$(V)", x"0")
	@echo "DP $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
endif

$(CODEGEN_OUTPUT_DIR)/%.o: $(CODEGEN_OUTPUT_DIR)/%.c $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
ifeq (x"$(V)", x"0")
	@echo "CC $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_CC) $(CFLAGS) -D__BASENAME__=`basename $<` -c -o $@ $<

$(CODEGEN_OUTPUT_DIR)/%.d: $(CODEGEN_OUTPUT_DIR)/%.c $(SRC_DIR)/Makefile
ifneq ("$(BUILD_DEPS_IN_CC)", "y")
ifeq (x"$(V)", x"0")
	@echo "DP $<"
endif
	$(SILENT_BUILD)mkdir -p $(dir $@)
	$(SILENT_BUILD)$(BLD_DEP) -MM -MT $(@:.d=.o) $(DEP_FLAGS) $<  > $@ && sed 's,\($*\.o\)[ :]*,\1 $@ : ,g' -i $@
endif

ifneq ("$(SKIP_DEPS)", "yes")
ifneq  ("$(MOD_TYPE)", "linux_module")
ifneq  ("$(MOD_TYPE)", "linux_lib")
-include $(OBJS:.o=.d)
endif
endif
endif

BUILD_UNITEST = $(UNITEST)
ifeq  ("$(OBJS)", "")
    BUILD_UNITEST = n
endif    

# Only build unitest if library objects are included
ifeq  ("$(BUILD_UNITEST)", "y")

unitest: $(OUT_DIR)/unitest

$(OUT_DIR)/unitest: $(OUT_DIR)/unitest.o $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
	$(SILENT_BUILD)$(BLD_CC) -o $@ $(OUT_DIR)/unitest.o $(LFLAGS) $(EXTRA_LIBS_PATH) $(LIBS_START_MARKER) $(EXTRA_LIBS) $(LIBS_END_MARKER) $(LIBS)
	$(SILENT_BUILD)touch $(OUT_DIR_BASE)/.$(MOD_NAME)
	@$(BOLD_PRINT) "done: $@"

# else of ifneq  ("$(BUILD_UNITEST)", "y")
else 

unitest: $(TARGET_LIB_FNAME) $(MOD_DEPS_FILES)
	
# endif of ifneq  ("$(BUILD_UNITEST)", "y")
endif

# Generate sources if necessary
ifneq  ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")

$(GEN_BAL_SRCS) $(GEN_BAL_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_bal
$(GEN_OMCI_SRCS) $(GEN_OMCI_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci
$(GEN_OMCI_STACK_SRCS) $(GEN_OMCI_STACK_HDRS): $(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack

$(OUT_DIR)/.$(MOD_NAME)_generated_bal: $(BAL_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
	$(call gen_cmd,$(GEN_BAL_SRCS),$(GEN_BAL_HDRS),$(BAL_MODEL_FILE),"bcmbal")

$(OUT_DIR)/.$(MOD_NAME)_generated_omci: $(OMCI_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*)
	$(call gen_cmd,$(GEN_OMCI_SRCS),$(GEN_OMCI_HDRS),$(OMCI_MODEL_FILE),"bcmomci")

$(OMCI_STACK_CODEGEN_EXE): $(OMCI_STACK_CODEGEN_INPUT_DIR)/omci_me_codegen.c
	mkdir -p $(OUT_DIR)
	$(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

$(OUT_DIR)/.$(MOD_NAME)_generated_omci_stack: $(OMCI_STACK_MODEL_FILE) $(wildcard $(CODEGEN_DIR)/*) $(wildcard $(CODEGEN_INPUT_DIR)/*) $(OMCI_STACK_CODEGEN_EXE)
	$(call gen_omci_stack_cmd,$(GEN_OMCI_STACK_SRCS),$(GEN_OMCI_STACK_HDRS),$(OMCI_STACK_MODEL_FILE),"bcm_omci")

define gen_cmd
	mkdir -p $(CODEGEN_OUTPUT_DIR)
	echo "Generating code from model: $(notdir $1 $2)"
	$(MONO_PATH) $(CODEGEN_EXE) --genobjmodel -objset="$3" -style=bal -prefix=$4 \
   	-templatedir="$(CODEGEN_INPUT_DIR)" -outdir="$(CODEGEN_OUTPUT_DIR)"
	touch $@ 
	echo "Code generation complete!"
endef

define gen_omci_stack_cmd
	echo "Generating code from model: $(notdir $1 $2)"
    $(OMCI_STACK_CODEGEN_EXE) $4 $(OUT_DIR) $3 $(addprefix $(OMCI_STACK_CODEGEN_INPUT_DIR)/, $(addsuffix .tmpl, $(notdir $1 $2)))
    for file in $(GEN_OMCI_STACK_HDRS) $(GEN_OMCI_STACK_SRCS); do \
        $(TOP_DIR)/tools/copyright_tools/insert_copyright.pl -t c -l $(TOP_DIR)/COPYRIGHT $$file > $$file.tmp; \
        mv $$file.tmp $$file; \
    done
	touch $@ 
	echo "Code generation complete!"
endef

# end of ifneq  ("$(GEN_SRCS)$(GEN_HDRS)$(GEN_OMCI_SRCS)$(GEN_OMCI_HDRS)$(GEN_OMCI_STACK_SRCS)$(GEN_OMCI_STACK_HDRS)", "")
endif

#
# Dependency rules generation: --> Makefile.config.$(MOD_NAME)
# 

MOD_CONFIG_FILE = $(OUT_DIR_BASE)/Makefile.config.$(MOD_NAME)
MOD_CONFIG_DEF  = $(MOD_NAME)_DEP_DEFINED
ifneq ("$(MOD_INC_DIRS)", "")
    # Make sure that each directory is an absolute path
    MOD_INCS = $(addprefix -I, $(abspath $(subst -I,,$(subst $(TOP_DIR)/,,$(MOD_INC_DIRS)))))
else
	MOD_INCS = -I$(SRC_DIR)
    ifneq ("$(GEN_HDRS)", "")
        MOD_INCS += -I$(CODEGEN_OUTPUT_DIR)
	endif
endif

# 
# Generate Makefile.config.$(MODULE) capable of re-creating the module
#
moddep: $(GEN_SRCS) $(GEN_HDRS)
ifeq (x"$(V)", x"3")
	@echo "!!!!!  moddep for  MOD_NAME=$(MOD_NAME) MOD_TYPE=$(MOD_TYPE) MOD_CUSTOM=$(MOD_CUSTOM)!!!"
endif
	$(SILENT_BUILD)mkdir -p $(OUT_DIR_BASE)
	@rm -fr $(MOD_CONFIG_FILE)
	@rm -fr $(OBJS:.o=.d)

	@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
	@echo "    $$""(info !!! MODULE=$$""(MOD_NAME) --> $(MOD_CONFIG_FILE): $(MOD_CONFIG_DEF)=$$""($(MOD_CONFIG_DEF)), DEPS=$(MOD_DEPS))" >> $(MOD_CONFIG_FILE)
	@echo "endif"  >> $(MOD_CONFIG_FILE)

    # Prevent double inclusion 
	@echo "ifneq (\"$$""($(MOD_CONFIG_DEF))\", \"y\")" >> $(MOD_CONFIG_FILE)
	@echo "" >> $(MOD_CONFIG_FILE)
	@echo "$(MOD_CONFIG_DEF) := y" >> $(MOD_CONFIG_FILE)
	@echo "export $(MOD_NAME)_DIR := $(SRC_DIR)" >> $(MOD_CONFIG_FILE)
	@echo "export $(MOD_NAME)_OUT_DIR := $(OUT_DIR)" >> $(MOD_CONFIG_FILE)

    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
		@echo "_skip_it := y" >> $(MOD_CONFIG_FILE)
    else
		@echo "_skip_it := n" >> $(MOD_CONFIG_FILE)
    endif
	@echo "ifneq (\"$$""(SKIP_LIB_MODULES)\", \"y\")" >> $(MOD_CONFIG_FILE)
	@echo "    _skip_it := n" >> $(MOD_CONFIG_FILE)
	@echo "endif" >> $(MOD_CONFIG_FILE)

	@echo "ifneq (\"$$""(_skip_it)\", \"y\")"  >> $(MOD_CONFIG_FILE)

    ifeq  ("$(MODULE_IS_A_LIBRARY)", "y")
        ifneq ("$(OBJS)", "")
			@echo "EXTRA_LIBS += $(LIBS_MARKER)$(TARGET_LIB)" >> $(MOD_CONFIG_FILE)
			@echo "EXTRA_LIBS_PATH += $(LIBS_PATH_MARKER)$(OUT_DIR)" >> $(MOD_CONFIG_FILE)
        endif
        ifneq ("$(MOD_LIBS)", "")
			@echo "EXTRA_LIBS += $(MOD_LIBS)" >> $(MOD_CONFIG_FILE)
        endif
        ifneq ("$(MOD_LIBS_NOREC_BEFORE)", "")
			@echo "EXTRA_LIBS_NOREC_BEFORE += $(MOD_LIBS_NOREC_BEFORE)" >> $(MOD_CONFIG_FILE)
        endif
        ifneq ("$(MOD_LIBS_NOREC_AFTER)", "")
			@echo "EXTRA_LIBS_NOREC_AFTER += $(MOD_LIBS_NOREC_AFTER)" >> $(MOD_CONFIG_FILE)
        endif
		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
    endif

    ifeq  ("$(MOD_TYPE)", "linux_lib")
        ifneq ("$(OBJS)", "")
			@echo "ALL_LIB_OBJS += $(LINUX_LIB_OBJECTS)"  >> $(MOD_CONFIG_FILE)
        endif
		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
		@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
    endif

    ifeq  ("$(MOD_TYPE)", "linux_module")
		@echo "ifneq (x\"$$""(MOD_NAME)\", x\"$(MOD_NAME)\")"  >> $(MOD_CONFIG_FILE)
			@echo "   KBUILD_EXTRA_SYMBOLS += $(SRC_DIR)/Module.symvers" >> $(MOD_CONFIG_FILE)
			@echo "   MOD_DEPS_FILES += $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
    endif

    # Module creation rules
	@echo "$(MOD_NAME)_$(SUBSYSTEM): $(OUT_DIR_BASE)/.$(MOD_NAME)"  >> $(MOD_CONFIG_FILE)
	@echo ""  >> $(MOD_CONFIG_FILE)
	@echo "$(OUT_DIR_BASE)/.$(MOD_NAME): .FORCE"   >> $(MOD_CONFIG_FILE)
    ifeq  ("$(MOD_CUSTOM)", "y")
		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
    else
    ifneq  ("$(OBJS)", "")
		@echo "		$$""(MAKE) MOD_DIR=$(MOD_DIR) -f $(MAKE_DIR)/Makefile.template $(MOD_TARGET)" >> $(MOD_CONFIG_FILE)
    endif
    ifeq  ("$(OBJS)", "")
		@echo "		if [ ! -f $(OUT_DIR_BASE)/.$(MOD_NAME) ]; then touch $(OUT_DIR_BASE)/.$(MOD_NAME); fi" >> $(MOD_CONFIG_FILE)
    endif
    endif
	@echo ""  >> $(MOD_CONFIG_FILE)
	@echo ".FORCE:"   >> $(MOD_CONFIG_FILE)
	@echo ""  >> $(MOD_CONFIG_FILE)

    ifneq ("$(MOD_DEFS)", "")
		@echo "EXTRA_CFLAGS += $(MOD_DEFS)" >> $(MOD_CONFIG_FILE)
    endif
	
	@echo "endif"  >> $(MOD_CONFIG_FILE)

    # If it is a library and this file is included as someone's dependency - extend MOD_DEP_FULL_NAMES
    # and generate a rule to rebuilt the library
    ifneq ("$(MOD_DEPS)$(MOD_DEPS_OPT)", "")
		@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
		@echo "   $$""(info !!! Now include dependencies $(MOD_DEPS) $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
        ifneq ("$(MOD_DEPS)", "")
		@echo "$(MOD_NAME)_MOD_DEPS = $(MOD_DEPS)" >> $(MOD_CONFIG_FILE)
		@echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")"  >> $(MOD_CONFIG_FILE)
		@echo "include $$""($(MOD_NAME)_MOD_DEPS:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
        endif
        ifneq ("$(MOD_DEPS_OPT)", "")
		@echo "$(MOD_NAME)_MOD_DEPS_OPT = $(MOD_DEPS_OPT)" >> $(MOD_CONFIG_FILE)
		@echo "ifneq (x\"$$""(SKIP_DEPS)\", x\"yes\")"  >> $(MOD_CONFIG_FILE)
		@echo "-include $$""($(MOD_NAME)_MOD_DEPS_OPT:%=$(OUT_DIR_BASE)/Makefile.config.%)" >> $(MOD_CONFIG_FILE)
		@echo "endif"  >> $(MOD_CONFIG_FILE)
        endif
	@echo "ifeq (x\"$$""(V)\", x\"2\")"  >> $(MOD_CONFIG_FILE)
	@echo "   $$""(info !!! $(MOD_NAME) finished including dependencies)" >> $(MOD_CONFIG_FILE)
	@echo "endif"  >> $(MOD_CONFIG_FILE)
    endif

	@echo "EXTRA_CFLAGS += $(MOD_INCS)" >> $(MOD_CONFIG_FILE)
	@echo "" >> $(MOD_CONFIG_FILE)
	@echo "endif" >> $(MOD_CONFIG_FILE)
# 
# end of moddep: target
#

clean_module::
ifeq  ("$(MOD_TYPE)", "linux_module")
	$(SILENT_BUILD)-test -f $(SRC_DIR)/Makefile && $(MAKE) $(KERNEL_MAKEPARMS) clean
	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $($(MOD_NAME)-objs) $($(MOD_NAME)-objs:../%=../.%.cmd)
	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/linux_modules/$(MOD_NAME).ko
endif
ifeq  ("$(MOD_TYPE)", "linux_lib")
	$(SILENT_BUILD)rm -fr $(LINUX_LIB_OBJECTS)
endif	
	$(SILENT_BUILD)cd $(SRC_DIR) && rm -fr $(patsubst %.c,.%.o.cmd,$(srcs))
	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.[o,d,a]' -print0 | xargs -0 rm -rf
	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*~'        -print0 | xargs -0 rm -rf
	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '*.ko'      -print0 | xargs -0 rm -rf
	$(SILENT_BUILD)[ ! -d $(OUT_DIR) ] || find $(OUT_DIR) -name '.*.cmd'    -print0 | xargs -0 rm -rf
	$(SILENT_BUILD)rm -fr $(SRC_DIR)/*.mod.c $(SRC_DIR)/modules.order $(SRC_DIR)/Module.symvers $(SRC_DIR)/.tmp_versions
	$(SILENT_BUILD)rm -fr $(MOD_TARGET) $(OUT_DIR)/$(TARGET) $(OUT_DIR)/unitest $(TARGET_LIB_FNAME)
	$(SILENT_BUILD)rm -fr $(ALL_LIB_OBJS)
	$(SILENT_BUILD)rm -fr $(GEN_SRCS) $(GEN_HDRS) $(OUT_DIR)/.$(MOD_NAME)_generated_*
ifneq ("$(MOD_NAME)", "")
	$(SILENT_BUILD)rm -fr $(OUT_DIR_BASE)/.$(MOD_NAME)
	$(SILENT_BUILD)rm -fr $(SRC_DIR)/.$(MOD_NAME)_in_progress
endif	
    
clobber: clean_module
	$(SILENT_BUILD)rm -fr $(OUT_DIR)

# Optional subsystem-specific rules
-include mk/$(SUBSYSTEM)/Makefile.$(SUBSYSTEM).rules

# Generate board-specific environment if any
board_env: $(BOARD_ENV_RULE)

module_name:
	$(info $(MOD_NAME))
