1*b0104773SPascal Brand# Input 2*b0104773SPascal Brand# 3*b0104773SPascal Brand# subdirs tells the subdirectories to descend 4*b0104773SPascal Brand# 5*b0104773SPascal Brand# Output 6*b0104773SPascal Brand# 7*b0104773SPascal Brand# set srcs 8*b0104773SPascal Brand# set cflags-$(oname) cflags-remove-$(oname) 9*b0104773SPascal Brand# aflags-$(oname) aflags-remove-$(oname) 10*b0104773SPascal Brand# cppflags-$(oname) cppflags-remove-$(oname) 11*b0104773SPascal Brand# for each file found, oname is the name of the object file for corresponding 12*b0104773SPascal Brand# source file 13*b0104773SPascal Brand 14*b0104773SPascal Brandsrcs := 15*b0104773SPascal Brand 16*b0104773SPascal Branddefine process-subdir-srcs-y 17*b0104773SPascal Brandifeq ($$(sub-dir),.) 18*b0104773SPascal Brandfname := $1 19*b0104773SPascal Brandoname := $(out-dir)$(base-prefix)$(basename $1).o 20*b0104773SPascal Brandelse 21*b0104773SPascal Brandfname := $(sub-dir)/$1 22*b0104773SPascal Brandoname := $(out-dir)$(base-prefix)$(basename $$(sub-dir)/$1).o 23*b0104773SPascal Brandendif 24*b0104773SPascal Brandsrcs += $$(fname) 25*b0104773SPascal Brandcflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y) 26*b0104773SPascal Brandcflags-remove-$$(oname) := $$(cflags-remove-y) \ 27*b0104773SPascal Brand $$(cflags-remove-$(1)-y) 28*b0104773SPascal Brandcppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y) 29*b0104773SPascal Brandcppflags-remove-$$(oname) := $$(cppflags-remove-y) \ 30*b0104773SPascal Brand $$(cppflags-remove-$(1)-y) 31*b0104773SPascal Brandaflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y) 32*b0104773SPascal Brandaflags-remove-$$(oname) := $$(aflags-remove-y) \ 33*b0104773SPascal Brand $$(aflags-remove-$(1)-y) 34*b0104773SPascal Brand# Clear local filename specific variables to avoid accidental reuse 35*b0104773SPascal Brand# in another subdirectory 36*b0104773SPascal Brandcflags-$(1)-y := 37*b0104773SPascal Brandcflags-remove-$(1)-y := 38*b0104773SPascal Brandcppflags-$(1)-y := 39*b0104773SPascal Brandcppflags-remove-$(1)-y := 40*b0104773SPascal Brandaflags-$(1)-y := 41*b0104773SPascal Brandaflags-remove-$(1)-y := 42*b0104773SPascal Brandfname := 43*b0104773SPascal Brandoname := 44*b0104773SPascal Brandendef #process-subdir-srcs-y 45*b0104773SPascal Brand 46*b0104773SPascal Branddefine process-subdir 47*b0104773SPascal Brandsub-dir := $1 48*b0104773SPascal Brandinclude $1/sub.mk 49*b0104773SPascal Brandsub-subdirs := $$(addprefix $1/,$$(subdirs-y)) 50*b0104773SPascal Brandincdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y)) 51*b0104773SPascal Brand 52*b0104773SPascal Brand# Process files in current directory 53*b0104773SPascal Brand$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s)))) 54*b0104773SPascal Brand# Clear flags used when processing current directory 55*b0104773SPascal Brandsrcs-y := 56*b0104773SPascal Brandcflags-y := 57*b0104773SPascal Brandcppflags-y := 58*b0104773SPascal Brandaflags-y := 59*b0104773SPascal Brandcflags-remove-y := 60*b0104773SPascal Brandsubdirs-y := 61*b0104773SPascal Brandglobal-incdirs-y := 62*b0104773SPascal Brand 63*b0104773SPascal Brand# Process subdirectories in current directory 64*b0104773SPascal Brand$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd)))) 65*b0104773SPascal Brandendef #process-subdir 66*b0104773SPascal Brand 67*b0104773SPascal Brand# Top subdirectories 68*b0104773SPascal Brand$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd)))) 69