Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 1 | # 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 Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 11 | # incdirs-$(oname) |
| 12 | # incdirs-lib$(libname) [if libname is defined] |
| 13 | # cppflags-lib$(libname) [if libname is defined] |
Jerome Forissier | 3d34e12 | 2014-10-30 17:37:42 +0100 | [diff] [blame] | 14 | # cflags-lib$(libname) [if libname is defined] |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 15 | # for each file found, oname is the name of the object file for corresponding |
| 16 | # source file |
| 17 | |
| 18 | srcs := |
| 19 | |
| 20 | define process-subdir-srcs-y |
| 21 | ifeq ($$(sub-dir),.) |
Pascal Brand | 565e42f | 2014-08-07 13:42:57 +0200 | [diff] [blame] | 22 | srcs += $1 |
Jerome Forissier | 4334e8d | 2014-09-08 10:53:42 +0200 | [diff] [blame] | 23 | oname := $(out-dir)/$(base-prefix)$(basename $1).o |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 24 | else |
Pascal Brand | 565e42f | 2014-08-07 13:42:57 +0200 | [diff] [blame] | 25 | ifneq ($(filter /%,$(1)),) |
| 26 | # $1 is an absolute path - start with "/" |
| 27 | srcs += $1 |
Jerome Forissier | 4334e8d | 2014-09-08 10:53:42 +0200 | [diff] [blame] | 28 | oname := $(out-dir)/$(base-prefix)$(basename $1).o |
Pascal Brand | 565e42f | 2014-08-07 13:42:57 +0200 | [diff] [blame] | 29 | else |
| 30 | srcs += $(sub-dir)/$1 |
Jerome Forissier | 4334e8d | 2014-09-08 10:53:42 +0200 | [diff] [blame] | 31 | oname := $(out-dir)/$(base-prefix)$(basename $$(sub-dir)/$1).o |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 32 | endif |
Pascal Brand | 565e42f | 2014-08-07 13:42:57 +0200 | [diff] [blame] | 33 | endif |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 34 | cflags-$$(oname) := $$(cflags-y) $$(cflags-$(1)-y) |
| 35 | cflags-remove-$$(oname) := $$(cflags-remove-y) \ |
| 36 | $$(cflags-remove-$(1)-y) |
| 37 | cppflags-$$(oname) := $$(cppflags-y) $$(cppflags-$(1)-y) |
| 38 | cppflags-remove-$$(oname) := $$(cppflags-remove-y) \ |
| 39 | $$(cppflags-remove-$(1)-y) |
| 40 | aflags-$$(oname) := $$(aflags-y) $$(aflags-$(1)-y) |
| 41 | aflags-remove-$$(oname) := $$(aflags-remove-y) \ |
| 42 | $$(aflags-remove-$(1)-y) |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 43 | incdirs-$$(oname) := $$(thissubdir-incdirs) $$(addprefix $(sub-dir)/,$$(incdirs-$(1)-y)) |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 44 | # Clear local filename specific variables to avoid accidental reuse |
| 45 | # in another subdirectory |
| 46 | cflags-$(1)-y := |
| 47 | cflags-remove-$(1)-y := |
Jerome Forissier | 3d34e12 | 2014-10-30 17:37:42 +0100 | [diff] [blame] | 48 | cflags-lib-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 49 | cppflags-$(1)-y := |
| 50 | cppflags-remove-$(1)-y := |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 51 | cppflags-lib-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 52 | aflags-$(1)-y := |
| 53 | aflags-remove-$(1)-y := |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 54 | incdirs-$(1)-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 55 | fname := |
| 56 | oname := |
| 57 | endef #process-subdir-srcs-y |
| 58 | |
| 59 | define process-subdir |
| 60 | sub-dir := $1 |
| 61 | include $1/sub.mk |
| 62 | sub-subdirs := $$(addprefix $1/,$$(subdirs-y)) |
| 63 | incdirs$(sm) := $(incdirs$(sm)) $$(addprefix $1/,$$(global-incdirs-y)) |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 64 | thissubdir-incdirs := $$(addprefix $1/,$$(incdirs-y)) |
| 65 | ifneq ($$(libname),) |
| 66 | incdirs-lib$$(libname) := $$(incdirs-lib$$(libname)) $$(addprefix $1/,$$(incdirs-lib-y)) |
Jerome Forissier | 3d34e12 | 2014-10-30 17:37:42 +0100 | [diff] [blame] | 67 | cflags-lib$$(libname) := $$(cflags-lib$$(libname)) $$(cflags-lib-y) |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 68 | cppflags-lib$$(libname) := $$(cppflags-lib$$(libname)) $$(cppflags-lib-y) |
| 69 | endif |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 70 | |
| 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 |
| 74 | srcs-y := |
| 75 | cflags-y := |
Jerome Forissier | 3d34e12 | 2014-10-30 17:37:42 +0100 | [diff] [blame] | 76 | cflags-lib-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 77 | cppflags-y := |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 78 | cppflags-lib-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 79 | aflags-y := |
| 80 | cflags-remove-y := |
| 81 | subdirs-y := |
| 82 | global-incdirs-y := |
Jerome Forissier | 73dc728 | 2014-09-25 16:04:03 +0200 | [diff] [blame] | 83 | incdirs-lib-y := |
| 84 | incdirs-y := |
Pascal Brand | b010477 | 2014-06-12 15:56:20 +0200 | [diff] [blame] | 85 | |
| 86 | # Process subdirectories in current directory |
| 87 | $$(foreach sd, $$(sub-subdirs), $$(eval $$(call process-subdir,$$(sd)))) |
| 88 | endef #process-subdir |
| 89 | |
| 90 | # Top subdirectories |
| 91 | $(foreach sd, $(subdirs), $(eval $(call process-subdir,$(sd)))) |