1b0104773SPascal Brand# Input 2b0104773SPascal Brand# 3b0104773SPascal Brand# subdirs tells the subdirectories to descend 4b0104773SPascal Brand# 5b0104773SPascal Brand# Output 6b0104773SPascal Brand# 7b0104773SPascal Brand# set srcs 8b0104773SPascal Brand# set cflags-$(oname) cflags-remove-$(oname) 9b0104773SPascal Brand# aflags-$(oname) aflags-remove-$(oname) 10b0104773SPascal Brand# cppflags-$(oname) cppflags-remove-$(oname) 11*73dc728dSJerome Forissier# incdirs-$(oname) 12*73dc728dSJerome Forissier# incdirs-lib$(libname) [if libname is defined] 13*73dc728dSJerome Forissier# cppflags-lib$(libname) [if libname is defined] 14b0104773SPascal Brand# for each file found, oname is the name of the object file for corresponding 15b0104773SPascal Brand# source file 16b0104773SPascal Brand 17b0104773SPascal Brandsrcs := 18b0104773SPascal Brand 19b0104773SPascal Branddefine process-subdir-srcs-y 20b0104773SPascal Brandifeq ($$(sub-dir),.) 21565e42f9SPascal Brandsrcs += $1 224334e8d7SJerome Forissieroname := $(out-dir)/$(base-prefix)$(basename $1).o 23b0104773SPascal Brandelse 24565e42f9SPascal Brandifneq ($(filter /%,$(1)),) 25565e42f9SPascal Brand# $1 is an absolute path - start with "/" 26565e42f9SPascal Brandsrcs += $1 274334e8d7SJerome Forissieroname := $(out-dir)/$(base-prefix)$(basename $1).o 28565e42f9SPascal Brandelse 29565e42f9SPascal Brandsrcs += $(sub-dir)/$1 304334e8d7SJerome Forissieroname := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o 31b0104773SPascal Brandendif 32565e42f9SPascal Brandendif 33b0104773SPascal Brandcflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y) 34b0104773SPascal Brandcflags-remove-$$(oname) := $$(cflags-remove-y) \ 35b0104773SPascal Brand $$(cflags-remove-$(1)-y) 36b0104773SPascal Brandcppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y) 37b0104773SPascal Brandcppflags-remove-$$(oname) := $$(cppflags-remove-y) \ 38b0104773SPascal Brand $$(cppflags-remove-$(1)-y) 39b0104773SPascal Brandaflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y) 40b0104773SPascal Brandaflags-remove-$$(oname) := $$(aflags-remove-y) \ 41b0104773SPascal Brand $$(aflags-remove-$(1)-y) 42*73dc728dSJerome Forissierincdirs-$$(oname) := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y)) 43b0104773SPascal Brand# Clear local filename specific variables to avoid accidental reuse 44b0104773SPascal Brand# in another subdirectory 45b0104773SPascal Brandcflags-$(1)-y := 46b0104773SPascal Brandcflags-remove-$(1)-y := 47b0104773SPascal Brandcppflags-$(1)-y := 48b0104773SPascal Brandcppflags-remove-$(1)-y := 49*73dc728dSJerome Forissiercppflags-lib-y := 50b0104773SPascal Brandaflags-$(1)-y := 51b0104773SPascal Brandaflags-remove-$(1)-y := 52*73dc728dSJerome Forissierincdirs-$(1)-y := 53b0104773SPascal Brandfname := 54b0104773SPascal Brandoname := 55b0104773SPascal Brandendef #process-subdir-srcs-y 56b0104773SPascal Brand 57b0104773SPascal Branddefine process-subdir 58b0104773SPascal Brandsub-dir := $1 59b0104773SPascal Brandinclude $1/sub.mk 60b0104773SPascal Brandsub-subdirs := $$(addprefix $1/,$$(subdirs-y)) 61b0104773SPascal Brandincdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y)) 62*73dc728dSJerome Forissierthissubdir-incdirs := $$(addprefix $1/,$$(incdirs-y)) 63*73dc728dSJerome Forissierifneq ($$(libname),) 64*73dc728dSJerome Forissierincdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y)) 65*73dc728dSJerome Forissiercppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y) 66*73dc728dSJerome Forissierendif 67b0104773SPascal Brand 68b0104773SPascal Brand# Process files in current directory 69b0104773SPascal Brand$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s)))) 70b0104773SPascal Brand# Clear flags used when processing current directory 71b0104773SPascal Brandsrcs-y := 72b0104773SPascal Brandcflags-y := 73b0104773SPascal Brandcppflags-y := 74*73dc728dSJerome Forissiercppflags-lib-y := 75b0104773SPascal Brandaflags-y := 76b0104773SPascal Brandcflags-remove-y := 77b0104773SPascal Brandsubdirs-y := 78b0104773SPascal Brandglobal-incdirs-y := 79*73dc728dSJerome Forissierincdirs-lib-y := 80*73dc728dSJerome Forissierincdirs-y := 81b0104773SPascal Brand 82b0104773SPascal Brand# Process subdirectories in current directory 83b0104773SPascal Brand$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd)))) 84b0104773SPascal Brandendef #process-subdir 85b0104773SPascal Brand 86b0104773SPascal Brand# Top subdirectories 87b0104773SPascal Brand$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd)))) 88