github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/make/core/aux_config.mk (about)

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