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