1ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovvariant_list := $(filter AUX-%,$(MAKECMDGOALS))
2ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
3ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifdef variant_list
4ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_OS_VARIANT_LIST := $(patsubst AUX-%,%,$(variant_list))
5ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovelse
6ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_OS_VARIANT_LIST := $(TARGET_AUX_OS_VARIANT_LIST)
7ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
8ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
9ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# exclude AUX targets from build
10ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifeq ($(AUX_OS_VARIANT_LIST),none)
11ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_OS_VARIANT_LIST :=
12ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
13ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
14ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# temporary workaround to support external toolchain
15ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifeq ($(NANOHUB_TOOLCHAIN),)
16ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_OS_VARIANT_LIST :=
17ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
18ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
19ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# setup toolchain paths for various CPU architectures
20ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# this one will come from android prebuilts eventually
21ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_TOOLCHAIN_cortexm4 := $(NANOHUB_TOOLCHAIN)
22ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifeq ($(wildcard $(AUX_TOOLCHAIN_cortexm4)gcc),)
23ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_TOOLCHAIN_cortexm4:=
24ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
25ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
26ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# there is no MAKE var that defines path to HOST toolchain
27ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# all the interesting paths are hardcoded in soong, and are not available from here
28ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# There is no other way but to hardcode them again, as we may need host x86 toolcain for AUX
29ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifeq ($(HOST_OS),linux)
30ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_TOOLCHAIN_x86 := prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/bin/x86_64-linux-
31ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
32ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
33ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# setup AUX globals
34ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_SHLIB_SUFFIX := .so
35ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_GLOBAL_ARFLAGS := crsPD
36ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_STATIC_LIB_SUFFIX := .a
37ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
38ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Load ever-lasting "indexed" version of AUX variant environment; it is treated as READ-ONLY from this
39ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# moment on.
40ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#
41ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# $(1) - variant
42ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# no return value
43ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdefine aux-variant-setup-paths
44ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_ROOT_$(1) := $(PRODUCT_OUT)/aux/$(1)) \
45ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_COMMON_OUT_ROOT_$(1) := $(AUX_OUT_ROOT_$(1))/common) \
46ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_$(1) := $(AUX_OUT_ROOT_$(1))/$(AUX_OS_$(1))-$(AUX_ARCH_$(1))-$(AUX_CPU_$(1))) \
47ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_INTERMEDIATES_$(1) := $(AUX_OUT_$(1))/obj) \
48ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_COMMON_INTERMEDIATES_$(1) := $(AUX_COMMON_OUT_ROOT_$(1))/obj) \
49ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_HEADERS_$(1) := $(AUX_OUT_INTERMEDIATES_$(1))/include) \
50ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_INTERMEDIATE_LIBRARIES_$(1) := $(AUX_OUT_INTERMEDIATES_$(1))/lib) \
51ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_NOTICE_FILES_$(1) := $(AUX_OUT_INTERMEDIATES_$(1))/NOTICE_FILES) \
52ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_FAKE_$(1) := $(AUX_OUT_$(1))/fake_packages) \
53ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_GEN_$(1) := $(AUX_OUT_$(1))/gen) \
54ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_COMMON_GEN_$(1) := $(AUX_COMMON_OUT_ROOT_$(1))/gen) \
55ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_EXECUTABLES_$(1) := $(AUX_OUT_$(1))/bin) \
56ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_UNSTRIPPED_$(1) := $(AUX_OUT_$(1))/symbols)
57ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendef
58ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
59ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Copy "indexed" AUX environment for given VARIANT into
60ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# volatile not-indexed set of variables for simplicity of access.
61ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Injection of index support throughout the build system is suboptimal
62ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# hence volatile environment is constructed
63ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Unlike HOST*, TARGET* variables, AUX* variables are NOT read-only, but their
64ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# indexed versions are.
65ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#
66ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# $(1) - variant
67ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# no return value
68ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdefine aux-variant-load-env
69ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS_VARIANT:=$(1)) \
70ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS:=$(AUX_OS_$(1))) \
71ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ARCH:=$(AUX_ARCH_$(1))) \
72ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_SUBARCH:=$(AUX_SUBARCH_$(1))) \
73ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_CPU:=$(AUX_CPU_$(1))) \
74ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS_PATH:=$(AUX_OS_PATH_$(1))) \
75ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_ROOT := $(AUX_OUT_ROOT_$(1))) \
76ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_COMMON_OUT_ROOT := $(AUX_COMMON_OUT_ROOT_$(1))) \
77ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT := $(AUX_OUT_$(1))) \
78ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_INTERMEDIATES := $(AUX_OUT_INTERMEDIATES_$(1))) \
79ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_COMMON_INTERMEDIATES := $(AUX_OUT_COMMON_INTERMEDIATES_$(1))) \
80ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_HEADERS := $(AUX_OUT_HEADERS_$(1))) \
81ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_INTERMEDIATE_LIBRARIES := $(AUX_OUT_INTERMEDIATE_LIBRARIES_$(1))) \
82ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_NOTICE_FILES := $(AUX_OUT_NOTICE_FILES_$(1))) \
83ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_FAKE := $(AUX_OUT_FAKE_$(1))) \
84ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_GEN := $(AUX_OUT_GEN_$(1))) \
85ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_COMMON_GEN := $(AUX_OUT_COMMON_GEN_$(1))) \
86ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_EXECUTABLES := $(AUX_OUT_EXECUTABLES_$(1))) \
87ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OUT_UNSTRIPPED := $(AUX_OUT_UNSTRIPPED_$(1)))
88ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendef
89ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
90ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# given a variant:path pair, load the variant conviguration with aux-variant-setup-paths from file
91ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# this is a build system extension mechainsm, since configuration typically resides in non-build
92ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# project space
93ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#
94ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# $(1) - variant:path pair
95ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# $(2) - file suffix
96ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# no return value
97ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdefine aux-variant-import-from-pair
98ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _pair := $(subst :, ,$(1))) \
99ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _name:=$(word 1,$(_pair))) \
100ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _path:=$(word 2,$(_pair))) \
101ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval include $(_path)/$(_name)$(2)) \
102ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS_VARIANT_LIST_$(AUX_OS_$(1)):=) \
103ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(call aux-variant-setup-paths,$(_name)) \
104ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ALL_VARIANTS += $(_name)) \
105ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ALL_OSES := $(filterout $(AUX_OS_$(_name)),$(AUX_ALL_OSES)) $(AUX_OS_$(_name))) \
106ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ALL_CPUS := $(filterout $(AUX_CPU_$(_name)),$(AUX_ALL_CPUS)) $(AUX_CPU_$(_name))) \
107ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ALL_ARCHS := $(filterout $(AUX_ARCH_$(_name)),$(AUX_ALL_ARCHS)) $(AUX_ARCH_$(_name))) \
108ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_ALL_SUBARCHS := $(filterout $(AUX_SUBARCH_$(_name)),$(AUX_ALL_SUBARCHS)) $(AUX_SUBARCH_$(_name)))
109ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendef
110ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
111ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Load system configuration referenced by AUX variant config;
112ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# this is a build extension mechanism; typically system config
113ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# resides in a non-build projects;
114ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# system config may define new rules and globally visible BUILD*
115ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# includes to support project-specific build steps and toolchains
116ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# MAintains list of valiants that reference this os config in OS "indexed" var
117ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# this facilitates multivariant build of the OS (or whataver it is the name of common component these variants share)
118ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#
119ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# $(1) - variant
120ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# no return value
121ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdefine aux-import-os-config
122ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _aioc_os := $(AUX_OS_$(1))) \
123ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS_PATH_$(1) := $(patsubst $(_aioc_os):%,%,$(filter $(_aioc_os):%,$(AUX_ALL_OS_PATHS)))) \
124ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _aioc_os_cfg := $(AUX_OS_PATH_$(1))/$(_aioc_os)$(os_sfx)) \
125ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(if $(wildcard $(_aioc_os_cfg)),,$(error AUX '$(_aioc_os)' OS config file [$(notdir $(_aioc_os_cfg))] required by AUX variant '$(1)' does not exist)) \
126ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(if $(filter $(_aioc_os),$(_os_list)),,$(eval include $(_aioc_os_cfg))) \
127ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval AUX_OS_VARIANT_LIST_$(_aioc_os) += $(1)) \
128ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _os_list += $(_aioc_os))
129ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendef
130ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
131ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# make sure that AUX config variables are minimally sane;
132ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# as a bare minimum they must contain the vars described by aux_env
133ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# Generate error if requirement is not met.
134ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#
135ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov#$(1) - variant
136ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# no return value
137ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdefine aux-variant-validate
138ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _all:=) \
139ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _req:=$(addsuffix _$(1),$(aux_env))) \
140ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(foreach var,$(_req),$(eval _all += $(var))) \
141ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(eval _missing := $(filterout $(_all),$(_req))) \
142ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(if $(_missing),$(error AUX variant $(1) must define vars: $(_missing)))
143ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendef
144ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
145ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_VARIANTS :=
146ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_OSES :=
147ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_CPUS :=
148ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_ARCHS :=
149ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_SUBARCHS :=
150ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
151ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovvariant_sfx :=_aux_variant_config.mk
152ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovos_sfx :=_aux_os_config.mk
153ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
154efb30be70330a50953407a0269c2e7fe8ff7246eColin Crossconfig_roots := $(wildcard device vendor)
155efb30be70330a50953407a0269c2e7fe8ff7246eColin Crossall_configs :=
156efb30be70330a50953407a0269c2e7fe8ff7246eColin Crossifdef config_roots
157efb30be70330a50953407a0269c2e7fe8ff7246eColin Crossall_configs := $(shell find $(config_roots) -maxdepth 4 -name '*$(variant_sfx)' -o -name '*$(os_sfx)' | sort)
158efb30be70330a50953407a0269c2e7fe8ff7246eColin Crossendif
159ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovall_os_configs := $(filter %$(os_sfx),$(all_configs))
160ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovall_variant_configs := $(filter %$(variant_sfx),$(all_configs))
161ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
162ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_OS_PATHS := $(foreach f,$(all_os_configs),$(patsubst %$(os_sfx),%,$(notdir $(f))):$(patsubst %/,%,$(dir $(f))))
163ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovAUX_ALL_OS_VARIANT_PATHS := $(foreach f,$(all_variant_configs),$(patsubst %$(variant_sfx),%,$(notdir $(f))):$(patsubst %/,%,$(dir $(f))))
164ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
165ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovmy_variant_pairs := $(foreach v,$(AUX_OS_VARIANT_LIST),$(filter $(v):%,$(AUX_ALL_OS_VARIANT_PATHS)))
166ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovmy_missing_variants := $(foreach v,$(AUX_OS_VARIANT_LIST),$(if $(filter $(v):%,$(AUX_ALL_OS_VARIANT_PATHS)),,$(v)))
167ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
168ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifneq ($(strip $(my_missing_variants)),)
169ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(error Don't know how to build variant(s): $(my_missing_variants))
170ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
171ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
172ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov# mandatory variables
173ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovaux_env := AUX_OS AUX_ARCH AUX_SUBARCH AUX_CPU
174ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
175ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(foreach v,$(my_variant_pairs),$(if $(filter $(v),$(AUX_ALL_VARIANTS)),,$(call aux-variant-import-from-pair,$(v),$(variant_sfx))))
176ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
177ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovifdef AUX_ALL_VARIANTS
178ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov_os_list :=
179ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov$(foreach v,$(AUX_ALL_VARIANTS),\
180ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov  $(call aux-import-os-config,$(v)) \
181ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov  $(call aux-variant-validate,$(v)) \
182ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov)
183ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovendif
184ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
185ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey PolyudovINSTALLED_AUX_TARGETS :=
186ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudov
187ccdc311b3328166687b2b3098059d50f1e8ff6e9Alexey Polyudovdroidcore: auxiliary
188