hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Input
#
# subdirs    tells the subdirectories to descend
#
# Output
#
# set srcs
# set     cflags-$(oname) cflags-remove-$(oname)
#         aflags-$(oname) aflags-remove-$(oname)
#         cppflags-$(oname) cppflags-remove-$(oname)
#         incdirs-$(oname)
#         incdirs-lib$(libname)  [if libname is defined]
#         cppflags-lib$(libname) [if libname is defined]
#         cflags-lib$(libname)   [if libname is defined]
# for each file found, oname is the name of the object file for corresponding
# source file
 
srcs :=
 
define process-subdir-srcs-y
ifeq ($$(sub-dir),.)
srcs                 += $1
oname                := $(out-dir)/$(base-prefix)$(basename $1).o
else
ifneq ($(filter /%,$(1)),)
# $1 is an absolute path - start with "/"
srcs                 += $1
oname                := $(out-dir)/$(base-prefix)$(basename $1).o
else
srcs                += $(sub-dir)/$1
oname                := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o
endif
endif
cflags-$$(oname)         := $$(cflags-y) $$(cflags-$(1)-y)
cflags-remove-$$(oname)     := $$(cflags-remove-y) \
                   $$(cflags-remove-$(1)-y)
cppflags-$$(oname)         := $$(cppflags-y) $$(cppflags-$(1)-y)
cppflags-remove-$$(oname)     := $$(cppflags-remove-y) \
                   $$(cppflags-remove-$(1)-y)
aflags-$$(oname)         := $$(aflags-y) $$(aflags-$(1)-y)
aflags-remove-$$(oname)     := $$(aflags-remove-y) \
                   $$(aflags-remove-$(1)-y)
cxxflags-$$(oname)        := $$(cxxflags-y) $$(cxxflags-$(1)-y)
cxxflags-remove-$$(oname)    := $$(cxxflags-remove-y) \
                   $$(cxxflags-remove-$(1)-y)
incdirs-$$(oname)        := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
# Clear local filename specific variables to avoid accidental reuse
# in another subdirectory
cflags-$(1)-y             :=
cflags-remove-$(1)-y        :=
cflags-lib-y            :=
cppflags-$(1)-y            :=
cppflags-remove-$(1)-y        :=
cppflags-lib-y            :=
aflags-$(1)-y             :=
aflags-remove-$(1)-y        :=
incdirs-$(1)-y            :=
fname                :=
oname                :=
endef #process-subdir-srcs-y
 
define process-subdir
sub-dir := $1
include $1/sub.mk
sub-subdirs := $$(addprefix $1/,$$(subdirs-y))
incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y))
thissubdir-incdirs := $$(addprefix $1/,$$(incdirs-y))
ifneq ($$(libname),)
incdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y))
cflags-lib$$(libname) := $$(cflags-lib$$(libname)) $$(cflags-lib-y)
cppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y)
endif
 
# Process files in current directory
$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s))))
# Clear flags used when processing current directory
srcs-y :=
cflags-y :=
cflags-lib-y :=
cppflags-y :=
cppflags-lib-y :=
aflags-y :=
cflags-remove-y :=
subdirs-y :=
global-incdirs-y :=
incdirs-lib-y :=
incdirs-y :=
 
# Process subdirectories in current directory
$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd))))
endef #process-subdir
 
# Top subdirectories
$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd))))