blob: 03700425754a60468bc6b7001a761e476fc17615 [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]
Pascal Brandb0104772014-06-12 15:56:20 +020014# for each file found, oname is the name of the object file for corresponding
15# source file
16
17srcs :=
18
19define process-subdir-srcs-y
20ifeq ($$(sub-dir),.)
Pascal Brand565e42f2014-08-07 13:42:57 +020021srcs += $1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020022oname := $(out-dir)/$(base-prefix)$(basename $1).o
Pascal Brandb0104772014-06-12 15:56:20 +020023else
Pascal Brand565e42f2014-08-07 13:42:57 +020024ifneq ($(filter /%,$(1)),)
25# $1 is an absolute path - start with "/"
26srcs += $1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020027oname := $(out-dir)/$(base-prefix)$(basename $1).o
Pascal Brand565e42f2014-08-07 13:42:57 +020028else
29srcs += $(sub-dir)/$1
Jerome Forissier4334e8d2014-09-08 10:53:42 +020030oname := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o
Pascal Brandb0104772014-06-12 15:56:20 +020031endif
Pascal Brand565e42f2014-08-07 13:42:57 +020032endif
Pascal Brandb0104772014-06-12 15:56:20 +020033cflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y)
34cflags-remove-$$(oname) := $$(cflags-remove-y) \
35 $$(cflags-remove-$(1)-y)
36cppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y)
37cppflags-remove-$$(oname) := $$(cppflags-remove-y) \
38 $$(cppflags-remove-$(1)-y)
39aflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y)
40aflags-remove-$$(oname) := $$(aflags-remove-y) \
41 $$(aflags-remove-$(1)-y)
Jerome Forissier73dc7282014-09-25 16:04:03 +020042incdirs-$$(oname) := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y))
Pascal Brandb0104772014-06-12 15:56:20 +020043# Clear local filename specific variables to avoid accidental reuse
44# in another subdirectory
45cflags-$(1)-y :=
46cflags-remove-$(1)-y :=
47cppflags-$(1)-y :=
48cppflags-remove-$(1)-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020049cppflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020050aflags-$(1)-y :=
51aflags-remove-$(1)-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020052incdirs-$(1)-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020053fname :=
54oname :=
55endef #process-subdir-srcs-y
56
57define process-subdir
58sub-dir := $1
59include $1/sub.mk
60sub-subdirs := $$(addprefix $1/,$$(subdirs-y))
61incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y))
Jerome Forissier73dc7282014-09-25 16:04:03 +020062thissubdir-incdirs := $$(addprefix $1/,$$(incdirs-y))
63ifneq ($$(libname),)
64incdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y))
65cppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y)
66endif
Pascal Brandb0104772014-06-12 15:56:20 +020067
68# Process files in current directory
69$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s))))
70# Clear flags used when processing current directory
71srcs-y :=
72cflags-y :=
73cppflags-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020074cppflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020075aflags-y :=
76cflags-remove-y :=
77subdirs-y :=
78global-incdirs-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020079incdirs-lib-y :=
80incdirs-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020081
82# Process subdirectories in current directory
83$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd))))
84endef #process-subdir
85
86# Top subdirectories
87$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd))))