18d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
28d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# Copyright (C) 2016 The Android Open Source Project
38d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
48d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# Licensed under the Apache License, Version 2.0 (the "License");
58d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# you may not use this file except in compliance with the License.
68d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# You may obtain a copy of the License at
78d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
88d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#      http://www.apache.org/licenses/LICENSE-2.0
98d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
108d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# Unless required by applicable law or agreed to in writing, software
118d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# distributed under the License is distributed on an "AS IS" BASIS,
128d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# See the License for the specific language governing permissions and
148d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# limitations under the License.
158d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
168d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
178d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_BUILD := $(NANOHUB_OS_PATH)/build
188d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
198d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_OS := nanohub
208d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_ALL_CLASSES := phone watch
218d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_ALL_TARGETS := APP BL OS
228d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
238d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_ALL_ALL := $(AUX_ALL_VARIANTS) $(AUX_ALL_OSES) $(AUX_ALL_ARCHS) $(AUX_ALL_SUBARCHS) $(AUX_ALL_CPUS) $(NANO_ALL_CLASSES) $(NANO_ALL_TARGETS)
248d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
258d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovGLOBAL_NANO_OBJCOPY_FLAGS_cortexm4 := -I elf32-littlearm -O binary
268d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
278d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovCLEAR_NANO_VARS := $(NANO_BUILD)/clear_vars.mk
288d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANOHUB_BL_CONFIG := $(NANO_BUILD)/bl_config.mk
298d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANOHUB_OS_CONFIG := $(NANO_BUILD)/os_config.mk
308d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANOHUB_APP_CONFIG := $(NANO_BUILD)/app_config.mk
318d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
328d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_BL_STATIC_LIBRARY := $(NANO_BUILD)/bl_static_library.mk
338d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_OS_STATIC_LIBRARY := $(NANO_BUILD)/os_static_library.mk
348d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_APP_STATIC_LIBRARY := $(NANO_BUILD)/app_static_library.mk
358d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_EXECUTABLE := $(NANO_BUILD)/nanohub_executable.mk
368d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_BL_EXECUTABLE := $(NANO_BUILD)/bl_executable.mk
378d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_OS_EXECUTABLE := $(NANO_BUILD)/os_executable.mk
388d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_OS_IMAGE := $(NANO_BUILD)/os_image.mk
398d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovBUILD_NANOHUB_APP_EXECUTABLE := $(NANO_BUILD)/app_executable.mk
40acf375bbc540a127f451754ce5a9b6e1abf74dbbAlexey PolyudovBUILD_NANOHUB_APP_CHRE_EXECUTABLE := $(NANO_BUILD)/app_chre_executable.mk
418d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
428d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANOAPP_POSTPROCESS := $(HOST_OUT_EXECUTABLES)/nanoapp_postprocess
438d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANOAPP_SIGN := $(HOST_OUT_EXECUTABLES)/nanoapp_sign
448d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
458d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - optional value to assign to
468d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#        pass empty to clear for repeated includes
478d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#        pass some definitive invalid value otherwise (after last repeat)
488d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-reset-built-env
498d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval OVERRIDE_BUILT_MODULE_PATH:=$(1)) \
508d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_BUILT_MODULE:=$(1)) \
518d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_INSTALLED_MODULE:=$(1)) \
528d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_INTERMEDIATE_TARGETS:=$(1))
538d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
548d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
558d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# variant may declare it's class; default is phone
568d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-variant-class
578d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(if $(filter $(NANO_ALL_CLASSES),$(NANO_CLASS_$(AUX_OS_VARIANT))),$(NANO_CLASS_$(AUX_OS_VARIANT)),phone)
588d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
598d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
608d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - target file
618d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - list of dependencies
628d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-gen-linker-script-from-list-body
638d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    mkdir -p $(dir $(1)) && \
648d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    rm -f $(1).tmp && \
658d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    touch $(1).tmp && \
668d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(foreach file,$(2),echo "INCLUDE $(file)"  >> $(1).tmp &&) \
678d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    mv -f $(1).tmp $(1)
688d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
698d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
708d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - target file
718d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - list of dependencies
728d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-gen-linker-script-from-list
738d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(1): $(2)
748d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov	$(call nano-gen-linker-script-from-list-body,$(1),$(2))
758d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
768d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
778d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# create linker script rule
788d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
798d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - target file
808d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - { os | bl }
818d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(3) - platform name
828d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(4) - platform class
838d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(5) - platform dir
848d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-gen-linker-script
858d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval $(call nano-gen-linker-script-from-list,$(1),$(patsubst %,$(NANOHUB_OS_PATH)/os/platform/$(5)/lkr/%.lkr,$(3).map $(4).$(2) $(4).common)))
868d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
878d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
888d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# create linker script rule
898d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
908d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - target file
918d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - bl|os
928d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(3) - platform name
938d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(4) - platform class
948d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(5) - platform dir
958d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
968d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# NOTE: ($(2), $(3) - unused; keep for argument compatibility with nano-gen-linker-script
978d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-gen-linker-script-native
988d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval $(call nano-gen-linker-script-from-list,$(1),$(NANOHUB_OS_PATH)/os/platform/$(5)/lkr/$(4).extra.lkr))
998d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1008d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1018d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# variables that Android.mk or our config files may define per-cpu, per-arch etc;
1028d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# must include all LOCAL* variables we modify in any place within the scope of for-each-variant.
1038d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#
1048d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# workflow is as follows:
1058d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# before starting iterations:
1068d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   all the LOCAL_<var> and LOCAL_<var>_<cpu,arch,subarch,variant,os,class> from NANO_VAR_LIST
1078d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   are copied to LOCAL_NANO_*; original LOCAL_* are erased to avoid conflicts fith underlaying build which also does suffix handling.
1088d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   this part is performed by nano-user-vars-save-all
1098d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# on every iteration, before includeing file:
1108d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   all the LOCAL_NANO_<var>_<cpu,arch,subarch,variant,os,class> vars are loaded for the current variant,
1118d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   and then concatenated all toghether and also with
1128d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   NANO_VARIANT_<target>_<var>_<variant> (where target is OS or BL for system builds, or APP for nanoapp builds) and
1138d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   NANO_VARIANT_<var>_<variant>; result is stored in LOCAL_<var>
1148d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   this var is used by underlaying build infrastructure as usual
1158d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   this part is performed by nano-user-vars-load-all
1168d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# on every iteration, after includeing file:
1178d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   reset "BUILT" variables in order to let next iteration going
1188d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# after all iterations done:
1198d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov#   erase all volatile AUX* enviraonment, cleanup all the LOCAL* and LOCAL_NANO* vars
1208d12dbd535b38fdf0743683c7984a687866dc119Alexey PolyudovNANO_VAR_LIST :=                \
1218d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    C_INCLUDES                  \
1228d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    CFLAGS                      \
1238d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    ASFLAGS                     \
1248d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    CPPFLAGS                    \
1258d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    SRC_FILES                   \
1268d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    STATIC_LIBRARIES            \
1278d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    WHOLE_STATIC_LIBRARIES      \
1288d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    LDFLAGS                     \
1298d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    OBJCOPY_SECT                \
1308d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1318d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# collect anything that user might define per-cpu, per-arch etc
1328d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - one of $(NANO_VAR_LIST)
1338d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - optional: one of { APP,BL,OS }
1348d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-user-var-load
1358d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_$(1) :=                                                    \
1368d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1))                                                  \
1378d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(NANO_VARIANT_$(1)_$(AUX_OS_VARIANT))                              \
1388d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(NANO_VARIANT_$(2)_$(1)_$(AUX_OS_VARIANT))                         \
1398d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(AUX_OS_VARIANT))                                \
1408d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(AUX_CPU))                                       \
1418d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(AUX_ARCH))                                      \
1428d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(AUX_SUBARCH))                                   \
1438d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(AUX_OS))                                        \
1448d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(call nano-variant-class,$(AUX_OS_VARIANT)))     \
1458d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(LOCAL_NANO_$(1)_$(LOCAL_NANO_MODULE_TYPE))                        \
1468d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov)
1478d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1488d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1498d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-user-var-reset-final
1508d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_$(1):=) \
1518d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(eval LOCAL_NANO_$(1):=) \
1528d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(foreach v,$(NANO_ALL_ALL),\
1538d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval LOCAL_NANO_$(1)_$(v):=) \
1548d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval LOCAL_$(1)_$(v):=) \
1558d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov)
1568d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1578d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1588d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-user-vars-reset-final
1598d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(foreach _nuvrf_var,$(NANO_VAR_LIST),$(call nano-user-var-reset-final,$(_nuvrf_var)))
1608d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1618d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1628d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - optional: one of APP,BL,OS
1638d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-user-vars-load-all
1648d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(foreach _nuvla_var,$(NANO_VAR_LIST),$(call nano-user-var-load,$(_nuvla_var),$(1)))
1658d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1668d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1678d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine nano-user-vars-save-all
1688d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(foreach _nuvsa_var,$(NANO_VAR_LIST),\
1698d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval LOCAL_NANO_$(_nuvsa_var) := $(LOCAL_$(_nuvsa_var))) \
1708d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval LOCAL_$(_nuvsa_var):=) \
1718d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(foreach v,$(NANO_ALL_ALL),\
1728d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(eval LOCAL_NANO_$(_nuvsa_var)_$(v):=$(LOCAL_$(_nuvsa_var)_$(v))) \
1738d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(eval LOCAL_$(_nuvsa_var)_$(v):=) \
1748d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    ) \
1758d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov)
1768d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1778d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1788d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - variant list
1798d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - optional: one of APP,BL,OS
1808d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(3) - path to makefile which has to be included for each variant
1818d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine for-each-variant-unchecked
1828d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval AUX_RECURSIVE_VARIANT_LIST:=$(1)) \
1838d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(call nano-user-vars-save-all) \
1848d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(foreach _fev_variant,$(1),\
1858d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(call aux-variant-load-env,$(_fev_variant)) \
1868d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(call nano-user-vars-load-all,$(2)) \
1878d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(info $(LOCAL_PATH): $(LOCAL_MODULE): OS=$(AUX_OS) ARCH=$(AUX_ARCH) SUBARCH=$(AUX_SUBARCH) CPU=$(AUX_CPU)) \
1888d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(eval include $(3)) \
1898d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(call nano-reset-built-env,) \
1908d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    ) \
1918d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(eval AUX_RECURSIVE_VARIANT_LIST:=) \
1928d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(call aux-variant-load-env,) \
1938d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(call nano-reset-built-env,$(LOCAL_MODULE)-module-is-poisoned) \
1948d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(call nano-user-vars-reset-final) \
1958d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1968d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
1978d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
1988d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1),$(2) - two sets to compare for equality
1998d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# returns true, if sets have the same items (not necessarily in the same order)
2008d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# returns empty string on mismatch
2018d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine equal-sets
2028d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(if $(strip $(filterout $(1),$(2))$(filterout $(2),$(1))),,true)
2038d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
2048d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov
2058d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# this call would include a given makefile in the loop,
2068d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# and would iterate through available variants from $(1)
2078d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(1) - variant list
2088d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(2) - optional: one of APP,BL,OS
2098d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov# $(3) - path to makefile to include for each variant
2108d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovdefine for-each-variant
2118d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov$(if $(AUX_RECURSIVE_VARIANT_LIST),$(if \
2128d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(call equal-sets,$(AUX_RECURSIVE_VARIANT_LIST),$(1)),,\
2138d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov        $(error $(LOCAL_PATH): Recursive variant list mismatch: "$(AUX_RECURSIVE_VARIANT_LIST)" and "$(1))),\
2148d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudov    $(call for-each-variant-unchecked,$(1),$(2),$(3)))
2158d12dbd535b38fdf0743683c7984a687866dc119Alexey Polyudovendef
216