xref: /optee_os/mk/subdir.mk (revision 36a0605468b3256e8dfdc92ac5be258cf8e7bb13)
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)
1173dc728dSJerome Forissier#         incdirs-$(oname)
1273dc728dSJerome Forissier#         incdirs-lib$(libname)  [if libname is defined]
1373dc728dSJerome Forissier#         cppflags-lib$(libname) [if libname is defined]
143d34e125SJerome Forissier#         cflags-lib$(libname)   [if libname is defined]
15b0104773SPascal Brand# for each file found, oname is the name of the object file for corresponding
16b0104773SPascal Brand# source file
17b0104773SPascal Brand
18b0104773SPascal Brandsrcs :=
19b0104773SPascal Brand
20b0104773SPascal Branddefine process-subdir-srcs-y
21b0104773SPascal Brandifeq ($$(sub-dir),.)
22565e42f9SPascal Brandsrcs 				+= $1
234334e8d7SJerome Forissieroname				:= $(out-dir)/$(base-prefix)$(basename $1).o
24b0104773SPascal Brandelse
25565e42f9SPascal Brandifneq ($(filter /%,$(1)),)
26565e42f9SPascal Brand# $1 is an absolute path - start with "/"
27565e42f9SPascal Brandsrcs 				+= $1
284334e8d7SJerome Forissieroname				:= $(out-dir)/$(base-prefix)$(basename $1).o
29565e42f9SPascal Brandelse
30565e42f9SPascal Brandsrcs				+= $(sub-dir)/$1
314334e8d7SJerome Forissieroname				:= $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o
32b0104773SPascal Brandendif
33565e42f9SPascal Brandendif
34b0104773SPascal Brandcflags-$$(oname) 		:= $$(cflags-y) $$(cflags-$(1)-y)
35b0104773SPascal Brandcflags-remove-$$(oname) 	:= $$(cflags-remove-y) \
36b0104773SPascal Brand					$$(cflags-remove-$(1)-y)
37b0104773SPascal Brandcppflags-$$(oname) 		:= $$(cppflags-y) $$(cppflags-$(1)-y)
38b0104773SPascal Brandcppflags-remove-$$(oname) 	:= $$(cppflags-remove-y) \
39b0104773SPascal Brand					$$(cppflags-remove-$(1)-y)
40b0104773SPascal Brandaflags-$$(oname) 		:= $$(aflags-y) $$(aflags-$(1)-y)
41b0104773SPascal Brandaflags-remove-$$(oname) 	:= $$(aflags-remove-y) \
42b0104773SPascal Brand					$$(aflags-remove-$(1)-y)
4373dc728dSJerome Forissierincdirs-$$(oname)		:= $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
44b0104773SPascal Brand# Clear local filename specific variables to avoid accidental reuse
45b0104773SPascal Brand# in another subdirectory
46b0104773SPascal Brandcflags-$(1)-y 			:=
47b0104773SPascal Brandcflags-remove-$(1)-y		:=
483d34e125SJerome Forissiercflags-lib-y			:=
49b0104773SPascal Brandcppflags-$(1)-y			:=
50b0104773SPascal Brandcppflags-remove-$(1)-y		:=
5173dc728dSJerome Forissiercppflags-lib-y			:=
52b0104773SPascal Brandaflags-$(1)-y 			:=
53b0104773SPascal Brandaflags-remove-$(1)-y		:=
5473dc728dSJerome Forissierincdirs-$(1)-y			:=
55b0104773SPascal Brandfname				:=
56b0104773SPascal Brandoname				:=
57b0104773SPascal Brandendef #process-subdir-srcs-y
58b0104773SPascal Brand
59*36a06054SJens Wiklanderdefine process-subdir-gensrcs-helper
60*36a06054SJens Wiklander# $1 gensrc-y element
61*36a06054SJens Wiklander# $2 full path and name of generated source file
62*36a06054SJens Wiklander# $3 full path and name of object file compiled from source file
63*36a06054SJens Wiklander# $4 full path to out directory
64*36a06054SJens Wiklander
65*36a06054SJens Wiklandergen-srcs2			+= $2
66*36a06054SJens Wiklanderoname				:= $3
67*36a06054SJens Wiklander
68*36a06054SJens WiklanderFORCE-GENSRC: $2
69*36a06054SJens Wiklander
70*36a06054SJens Wiklander$$(addprefix $4,$$(produce-additional-$1)): $2
71*36a06054SJens Wiklander
72*36a06054SJens Wiklandersubdir-$2 := $$(sub-dir)
73*36a06054SJens Wiklanderrecipe-$2 := $$(recipe-$1)
74*36a06054SJens Wiklander$2: $$(depends-$1)
75*36a06054SJens Wiklander	@$(cmd-echo-silent) '  GEN     $2'
76*36a06054SJens Wiklander	$(q)mkdir -p $4
77*36a06054SJens Wiklander	$(q)$$(recipe-$2)
78*36a06054SJens Wiklander
79*36a06054SJens Wiklandercflags-$$(oname) 		:= $$(cflags-y) $$(cflags-$(1)-y)
80*36a06054SJens Wiklandercflags-remove-$$(oname) 	:= $$(cflags-remove-y) \
81*36a06054SJens Wiklander					$$(cflags-remove-$(1)-y)
82*36a06054SJens Wiklandercppflags-$$(oname) 		:= $$(cppflags-y) $$(cppflags-$(1)-y)
83*36a06054SJens Wiklandercppflags-remove-$$(oname) 	:= $$(cppflags-remove-y) \
84*36a06054SJens Wiklander					$$(cppflags-remove-$(1)-y)
85*36a06054SJens Wiklanderaflags-$$(oname) 		:= $$(aflags-y) $$(aflags-$(1)-y)
86*36a06054SJens Wiklanderaflags-remove-$$(oname) 	:= $$(aflags-remove-y) \
87*36a06054SJens Wiklander					$$(aflags-remove-$(1)-y)
88*36a06054SJens Wiklanderincdirs-$$(oname)		:= $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
89*36a06054SJens Wiklander# Clear local filename specific variables to avoid accidental reuse
90*36a06054SJens Wiklander# in another subdirectory
91*36a06054SJens Wiklandercflags-$(1)-y 			:=
92*36a06054SJens Wiklandercflags-remove-$(1)-y		:=
93*36a06054SJens Wiklandercflags-lib-y			:=
94*36a06054SJens Wiklandercppflags-$(1)-y			:=
95*36a06054SJens Wiklandercppflags-remove-$(1)-y		:=
96*36a06054SJens Wiklandercppflags-lib-y			:=
97*36a06054SJens Wiklanderaflags-$(1)-y 			:=
98*36a06054SJens Wiklanderaflags-remove-$(1)-y		:=
99*36a06054SJens Wiklanderincdirs-$(1)-y			:=
100*36a06054SJens Wiklanderfname				:=
101*36a06054SJens Wiklanderoname				:=
102*36a06054SJens Wiklander
103*36a06054SJens Wiklanderendef #process-subdir-gensrcs-helper
104*36a06054SJens Wiklander
105*36a06054SJens Wiklanderdefine process-subdir-gensrcs-y
106*36a06054SJens Wiklander$$(eval $$(call process-subdir-gensrcs-helper,$1,$(sub-dir-out)/$$(produce-$1),$(sub-dir-out)/$(basename $(produce-$1)).o,$(sub-dir-out)))
107*36a06054SJens Wiklanderendef #process-subdir-gensrcs-y
108*36a06054SJens Wiklander
109b0104773SPascal Branddefine process-subdir
110b0104773SPascal Brandsub-dir := $1
111*36a06054SJens Wiklanderifeq ($1,.)
112*36a06054SJens Wiklandersub-dir-out := $(out-dir)/$(base-prefix)
113*36a06054SJens Wiklanderelse
114*36a06054SJens Wiklandersub-dir-out := $(out-dir)/$(base-prefix)$1
115*36a06054SJens Wiklanderendif
116*36a06054SJens Wiklander
117b0104773SPascal Brandinclude $1/sub.mk
118b0104773SPascal Brandsub-subdirs := $$(addprefix $1/,$$(subdirs-y))
119b0104773SPascal Brandincdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y))
120*36a06054SJens Wiklanderthissubdir-incdirs := $(out-dir)/$(base-prefix)$1 $$(addprefix $1/,$$(incdirs-y))
12173dc728dSJerome Forissierifneq ($$(libname),)
12273dc728dSJerome Forissierincdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y))
1233d34e125SJerome Forissiercflags-lib$$(libname) := $$(cflags-lib$$(libname)) $$(cflags-lib-y)
12473dc728dSJerome Forissiercppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y)
12573dc728dSJerome Forissierendif
126b0104773SPascal Brand
127b0104773SPascal Brand# Process files in current directory
128*36a06054SJens Wiklander$$(foreach g, $$(gensrcs-y), $$(eval $$(call process-subdir-gensrcs-y,$$(g))))
129b0104773SPascal Brand$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s))))
130b0104773SPascal Brand# Clear flags used when processing current directory
131b0104773SPascal Brandsrcs-y :=
132b0104773SPascal Brandcflags-y :=
1333d34e125SJerome Forissiercflags-lib-y :=
134b0104773SPascal Brandcppflags-y :=
13573dc728dSJerome Forissiercppflags-lib-y :=
136b0104773SPascal Brandaflags-y :=
137b0104773SPascal Brandcflags-remove-y :=
138b0104773SPascal Brandsubdirs-y :=
139b0104773SPascal Brandglobal-incdirs-y :=
14073dc728dSJerome Forissierincdirs-lib-y :=
14173dc728dSJerome Forissierincdirs-y :=
142*36a06054SJens Wiklandergensrcs-y :=
143*36a06054SJens Wiklanderthis-out-dir :=
144b0104773SPascal Brand
145b0104773SPascal Brand# Process subdirectories in current directory
146b0104773SPascal Brand$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd))))
147b0104773SPascal Brandendef #process-subdir
148b0104773SPascal Brand
149b0104773SPascal Brand# Top subdirectories
150b0104773SPascal Brand$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd))))
151