xref: /optee_os/mk/subdir.mk (revision b01047730e77127c23a36591643eeb8bb0487d68)
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