blob: 093729758d5f4747ad3c8b9f3b59dc3a0596b483 [file] [log] [blame]
Pascal Brandb0104772014-06-12 15:56:20 +02001# 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)
Jerome Forissier73dc7282014-09-25 16:04:03 +020011# incdirs-$(oname)
12# incdirs-lib$(libname) [if libname is defined]
13# cppflags-lib$(libname) [if libname is defined]
Jerome Forissier3d34e122014-10-30 17:37:42 +010014# cflags-lib$(libname) [if libname is defined]
Pascal Brandb0104772014-06-12 15:56:20 +020015# for each file found, oname is the name of the object file for corresponding
16# source file
17
18srcs :=
19
20define process-subdir-srcs-y
21ifeq ($$(sub-dir),.)
Pascal Brand565e42f2014-08-07 13:42:57 +020022srcs += $1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020023oname := $(out-dir)/$(base-prefix)$(basename $1).o
Pascal Brandb0104772014-06-12 15:56:20 +020024else
Pascal Brand565e42f2014-08-07 13:42:57 +020025ifneq ($(filter /%,$(1)),)
26# $1 is an absolute path - start with "/"
27srcs += $1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020028oname := $(out-dir)/$(base-prefix)$(basename $1).o
Pascal Brand565e42f2014-08-07 13:42:57 +020029else
30srcs += $(sub-dir)/$1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020031oname := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o
Pascal Brandb0104772014-06-12 15:56:20 +020032endif
Pascal Brand565e42f2014-08-07 13:42:57 +020033endif
Pascal Brandb0104772014-06-12 15:56:20 +020034cflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y)
35cflags-remove-$$(oname) := $$(cflags-remove-y) \
36 $$(cflags-remove-$(1)-y)
37cppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y)
38cppflags-remove-$$(oname) := $$(cppflags-remove-y) \
39 $$(cppflags-remove-$(1)-y)
40aflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y)
41aflags-remove-$$(oname) := $$(aflags-remove-y) \
42 $$(aflags-remove-$(1)-y)
Jerome Forissier73dc7282014-09-25 16:04:03 +020043incdirs-$$(oname) := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
Pascal Brandb0104772014-06-12 15:56:20 +020044# Clear local filename specific variables to avoid accidental reuse
45# in another subdirectory
46cflags-$(1)-y :=
47cflags-remove-$(1)-y :=
Jerome Forissier3d34e122014-10-30 17:37:42 +010048cflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020049cppflags-$(1)-y :=
50cppflags-remove-$(1)-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020051cppflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020052aflags-$(1)-y :=
53aflags-remove-$(1)-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020054incdirs-$(1)-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020055fname :=
56oname :=
57endef #process-subdir-srcs-y
58
Jens Wiklander36a06052016-06-02 13:52:12 +020059define process-subdir-gensrcs-helper
60# $1 gensrc-y element
61# $2 full path and name of generated source file
62# $3 full path and name of object file compiled from source file
63# $4 full path to out directory
64
65gen-srcs2 += $2
66oname := $3
67
68FORCE-GENSRC: $2
69
70$$(addprefix $4,$$(produce-additional-$1)): $2
71
72subdir-$2 := $$(sub-dir)
73recipe-$2 := $$(recipe-$1)
74$2: $$(depends-$1)
75 @$(cmd-echo-silent) ' GEN $2'
76 $(q)mkdir -p $4
77 $(q)$$(recipe-$2)
78
79cflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y)
80cflags-remove-$$(oname) := $$(cflags-remove-y) \
81 $$(cflags-remove-$(1)-y)
82cppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y)
83cppflags-remove-$$(oname) := $$(cppflags-remove-y) \
84 $$(cppflags-remove-$(1)-y)
85aflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y)
86aflags-remove-$$(oname) := $$(aflags-remove-y) \
87 $$(aflags-remove-$(1)-y)
88incdirs-$$(oname) := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
89# Clear local filename specific variables to avoid accidental reuse
90# in another subdirectory
91cflags-$(1)-y :=
92cflags-remove-$(1)-y :=
93cflags-lib-y :=
94cppflags-$(1)-y :=
95cppflags-remove-$(1)-y :=
96cppflags-lib-y :=
97aflags-$(1)-y :=
98aflags-remove-$(1)-y :=
99incdirs-$(1)-y :=
100fname :=
101oname :=
102
103endef #process-subdir-gensrcs-helper
104
105define process-subdir-gensrcs-y
106$$(eval $$(call process-subdir-gensrcs-helper,$1,$(sub-dir-out)/$$(produce-$1),$(sub-dir-out)/$(basename $(produce-$1)).o,$(sub-dir-out)))
107endef #process-subdir-gensrcs-y
108
Pascal Brandb0104772014-06-12 15:56:20 +0200109define process-subdir
110sub-dir := $1
Jens Wiklander36a06052016-06-02 13:52:12 +0200111ifeq ($1,.)
112sub-dir-out := $(out-dir)/$(base-prefix)
113else
114sub-dir-out := $(out-dir)/$(base-prefix)$1
115endif
116
Pascal Brandb0104772014-06-12 15:56:20 +0200117include $1/sub.mk
118sub-subdirs := $$(addprefix $1/,$$(subdirs-y))
119incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y))
Jens Wiklander36a06052016-06-02 13:52:12 +0200120thissubdir-incdirs := $(out-dir)/$(base-prefix)$1 $$(addprefix $1/,$$(incdirs-y))
Jerome Forissier73dc7282014-09-25 16:04:03 +0200121ifneq ($$(libname),)
122incdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y))
Jerome Forissier3d34e122014-10-30 17:37:42 +0100123cflags-lib$$(libname) := $$(cflags-lib$$(libname)) $$(cflags-lib-y)
Jerome Forissier73dc7282014-09-25 16:04:03 +0200124cppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y)
125endif
Pascal Brandb0104772014-06-12 15:56:20 +0200126
127# Process files in current directory
Jens Wiklander36a06052016-06-02 13:52:12 +0200128$$(foreach g, $$(gensrcs-y), $$(eval $$(call process-subdir-gensrcs-y,$$(g))))
Pascal Brandb0104772014-06-12 15:56:20 +0200129$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s))))
130# Clear flags used when processing current directory
131srcs-y :=
132cflags-y :=
Jerome Forissier3d34e122014-10-30 17:37:42 +0100133cflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +0200134cppflags-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +0200135cppflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +0200136aflags-y :=
137cflags-remove-y :=
138subdirs-y :=
139global-incdirs-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +0200140incdirs-lib-y :=
141incdirs-y :=
Jens Wiklander36a06052016-06-02 13:52:12 +0200142gensrcs-y :=
143this-out-dir :=
Pascal Brandb0104772014-06-12 15:56:20 +0200144
145# Process subdirectories in current directory
146$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd))))
147endef #process-subdir
148
149# Top subdirectories
150$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd))))