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