177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# This file is intended to be included from each subdirectory makefile. 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Subdirectory makefiles must define: 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# SubDirs - The subdirectories to traverse. 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# ObjNames - The objects available in that directory. 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Implementation - The library configuration the objects should go in (Generic or 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Optimized) 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Dependencies - Any dependences for the object files. 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Subdirectory makefiles may define: 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# OnlyArchs - Only build the objects for the listed archs. 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# OnlyConfigs - Only build the objects for the listed configurations. 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifeq ($(Dir),) 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(error "No Dir variable defined.") 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao### 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Include child makefile fragments 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# The list of variables which are intended to be overridden in a subdirectory 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# makefile. 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoRequiredSubdirVariables := SubDirs ObjNames Implementation Dependencies 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoOptionalSubdirVariables := OnlyArchs OnlyConfigs 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Template: subdir_traverse_template subdir 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaodefine subdir_traverse_template 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,Dir,$(1)) 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifneq ($(DEBUGMAKE),) 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(info MAKE: $(Dir): Processing subdirectory) 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Construct the variable key for this directory. 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,DirKey,SubDir.$(subst .,,$(subst /,__,$(1)))) 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Append,SubDirKeys,$(DirKey)) 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$(call Set,$(DirKey).Dir,$(Dir)) 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Reset subdirectory specific variables to sentinel value. 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(foreach var,$$(RequiredSubdirVariables) $$(OptionalSubdirVariables),\ 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(call Set,$$(var),UNDEFINED)) 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Get the subdirectory variables. 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude $(1)/Makefile.mk 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifeq ($(DEBUGMAKE),2) 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(foreach var,$(RequiredSubdirVariables) $(OptionalSubdirVariables),\ 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(if $$(call strneq,UNDEFINED,$$($$(var))), \ 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(info MAKE: $(Dir): $$(var) is defined), \ 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(info MAKE: $(Dir): $$(var) is undefined))) 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Check for undefined required variables, and unset sentinel value from optional 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# variables. 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(foreach var,$(RequiredSubdirVariables),\ 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \ 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(error $(Dir): variable '$$(var)' was not undefined))) 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(foreach var,$(OptionalSubdirVariables),\ 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(if $$(call strneq,UNDEFINED,$$($$(var))),, \ 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(call Set,$$(var),))) 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Collect all subdirectory variables for subsequent use. 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(foreach var,$(RequiredSubdirVariables) $(OptionalSubdirVariables),\ 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(call Set,$(DirKey).$$(var),$$($$(var)))) 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Recurse. 6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoinclude make/subdir.mk 6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Restore directory variable, for cleanliness. 6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao$$(call Set,Dir,$(1)) 7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifneq ($(DEBUGMAKE),) 7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $$(info MAKE: $$(Dir): Done processing subdirectory) 7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif 7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendef 7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao# Evaluate this now so we do not have to worry about order of evaluation. 7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei LiaoSubDirsList := $(strip \ 7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(if $(call streq,.,$(Dir)),\ 8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(SubDirs),\ 8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(SubDirs:%=$(Dir)/%))) 8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoifeq ($(SubDirsList),) 8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoelse 8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao ifneq ($(DEBUGMAKE),) 8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(info MAKE: Descending into subdirs: $(SubDirsList)) 8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao endif 8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(foreach subdir,$(SubDirsList),\ 8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao $(eval $(call subdir_traverse_template,$(subdir)))) 9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoendif 91