1# Input 2# 3# subdirs tells the subdirectories to descend 4# 5# Output 6# 7# set srcs 8# set cflags-$(oname) cflags-remove-$(oname) 9# aflags-$(oname) aflags-remove-$(oname) 10# cppflags-$(oname) cppflags-remove-$(oname) 11# for each file found, oname is the name of the object file for corresponding 12# source file 13 14srcs := 15 16define process-subdir-srcs-y 17ifeq ($$(sub-dir),.) 18srcs += $1 19oname := $(out-dir)/$(base-prefix)$(basename $1).o 20else 21ifneq ($(filter /%,$(1)),) 22# $1 is an absolute path - start with "/" 23srcs += $1 24oname := $(out-dir)/$(base-prefix)$(basename $1).o 25else 26srcs += $(sub-dir)/$1 27oname := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o 28endif 29endif 30cflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y) 31cflags-remove-$$(oname) := $$(cflags-remove-y) \ 32 $$(cflags-remove-$(1)-y) 33cppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y) 34cppflags-remove-$$(oname) := $$(cppflags-remove-y) \ 35 $$(cppflags-remove-$(1)-y) 36aflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y) 37aflags-remove-$$(oname) := $$(aflags-remove-y) \ 38 $$(aflags-remove-$(1)-y) 39# Clear local filename specific variables to avoid accidental reuse 40# in another subdirectory 41cflags-$(1)-y := 42cflags-remove-$(1)-y := 43cppflags-$(1)-y := 44cppflags-remove-$(1)-y := 45aflags-$(1)-y := 46aflags-remove-$(1)-y := 47fname := 48oname := 49endef #process-subdir-srcs-y 50 51define process-subdir 52sub-dir := $1 53include $1/sub.mk 54sub-subdirs := $$(addprefix $1/,$$(subdirs-y)) 55incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y)) 56 57# Process files in current directory 58$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s)))) 59# Clear flags used when processing current directory 60srcs-y := 61cflags-y := 62cppflags-y := 63aflags-y := 64cflags-remove-y := 65subdirs-y := 66global-incdirs-y := 67 68# Process subdirectories in current directory 69$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd)))) 70endef #process-subdir 71 72# Top subdirectories 73$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd)))) 74