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