blob: 5523b610441ec7251e7964dba21d5a5db51d4457 [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
59define process-subdir
60sub-dir := $1
61include $1/sub.mk
62sub-subdirs := $$(addprefix $1/,$$(subdirs-y))
63incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y))
Jerome Forissier73dc7282014-09-25 16:04:03 +020064thissubdir-incdirs := $$(addprefix $1/,$$(incdirs-y))
65ifneq ($$(libname),)
66incdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y))
Jerome Forissier3d34e122014-10-30 17:37:42 +010067cflags-lib$$(libname) := $$(cflags-lib$$(libname)) $$(cflags-lib-y)
Jerome Forissier73dc7282014-09-25 16:04:03 +020068cppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y)
69endif
Pascal Brandb0104772014-06-12 15:56:20 +020070
71# Process files in current directory
72$$(foreach s, $$(srcs-y), $$(eval $$(call process-subdir-srcs-y,$$(s))))
73# Clear flags used when processing current directory
74srcs-y :=
75cflags-y :=
Jerome Forissier3d34e122014-10-30 17:37:42 +010076cflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020077cppflags-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020078cppflags-lib-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020079aflags-y :=
80cflags-remove-y :=
81subdirs-y :=
82global-incdirs-y :=
Jerome Forissier73dc7282014-09-25 16:04:03 +020083incdirs-lib-y :=
84incdirs-y :=
Pascal Brandb0104772014-06-12 15:56:20 +020085
86# Process subdirectories in current directory
87$$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd))))
88endef #process-subdir
89
90# Top subdirectories
91$(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd))))