Remove AUX support am: 58634e1482
am: c4fb07d615
Change-Id: Ic54cef973b4573886a562690fe0d3c8b35816f4a
This commit is contained in:
commit
f08587c925
|
@ -14,19 +14,19 @@ have any problems converting, please contact us via:
|
|||
|
||||
| Module type | State |
|
||||
| -------------------------------- | --------- |
|
||||
| `BUILD_AUX_EXECUTABLE` | Error |
|
||||
| `BUILD_AUX_STATIC_LIBRARY` | Error |
|
||||
| `BUILD_AUX_EXECUTABLE` | Obsolete |
|
||||
| `BUILD_AUX_STATIC_LIBRARY` | Obsolete |
|
||||
| `BUILD_COPY_HEADERS` | Error |
|
||||
| `BUILD_HOST_EXECUTABLE` | Error |
|
||||
| `BUILD_HOST_FUZZ_TEST` | Error |
|
||||
| `BUILD_HOST_NATIVE_TEST` | Error |
|
||||
| `BUILD_HOST_SHARED_LIBRARY` | Error |
|
||||
| `BUILD_HOST_SHARED_TEST_LIBRARY` | Error |
|
||||
| `BUILD_HOST_SHARED_TEST_LIBRARY` | Obsolete |
|
||||
| `BUILD_HOST_STATIC_LIBRARY` | Error |
|
||||
| `BUILD_HOST_STATIC_TEST_LIBRARY` | Error |
|
||||
| `BUILD_HOST_TEST_CONFIG` | Error |
|
||||
| `BUILD_NATIVE_BENCHMARK` | Error |
|
||||
| `BUILD_SHARED_TEST_LIBRARY` | Error |
|
||||
| `BUILD_SHARED_TEST_LIBRARY` | Obsolete |
|
||||
| `BUILD_STATIC_TEST_LIBRARY` | Error |
|
||||
| `BUILD_TARGET_TEST_CONFIG` | Error |
|
||||
| `BUILD_*` | Available |
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
variant_list := $(filter AUX-%,$(MAKECMDGOALS))
|
||||
|
||||
ifdef variant_list
|
||||
AUX_OS_VARIANT_LIST := $(patsubst AUX-%,%,$(variant_list))
|
||||
else
|
||||
AUX_OS_VARIANT_LIST := $(TARGET_AUX_OS_VARIANT_LIST)
|
||||
endif
|
||||
|
||||
# exclude AUX targets from build
|
||||
ifeq ($(AUX_OS_VARIANT_LIST),none)
|
||||
AUX_OS_VARIANT_LIST :=
|
||||
endif
|
||||
|
||||
# temporary workaround to support external toolchain
|
||||
ifeq ($(NANOHUB_TOOLCHAIN),)
|
||||
AUX_OS_VARIANT_LIST :=
|
||||
endif
|
||||
|
||||
# setup toolchain paths for various CPU architectures
|
||||
# this one will come from android prebuilts eventually
|
||||
AUX_TOOLCHAIN_cortexm4 := $(NANOHUB_TOOLCHAIN)
|
||||
ifeq ($(wildcard $(AUX_TOOLCHAIN_cortexm4)gcc),)
|
||||
AUX_TOOLCHAIN_cortexm4:=
|
||||
endif
|
||||
|
||||
# there is no MAKE var that defines path to HOST toolchain
|
||||
# all the interesting paths are hardcoded in soong, and are not available from here
|
||||
# There is no other way but to hardcode them again, as we may need host x86 toolcain for AUX
|
||||
ifeq ($(HOST_OS),linux)
|
||||
AUX_TOOLCHAIN_x86 := prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/bin/x86_64-linux-
|
||||
endif
|
||||
|
||||
# setup AUX globals
|
||||
AUX_SHLIB_SUFFIX := .so
|
||||
AUX_GLOBAL_ARFLAGS := crsPD
|
||||
AUX_STATIC_LIB_SUFFIX := .a
|
||||
|
||||
# Load ever-lasting "indexed" version of AUX variant environment; it is treated as READ-ONLY from this
|
||||
# moment on.
|
||||
#
|
||||
# $(1) - variant
|
||||
# no return value
|
||||
define aux-variant-setup-paths
|
||||
$(eval AUX_OUT_ROOT_$(1) := $(PRODUCT_OUT)/aux/$(1)) \
|
||||
$(eval AUX_COMMON_OUT_ROOT_$(1) := $(AUX_OUT_ROOT_$(1))/common) \
|
||||
$(eval AUX_OUT_$(1) := $(AUX_OUT_ROOT_$(1))/$(AUX_OS_$(1))-$(AUX_ARCH_$(1))-$(AUX_CPU_$(1))) \
|
||||
$(eval AUX_OUT_INTERMEDIATES_$(1) := $(AUX_OUT_$(1))/obj) \
|
||||
$(eval AUX_OUT_COMMON_INTERMEDIATES_$(1) := $(AUX_COMMON_OUT_ROOT_$(1))/obj) \
|
||||
$(eval AUX_OUT_HEADERS_$(1) := $(AUX_OUT_INTERMEDIATES_$(1))/include) \
|
||||
$(eval AUX_OUT_NOTICE_FILES_$(1) := $(AUX_OUT_INTERMEDIATES_$(1))/NOTICE_FILES) \
|
||||
$(eval AUX_OUT_FAKE_$(1) := $(AUX_OUT_$(1))/fake_packages) \
|
||||
$(eval AUX_OUT_GEN_$(1) := $(AUX_OUT_$(1))/gen) \
|
||||
$(eval AUX_OUT_COMMON_GEN_$(1) := $(AUX_COMMON_OUT_ROOT_$(1))/gen) \
|
||||
$(eval AUX_OUT_EXECUTABLES_$(1) := $(AUX_OUT_$(1))/bin) \
|
||||
$(eval AUX_OUT_UNSTRIPPED_$(1) := $(AUX_OUT_$(1))/symbols)
|
||||
endef
|
||||
|
||||
# Copy "indexed" AUX environment for given VARIANT into
|
||||
# volatile not-indexed set of variables for simplicity of access.
|
||||
# Injection of index support throughout the build system is suboptimal
|
||||
# hence volatile environment is constructed
|
||||
# Unlike HOST*, TARGET* variables, AUX* variables are NOT read-only, but their
|
||||
# indexed versions are.
|
||||
#
|
||||
# $(1) - variant
|
||||
# no return value
|
||||
define aux-variant-load-env
|
||||
$(eval AUX_OS_VARIANT:=$(1)) \
|
||||
$(eval AUX_OS:=$(AUX_OS_$(1))) \
|
||||
$(eval AUX_ARCH:=$(AUX_ARCH_$(1))) \
|
||||
$(eval AUX_SUBARCH:=$(AUX_SUBARCH_$(1))) \
|
||||
$(eval AUX_CPU:=$(AUX_CPU_$(1))) \
|
||||
$(eval AUX_OS_PATH:=$(AUX_OS_PATH_$(1))) \
|
||||
$(eval AUX_OUT_ROOT := $(AUX_OUT_ROOT_$(1))) \
|
||||
$(eval AUX_COMMON_OUT_ROOT := $(AUX_COMMON_OUT_ROOT_$(1))) \
|
||||
$(eval AUX_OUT := $(AUX_OUT_$(1))) \
|
||||
$(eval AUX_OUT_INTERMEDIATES := $(AUX_OUT_INTERMEDIATES_$(1))) \
|
||||
$(eval AUX_OUT_COMMON_INTERMEDIATES := $(AUX_OUT_COMMON_INTERMEDIATES_$(1))) \
|
||||
$(eval AUX_OUT_HEADERS := $(AUX_OUT_HEADERS_$(1))) \
|
||||
$(eval AUX_OUT_NOTICE_FILES := $(AUX_OUT_NOTICE_FILES_$(1))) \
|
||||
$(eval AUX_OUT_FAKE := $(AUX_OUT_FAKE_$(1))) \
|
||||
$(eval AUX_OUT_GEN := $(AUX_OUT_GEN_$(1))) \
|
||||
$(eval AUX_OUT_COMMON_GEN := $(AUX_OUT_COMMON_GEN_$(1))) \
|
||||
$(eval AUX_OUT_EXECUTABLES := $(AUX_OUT_EXECUTABLES_$(1))) \
|
||||
$(eval AUX_OUT_UNSTRIPPED := $(AUX_OUT_UNSTRIPPED_$(1)))
|
||||
endef
|
||||
|
||||
# given a variant:path pair, load the variant conviguration with aux-variant-setup-paths from file
|
||||
# this is a build system extension mechainsm, since configuration typically resides in non-build
|
||||
# project space
|
||||
#
|
||||
# $(1) - variant:path pair
|
||||
# $(2) - file suffix
|
||||
# no return value
|
||||
define aux-variant-import-from-pair
|
||||
$(eval _pair := $(subst :, ,$(1))) \
|
||||
$(eval _name:=$(word 1,$(_pair))) \
|
||||
$(eval _path:=$(word 2,$(_pair))) \
|
||||
$(eval include $(_path)/$(_name)$(2)) \
|
||||
$(eval AUX_OS_VARIANT_LIST_$(AUX_OS_$(1)):=) \
|
||||
$(call aux-variant-setup-paths,$(_name)) \
|
||||
$(eval AUX_ALL_VARIANTS += $(_name)) \
|
||||
$(eval AUX_ALL_OSES := $(filter-out $(AUX_OS_$(_name)),$(AUX_ALL_OSES)) $(AUX_OS_$(_name))) \
|
||||
$(eval AUX_ALL_CPUS := $(filter-out $(AUX_CPU_$(_name)),$(AUX_ALL_CPUS)) $(AUX_CPU_$(_name))) \
|
||||
$(eval AUX_ALL_ARCHS := $(filter-out $(AUX_ARCH_$(_name)),$(AUX_ALL_ARCHS)) $(AUX_ARCH_$(_name))) \
|
||||
$(eval AUX_ALL_SUBARCHS := $(filter-out $(AUX_SUBARCH_$(_name)),$(AUX_ALL_SUBARCHS)) $(AUX_SUBARCH_$(_name)))
|
||||
endef
|
||||
|
||||
# Load system configuration referenced by AUX variant config;
|
||||
# this is a build extension mechanism; typically system config
|
||||
# resides in a non-build projects;
|
||||
# system config may define new rules and globally visible BUILD*
|
||||
# includes to support project-specific build steps and toolchains
|
||||
# MAintains list of valiants that reference this os config in OS "indexed" var
|
||||
# this facilitates multivariant build of the OS (or whataver it is the name of common component these variants share)
|
||||
#
|
||||
# $(1) - variant
|
||||
# no return value
|
||||
define aux-import-os-config
|
||||
$(eval _aioc_os := $(AUX_OS_$(1))) \
|
||||
$(eval AUX_OS_PATH_$(1) := $(patsubst $(_aioc_os):%,%,$(filter $(_aioc_os):%,$(AUX_ALL_OS_PATHS)))) \
|
||||
$(eval _aioc_os_cfg := $(AUX_OS_PATH_$(1))/$(_aioc_os)$(os_sfx)) \
|
||||
$(if $(wildcard $(_aioc_os_cfg)),,$(error AUX '$(_aioc_os)' OS config file [$(notdir $(_aioc_os_cfg))] required by AUX variant '$(1)' does not exist)) \
|
||||
$(if $(filter $(_aioc_os),$(_os_list)),,$(eval include $(_aioc_os_cfg))) \
|
||||
$(eval AUX_OS_VARIANT_LIST_$(_aioc_os) += $(1)) \
|
||||
$(eval _os_list += $(_aioc_os))
|
||||
endef
|
||||
|
||||
# make sure that AUX config variables are minimally sane;
|
||||
# as a bare minimum they must contain the vars described by aux_env
|
||||
# Generate error if requirement is not met.
|
||||
#
|
||||
#$(1) - variant
|
||||
# no return value
|
||||
define aux-variant-validate
|
||||
$(eval _all:=) \
|
||||
$(eval _req:=$(addsuffix _$(1),$(aux_env))) \
|
||||
$(foreach var,$(_req),$(eval _all += $(var))) \
|
||||
$(eval _missing := $(filter-out $(_all),$(_req))) \
|
||||
$(if $(_missing),$(error AUX variant $(1) must define vars: $(_missing)))
|
||||
endef
|
||||
|
||||
AUX_ALL_VARIANTS :=
|
||||
AUX_ALL_OSES :=
|
||||
AUX_ALL_CPUS :=
|
||||
AUX_ALL_ARCHS :=
|
||||
AUX_ALL_SUBARCHS :=
|
||||
|
||||
variant_sfx :=_aux_variant_config.mk
|
||||
os_sfx :=_aux_os_config.mk
|
||||
|
||||
ifdef AUX_OS_VARIANT_LIST
|
||||
|
||||
config_roots := $(wildcard device vendor)
|
||||
all_configs :=
|
||||
ifdef config_roots
|
||||
all_configs := $(sort $(shell find $(config_roots) -maxdepth 4 -name '*$(variant_sfx)' -o -name '*$(os_sfx)'))
|
||||
endif
|
||||
all_os_configs := $(filter %$(os_sfx),$(all_configs))
|
||||
all_variant_configs := $(filter %$(variant_sfx),$(all_configs))
|
||||
|
||||
AUX_ALL_OS_PATHS := $(foreach f,$(all_os_configs),$(patsubst %$(os_sfx),%,$(notdir $(f))):$(patsubst %/,%,$(dir $(f))))
|
||||
AUX_ALL_OS_VARIANT_PATHS := $(foreach f,$(all_variant_configs),$(patsubst %$(variant_sfx),%,$(notdir $(f))):$(patsubst %/,%,$(dir $(f))))
|
||||
|
||||
my_variant_pairs := $(foreach v,$(AUX_OS_VARIANT_LIST),$(filter $(v):%,$(AUX_ALL_OS_VARIANT_PATHS)))
|
||||
my_missing_variants := $(foreach v,$(AUX_OS_VARIANT_LIST),$(if $(filter $(v):%,$(AUX_ALL_OS_VARIANT_PATHS)),,$(v)))
|
||||
|
||||
ifneq ($(strip $(my_missing_variants)),)
|
||||
$(error Don't know how to build variant(s): $(my_missing_variants))
|
||||
endif
|
||||
|
||||
# mandatory variables
|
||||
aux_env := AUX_OS AUX_ARCH AUX_SUBARCH AUX_CPU
|
||||
|
||||
$(foreach v,$(my_variant_pairs),$(if $(filter $(v),$(AUX_ALL_VARIANTS)),,$(call aux-variant-import-from-pair,$(v),$(variant_sfx))))
|
||||
|
||||
ifdef AUX_ALL_VARIANTS
|
||||
_os_list :=
|
||||
$(foreach v,$(AUX_ALL_VARIANTS),\
|
||||
$(call aux-import-os-config,$(v)) \
|
||||
$(call aux-variant-validate,$(v)) \
|
||||
)
|
||||
endif
|
||||
|
||||
endif # AUX_OS_VARIANT_LIST
|
||||
|
||||
INSTALLED_AUX_TARGETS :=
|
|
@ -1,95 +0,0 @@
|
|||
# caller might have included aux_toolchain, e.g. if custom build steps are defined
|
||||
ifeq ($(LOCAL_IS_AUX_MODULE),)
|
||||
include $(BUILD_SYSTEM)/aux_toolchain.mk
|
||||
endif
|
||||
|
||||
ifeq ($(AUX_BUILD_NOT_COMPATIBLE),)
|
||||
|
||||
###########################################################
|
||||
## Standard rules for building an executable file.
|
||||
##
|
||||
## Additional inputs from base_rules.make:
|
||||
## None.
|
||||
###########################################################
|
||||
|
||||
ifeq ($(strip $(LOCAL_MODULE_CLASS)),)
|
||||
LOCAL_MODULE_CLASS := EXECUTABLES
|
||||
endif
|
||||
|
||||
$(call $(aux-executable-hook))
|
||||
|
||||
###########################################################
|
||||
## Standard rules for building any target-side binaries
|
||||
## with dynamic linkage (dynamic libraries or executables
|
||||
## that link with dynamic libraries)
|
||||
##
|
||||
## Files including this file must define a rule to build
|
||||
## the target $(linked_module).
|
||||
###########################################################
|
||||
|
||||
# The name of the target file, without any path prepended.
|
||||
# This duplicates logic from base_rules.mk because we need to
|
||||
# know its results before base_rules.mk is included.
|
||||
include $(BUILD_SYSTEM)/configure_module_stem.mk
|
||||
|
||||
intermediates := $(call local-intermediates-dir)
|
||||
|
||||
# Define the target that is the unmodified output of the linker.
|
||||
# The basename of this target must be the same as the final output
|
||||
# binary name, because it's used to set the "soname" in the binary.
|
||||
# The includer of this file will define a rule to build this target.
|
||||
linked_module := $(intermediates)/LINKED/$(my_built_module_stem)
|
||||
|
||||
ALL_ORIGINAL_DYNAMIC_BINARIES += $(linked_module)
|
||||
|
||||
# Because AUX_SYMBOL_FILTER_FILE depends on ALL_ORIGINAL_DYNAMIC_BINARIES,
|
||||
# the linked_module rules won't necessarily inherit the PRIVATE_
|
||||
# variables from LOCAL_BUILT_MODULE. This tells binary.make to explicitly
|
||||
# define the PRIVATE_ variables for linked_module as well as for
|
||||
# LOCAL_BUILT_MODULE.
|
||||
LOCAL_INTERMEDIATE_TARGETS += $(linked_module)
|
||||
|
||||
###################################
|
||||
include $(BUILD_SYSTEM)/binary.mk
|
||||
###################################
|
||||
|
||||
aux_output := $(linked_module)
|
||||
|
||||
ifneq ($(LOCAL_CUSTOM_BUILD_STEP_INPUT),)
|
||||
ifneq ($(LOCAL_CUSTOM_BUILD_STEP_OUTPUT),)
|
||||
|
||||
# injecting custom build steps
|
||||
$(LOCAL_CUSTOM_BUILD_STEP_INPUT): $(aux_output)
|
||||
@echo "$(AUX_DISPLAY) custom copy: $(PRIVATE_MODULE) ($@)"
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(copy-file-to-target)
|
||||
|
||||
aux_output := $(LOCAL_CUSTOM_BUILD_STEP_OUTPUT)
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
$(LOCAL_BUILT_MODULE): $(aux_output)
|
||||
@echo "$(AUX_DISPLAY) final copy: $(PRIVATE_MODULE) ($@)"
|
||||
@mkdir -p $(dir $@)
|
||||
$(hide) $(copy-file-to-target)
|
||||
|
||||
INSTALLED_AUX_TARGETS += $(LOCAL_INSTALLED_MODULE)
|
||||
|
||||
$(cleantarget): PRIVATE_CLEAN_FILES += \
|
||||
$(linked_module) \
|
||||
|
||||
# Define PRIVATE_ variables from global vars
|
||||
$(linked_module): PRIVATE_POST_LINK_CMD := $(LOCAL_POST_LINK_CMD)
|
||||
|
||||
ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
|
||||
$(linked_module): $(all_objects) $(all_libraries) $(LOCAL_ADDITIONAL_DEPENDENCIES)
|
||||
$(transform-o-to-aux-static-executable)
|
||||
$(PRIVATE_POST_LINK_CMD)
|
||||
else
|
||||
$(linked_module): $(all_objects) $(all_libraries) $(LOCAL_ADDITIONAL_DEPENDENCIES)
|
||||
$(transform-o-to-aux-executable)
|
||||
$(PRIVATE_POST_LINK_CMD)
|
||||
endif
|
||||
|
||||
endif # AUX_BUILD_NOT_COMPATIBLE
|
|
@ -1,27 +0,0 @@
|
|||
ifeq ($(LOCAL_IS_AUX_MODULE),)
|
||||
include $(BUILD_SYSTEM)/aux_toolchain.mk
|
||||
endif
|
||||
|
||||
ifeq ($(AUX_BUILD_NOT_COMPATIBLE),)
|
||||
|
||||
ifeq ($(strip $(LOCAL_MODULE_CLASS)),)
|
||||
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
|
||||
endif
|
||||
ifeq ($(strip $(LOCAL_MODULE_SUFFIX)),)
|
||||
LOCAL_MODULE_SUFFIX := .a
|
||||
endif
|
||||
|
||||
LOCAL_UNINSTALLABLE_MODULE := true
|
||||
|
||||
ifneq ($(strip $(LOCAL_MODULE_STEM)$(LOCAL_BUILT_MODULE_STEM)),)
|
||||
$(error $(LOCAL_PATH): Cannot set module stem for a library)
|
||||
endif
|
||||
|
||||
include $(BUILD_SYSTEM)/binary.mk
|
||||
|
||||
$(LOCAL_BUILT_MODULE) : PRIVATE_AR := $(AUX_AR)
|
||||
$(LOCAL_BUILT_MODULE) : $(built_whole_libraries)
|
||||
$(LOCAL_BUILT_MODULE) : $(all_objects)
|
||||
$(transform-o-to-aux-static-lib)
|
||||
|
||||
endif # AUX_BUILD_NOT_COMPATIBLE
|
|
@ -1,52 +0,0 @@
|
|||
###########################################################
|
||||
# takes form LOCAL_AUX_TOOLCHAIN_$(LOCAL_AUX_CPU)
|
||||
###########################################################
|
||||
|
||||
###############################
|
||||
# setup AUX environment
|
||||
###############################
|
||||
|
||||
# shortcuts for targets with a single instance of OS, ARCH, VARIANT, CPU
|
||||
AUX_TOOLCHAIN := $(if $(LOCAL_AUX_TOOLCHAIN),$(LOCAL_AUX_TOOLCHAIN),$(AUX_TOOLCHAIN_$(AUX_CPU)))
|
||||
AUX_BUILD_NOT_COMPATIBLE:=
|
||||
ifeq ($(strip $(AUX_TOOLCHAIN)),)
|
||||
ifeq ($(strip $(AUX_CPU)),)
|
||||
$(warning $(LOCAL_PATH): $(LOCAL_MODULE): Undefined CPU for AUX toolchain)
|
||||
AUX_BUILD_NOT_COMPATIBLE += TOOLCHAIN
|
||||
else
|
||||
$(warning $(LOCAL_PATH): $(LOCAL_MODULE): Undefined AUX toolchain for CPU=$(AUX_CPU))
|
||||
AUX_BUILD_NOT_COMPATIBLE += TOOLCHAIN
|
||||
endif
|
||||
endif
|
||||
|
||||
AUX_BUILD_NOT_COMPATIBLE += $(foreach var,OS ARCH SUBARCH CPU OS_VARIANT,$(if $(LOCAL_AUX_$(var)),$(if \
|
||||
$(filter $(LOCAL_AUX_$(var)),$(AUX_$(var))),,$(var))))
|
||||
|
||||
AUX_BUILD_NOT_COMPATIBLE := $(strip $(AUX_BUILD_NOT_COMPATIBLE))
|
||||
|
||||
ifneq ($(AUX_BUILD_NOT_COMPATIBLE),)
|
||||
$(info $(LOCAL_PATH): $(LOCAL_MODULE): not compatible: "$(AUX_BUILD_NOT_COMPATIBLE)" with)
|
||||
$(info ====> OS=$(AUX_OS) CPU=$(AUX_CPU) ARCH=$(AUX_ARCH) SUBARCH=$(AUX_SUBARCH) OS_VARIANT=$(AUX_OS_VARIANT))
|
||||
$(info ====> TOOLCHAIN=$(AUX_TOOLCHAIN))
|
||||
endif
|
||||
|
||||
AUX_AR := $(AUX_TOOLCHAIN)ar
|
||||
AUX_AS := $(AUX_TOOLCHAIN)gcc
|
||||
AUX_CC := $(AUX_TOOLCHAIN)gcc
|
||||
AUX_CXX := $(AUX_TOOLCHAIN)g++
|
||||
AUX_LINKER := $(AUX_TOOLCHAIN)ld
|
||||
AUX_OBJCOPY := $(AUX_TOOLCHAIN)objcopy
|
||||
AUX_OBJDUMP := $(AUX_TOOLCHAIN)objdump
|
||||
|
||||
###############################
|
||||
# setup Android environment
|
||||
###############################
|
||||
|
||||
LOCAL_IS_AUX_MODULE := true
|
||||
LOCAL_2ND_ARCH_VAR_PREFIX :=
|
||||
LOCAL_CC := $(AUX_CC)
|
||||
LOCAL_CXX := $(AUX_CXX)
|
||||
LOCAL_NO_DEFAULT_COMPILER_FLAGS := true
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES :=
|
||||
LOCAL_CXX_STL := none
|
||||
LOCAL_NO_PIC := true
|
|
@ -34,7 +34,6 @@ endif
|
|||
$(call verify-module-name)
|
||||
|
||||
LOCAL_IS_HOST_MODULE := $(strip $(LOCAL_IS_HOST_MODULE))
|
||||
LOCAL_IS_AUX_MODULE := $(strip $(LOCAL_IS_AUX_MODULE))
|
||||
ifdef LOCAL_IS_HOST_MODULE
|
||||
ifneq ($(LOCAL_IS_HOST_MODULE),true)
|
||||
$(error $(LOCAL_PATH): LOCAL_IS_HOST_MODULE must be "true" or empty, not "$(LOCAL_IS_HOST_MODULE)")
|
||||
|
@ -47,16 +46,8 @@ ifdef LOCAL_IS_HOST_MODULE
|
|||
my_host := host-
|
||||
my_kind := HOST
|
||||
else
|
||||
ifdef LOCAL_IS_AUX_MODULE
|
||||
ifneq ($(LOCAL_IS_AUX_MODULE),true)
|
||||
$(error $(LOCAL_PATH): LOCAL_IS_AUX_MODULE must be "true" or empty, not "$(LOCAL_IS_AUX_MODULE)")
|
||||
endif
|
||||
my_prefix := AUX_
|
||||
my_kind := AUX
|
||||
else
|
||||
my_prefix := TARGET_
|
||||
my_kind :=
|
||||
endif
|
||||
my_prefix := TARGET_
|
||||
my_kind :=
|
||||
my_host :=
|
||||
endif
|
||||
|
||||
|
@ -316,12 +307,9 @@ else
|
|||
my_all_targets := device_$(my_register_name)_all_targets
|
||||
endif
|
||||
|
||||
# variant is enough to make nano class unique; it serves as a key to lookup (OS,ARCH) tuple
|
||||
aux_class := $($(my_prefix)OS_VARIANT)
|
||||
# Make sure that this IS_HOST/CLASS/MODULE combination is unique.
|
||||
module_id := MODULE.$(if \
|
||||
$(LOCAL_IS_HOST_MODULE),$($(my_prefix)OS),$(if \
|
||||
$(LOCAL_IS_AUX_MODULE),$(aux_class),TARGET)).$(LOCAL_MODULE_CLASS).$(my_register_name)
|
||||
$(LOCAL_IS_HOST_MODULE),$($(my_prefix)OS),TARGET).$(LOCAL_MODULE_CLASS).$(my_register_name)
|
||||
ifdef $(module_id)
|
||||
$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id)))
|
||||
endif
|
||||
|
@ -428,7 +416,6 @@ $(cleantarget)::
|
|||
###########################################################
|
||||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_PATH:=$(LOCAL_PATH)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_HOST_MODULE := $(LOCAL_IS_HOST_MODULE)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_IS_AUX_MODULE := $(LOCAL_IS_AUX_MODULE)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_HOST:= $(my_host)
|
||||
$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_PREFIX := $(my_prefix)
|
||||
|
||||
|
|
|
@ -474,17 +474,6 @@ LOCAL_ROBOTEST_FILES :=
|
|||
LOCAL_ROBOTEST_TIMEOUT :=
|
||||
LOCAL_TEST_PACKAGE :=
|
||||
|
||||
# Aux specific variables
|
||||
LOCAL_AUX_ARCH :=
|
||||
LOCAL_AUX_CPU :=
|
||||
LOCAL_AUX_OS :=
|
||||
LOCAL_AUX_OS_VARIANT :=
|
||||
LOCAL_AUX_SUBARCH :=
|
||||
LOCAL_AUX_TOOLCHAIN :=
|
||||
LOCAL_CUSTOM_BUILD_STEP_INPUT:=
|
||||
LOCAL_CUSTOM_BUILD_STEP_OUTPUT:=
|
||||
LOCAL_IS_AUX_MODULE :=
|
||||
|
||||
full_android_manifest :=
|
||||
non_system_module :=
|
||||
|
||||
|
|
|
@ -122,6 +122,18 @@ $(KATI_obsolete_var PRODUCT_IOT)
|
|||
$(KATI_obsolete_var MD5SUM)
|
||||
$(KATI_obsolete_var BOARD_HAL_STATIC_LIBRARIES, See $(CHANGES_URL)#BOARD_HAL_STATIC_LIBRARIES)
|
||||
$(KATI_obsolete_var LOCAL_HAL_STATIC_LIBRARIES, See $(CHANGES_URL)#BOARD_HAL_STATIC_LIBRARIES)
|
||||
$(KATI_obsolete_var \
|
||||
TARGET_AUX_OS_VARIANT_LIST \
|
||||
LOCAL_AUX_ARCH \
|
||||
LOCAL_AUX_CPU \
|
||||
LOCAL_AUX_OS \
|
||||
LOCAL_AUX_OS_VARIANT \
|
||||
LOCAL_AUX_SUBARCH \
|
||||
LOCAL_AUX_TOOLCHAIN \
|
||||
LOCAL_CUSTOM_BUILD_STEP_INPUT \
|
||||
LOCAL_CUSTOM_BUILD_STEP_OUTPUT \
|
||||
LOCAL_IS_AUX_MODULE \
|
||||
,AUX support has been removed)
|
||||
|
||||
# Used to force goals to build. Only use for conditionally defined goals.
|
||||
.PHONY: FORCE
|
||||
|
@ -170,8 +182,6 @@ BUILD_HOST_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/host_static_library.mk
|
|||
BUILD_HOST_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/host_shared_library.mk
|
||||
BUILD_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/static_library.mk
|
||||
BUILD_HEADER_LIBRARY :=$= $(BUILD_SYSTEM)/header_library.mk
|
||||
BUILD_AUX_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/aux_static_library.mk
|
||||
BUILD_AUX_EXECUTABLE :=$= $(BUILD_SYSTEM)/aux_executable.mk
|
||||
BUILD_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/shared_library.mk
|
||||
BUILD_EXECUTABLE :=$= $(BUILD_SYSTEM)/executable.mk
|
||||
BUILD_HOST_EXECUTABLE :=$= $(BUILD_SYSTEM)/host_executable.mk
|
||||
|
|
|
@ -372,8 +372,8 @@ ifneq ($(filter hwaddress,$(my_sanitize)),)
|
|||
my_cflags += $(HWADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
|
||||
endif
|
||||
|
||||
# Use minimal diagnostics when integer overflow is enabled; never do it for HOST or AUX modules
|
||||
ifeq ($(LOCAL_IS_HOST_MODULE)$(LOCAL_IS_AUX_MODULE),)
|
||||
# Use minimal diagnostics when integer overflow is enabled; never do it for HOST modules
|
||||
ifeq ($(LOCAL_IS_HOST_MODULE),)
|
||||
# Pre-emptively add UBSAN minimal runtime incase a static library dependency requires it
|
||||
ifeq ($(filter STATIC_LIBRARIES,$(LOCAL_MODULE_CLASS)),)
|
||||
ifndef LOCAL_SDK_VERSION
|
||||
|
|
|
@ -95,7 +95,6 @@ ANDROID_RESOURCE_GENERATED_CLASSES := 'R.class' 'R$$*.class' 'Manifest.class' 'M
|
|||
|
||||
# Display names for various build targets
|
||||
TARGET_DISPLAY := target
|
||||
AUX_DISPLAY := aux
|
||||
HOST_DISPLAY := host
|
||||
HOST_CROSS_DISPLAY := host cross
|
||||
|
||||
|
@ -510,23 +509,18 @@ define reverse-list
|
|||
$(if $(1),$(call reverse-list,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1))
|
||||
endef
|
||||
|
||||
define def-host-aux-target
|
||||
$(eval _idf_val_:=$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST,$(if $(strip $(LOCAL_IS_AUX_MODULE)),AUX,))) \
|
||||
$(_idf_val_)
|
||||
endef
|
||||
|
||||
###########################################################
|
||||
## Returns correct _idfPrefix from the list:
|
||||
## { HOST, HOST_CROSS, AUX, TARGET }
|
||||
## { HOST, HOST_CROSS, TARGET }
|
||||
###########################################################
|
||||
# the following rules checked in order:
|
||||
# ($1 is in {AUX, HOST_CROSS} => $1;
|
||||
# ($1 is in {HOST_CROSS} => $1;
|
||||
# ($1 is empty) => TARGET;
|
||||
# ($2 is not empty) => HOST_CROSS;
|
||||
# => HOST;
|
||||
define find-idf-prefix
|
||||
$(strip \
|
||||
$(eval _idf_pfx_:=$(strip $(filter AUX HOST_CROSS,$(1)))) \
|
||||
$(eval _idf_pfx_:=$(strip $(filter HOST_CROSS,$(1)))) \
|
||||
$(eval _idf_pfx_:=$(if $(strip $(1)),$(if $(_idf_pfx_),$(_idf_pfx_),$(if $(strip $(2)),HOST_CROSS,HOST)),TARGET)) \
|
||||
$(_idf_pfx_)
|
||||
)
|
||||
|
@ -542,7 +536,7 @@ endef
|
|||
|
||||
# $(1): target class, like "APPS"
|
||||
# $(2): target name, like "NotePad"
|
||||
# $(3): { HOST, HOST_CROSS, AUX, <empty (TARGET)>, <other non-empty (HOST)> }
|
||||
# $(3): { HOST, HOST_CROSS, <empty (TARGET)>, <other non-empty (HOST)> }
|
||||
# $(4): if non-empty, force the intermediates to be COMMON
|
||||
# $(5): if non-empty, force the intermediates to be for the 2nd arch
|
||||
# $(6): if non-empty, force the intermediates to be for the host cross os
|
||||
|
@ -579,7 +573,7 @@ $(strip \
|
|||
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-intermediates-dir)) \
|
||||
$(if $(strip $(LOCAL_MODULE)),, \
|
||||
$(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-intermediates-dir)) \
|
||||
$(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(call def-host-aux-target),$(1),$(2),$(3)) \
|
||||
$(call intermediates-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST),$(1),$(2),$(3)) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
@ -594,7 +588,7 @@ endef
|
|||
|
||||
# $(1): target class, like "APPS"
|
||||
# $(2): target name, like "NotePad"
|
||||
# $(3): { HOST, HOST_CROSS, AUX, <empty (TARGET)>, <other non-empty (HOST)> }
|
||||
# $(3): { HOST, HOST_CROSS, <empty (TARGET)>, <other non-empty (HOST)> }
|
||||
# $(4): if non-empty, force the generated sources to be COMMON
|
||||
define generated-sources-dir-for
|
||||
$(strip \
|
||||
|
@ -624,7 +618,7 @@ $(strip \
|
|||
$(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \
|
||||
$(if $(strip $(LOCAL_MODULE)),, \
|
||||
$(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \
|
||||
$(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(call def-host-aux-target),$(1)) \
|
||||
$(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(if $(strip $(LOCAL_IS_HOST_MODULE)),HOST),$(1)) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
@ -1499,89 +1493,6 @@ $(call split-long-arguments,$($(PRIVATE_2ND_ARCH_VAR_PREFIX)TARGET_AR) \
|
|||
$(hide) mv -f $@.tmp $@
|
||||
endef
|
||||
|
||||
# $(1): the full path of the source static library.
|
||||
# $(2): the full path of the destination static library.
|
||||
define _extract-and-include-single-aux-whole-static-lib
|
||||
$(hide) ldir=$(PRIVATE_INTERMEDIATES_DIR)/WHOLE/$(basename $(notdir $(1)))_objs;\
|
||||
rm -rf $$ldir; \
|
||||
mkdir -p $$ldir; \
|
||||
cp $(1) $$ldir; \
|
||||
lib_to_include=$$ldir/$(notdir $(1)); \
|
||||
filelist=; \
|
||||
subdir=0; \
|
||||
for f in `$(PRIVATE_AR) t $(1)`; do \
|
||||
if [ -e $$ldir/$$f ]; then \
|
||||
mkdir $$ldir/$$subdir; \
|
||||
ext=$$subdir/; \
|
||||
subdir=$$((subdir+1)); \
|
||||
$(PRIVATE_AR) m $$lib_to_include $$f; \
|
||||
else \
|
||||
ext=; \
|
||||
fi; \
|
||||
$(PRIVATE_AR) p $$lib_to_include $$f > $$ldir/$$ext$$f; \
|
||||
filelist="$$filelist $$ldir/$$ext$$f"; \
|
||||
done ; \
|
||||
$(PRIVATE_AR) $(AUX_GLOBAL_ARFLAGS) $(2) $$filelist
|
||||
|
||||
endef
|
||||
|
||||
define extract-and-include-aux-whole-static-libs
|
||||
$(call extract-and-include-whole-static-libs-first, $(firstword $(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)),$(1))
|
||||
$(foreach lib,$(wordlist 2,999,$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES)), \
|
||||
$(call _extract-and-include-single-aux-whole-static-lib, $(lib), $(1)))
|
||||
endef
|
||||
|
||||
# Explicitly delete the archive first so that ar doesn't
|
||||
# try to add to an existing archive.
|
||||
define transform-o-to-aux-static-lib
|
||||
@echo "$($(PRIVATE_PREFIX)DISPLAY) StaticLib: $(PRIVATE_MODULE) ($@)"
|
||||
@mkdir -p $(dir $@)
|
||||
@rm -f $@ $@.tmp
|
||||
$(call extract-and-include-aux-whole-static-libs,$@.tmp)
|
||||
$(call split-long-arguments,$(PRIVATE_AR) \
|
||||
$(AUX_GLOBAL_ARFLAGS) $@.tmp,$(PRIVATE_ALL_OBJECTS))
|
||||
$(hide) mv -f $@.tmp $@
|
||||
endef
|
||||
|
||||
define transform-o-to-aux-executable-inner
|
||||
$(hide) $(PRIVATE_CXX_LINK) -pie \
|
||||
-Bdynamic \
|
||||
-Wl,--gc-sections \
|
||||
$(PRIVATE_ALL_OBJECTS) \
|
||||
-Wl,--whole-archive \
|
||||
$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \
|
||||
-Wl,--no-whole-archive \
|
||||
$(PRIVATE_ALL_STATIC_LIBRARIES) \
|
||||
$(PRIVATE_LDFLAGS) \
|
||||
-o $@
|
||||
endef
|
||||
|
||||
define transform-o-to-aux-executable
|
||||
@echo "$(AUX_DISPLAY) Executable: $(PRIVATE_MODULE) ($@)"
|
||||
@mkdir -p $(dir $@)
|
||||
$(transform-o-to-aux-executable-inner)
|
||||
endef
|
||||
|
||||
define transform-o-to-aux-static-executable-inner
|
||||
$(hide) $(PRIVATE_CXX_LINK) \
|
||||
-Bstatic \
|
||||
-Wl,--gc-sections \
|
||||
$(PRIVATE_ALL_OBJECTS) \
|
||||
-Wl,--whole-archive \
|
||||
$(PRIVATE_ALL_WHOLE_STATIC_LIBRARIES) \
|
||||
-Wl,--no-whole-archive \
|
||||
$(PRIVATE_ALL_STATIC_LIBRARIES) \
|
||||
$(PRIVATE_LDFLAGS) \
|
||||
-Wl,-Map=$(@).map \
|
||||
-o $@
|
||||
endef
|
||||
|
||||
define transform-o-to-aux-static-executable
|
||||
@echo "$(AUX_DISPLAY) StaticExecutable: $(PRIVATE_MODULE) ($@)"
|
||||
@mkdir -p $(dir $@)
|
||||
$(transform-o-to-aux-static-executable-inner)
|
||||
endef
|
||||
|
||||
###########################################################
|
||||
## Commands for running host ar
|
||||
###########################################################
|
||||
|
|
|
@ -29,8 +29,6 @@ DEFAULT_WARNING_BUILD_MODULE_TYPES :=$= \
|
|||
# BUILD_BROKEN_USES_BUILD_* in your BoardConfig.mk in order to turn them back
|
||||
# to warnings.
|
||||
DEFAULT_ERROR_BUILD_MODULE_TYPES :=$= \
|
||||
BUILD_AUX_EXECUTABLE \
|
||||
BUILD_AUX_STATIC_LIBRARY \
|
||||
BUILD_COPY_HEADERS \
|
||||
BUILD_HOST_EXECUTABLE \
|
||||
BUILD_HOST_FUZZ_TEST \
|
||||
|
@ -46,6 +44,8 @@ DEFAULT_ERROR_BUILD_MODULE_TYPES :=$= \
|
|||
# These are BUILD_* variables that are always errors to reference.
|
||||
# Setting the BUILD_BROKEN_USES_BUILD_* variables is also an error.
|
||||
OBSOLETE_BUILD_MODULE_TYPES :=$= \
|
||||
BUILD_AUX_EXECUTABLE \
|
||||
BUILD_AUX_STATIC_LIBRARY \
|
||||
BUILD_HOST_SHARED_TEST_LIBRARY \
|
||||
BUILD_SHARED_TEST_LIBRARY \
|
||||
|
||||
|
|
|
@ -360,9 +360,6 @@ HOST_OUT_FAKE := $(HOST_OUT)/fake_packages
|
|||
HOST_OUT_COMMON_INTERMEDIATES \
|
||||
HOST_OUT_FAKE
|
||||
|
||||
# Nano environment config
|
||||
include $(BUILD_SYSTEM)/aux_config.mk
|
||||
|
||||
HOST_CROSS_OUT_INTERMEDIATES := $(HOST_CROSS_OUT)/obj
|
||||
HOST_CROSS_OUT_NOTICE_FILES := $(HOST_CROSS_OUT_INTERMEDIATES)/NOTICE_FILES
|
||||
.KATI_READONLY := \
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
# my_link_deps: the dependencies, in the form of <MODULE_CLASS>:<name>
|
||||
#
|
||||
|
||||
my_link_prefix := LINK_TYPE:$(call find-idf-prefix,$(my_kind),$(my_host_cross))$(if $(filter AUX,$(my_kind)),-$(AUX_OS_VARIANT)):$(if $(my_common),$(my_common):_,_:$(if $(my_2nd_arch_prefix),$(my_2nd_arch_prefix),_))
|
||||
my_link_prefix := LINK_TYPE:$(call find-idf-prefix,$(my_kind),$(my_host_cross)):$(if $(my_common),$(my_common):_,_:$(if $(my_2nd_arch_prefix),$(my_2nd_arch_prefix),_))
|
||||
link_type := $(my_link_prefix):$(LOCAL_MODULE_CLASS):$(LOCAL_MODULE)
|
||||
ALL_LINK_TYPES := $(ALL_LINK_TYPES) $(link_type)
|
||||
$(link_type).TYPE := $(my_link_type)
|
||||
|
|
18
core/main.mk
18
core/main.mk
|
@ -346,9 +346,6 @@ ifneq ($(words $(sort $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild emula
|
|||
$(error The 'sdk' target may not be specified with any other targets)
|
||||
endif
|
||||
|
||||
# AUX dependencies are already added by now; remove triggers from the MAKECMDGOALS
|
||||
MAKECMDGOALS := $(strip $(filter-out AUX-%,$(MAKECMDGOALS)))
|
||||
|
||||
# TODO: this should be eng I think. Since the sdk is built from the eng
|
||||
# variant.
|
||||
tags_to_install := debug eng
|
||||
|
@ -832,7 +829,6 @@ add-required-deps :=
|
|||
# - TARGET
|
||||
# - HOST
|
||||
# - HOST_CROSS
|
||||
# - AUX-<variant-name>
|
||||
# 3: Whether to use the common intermediates directory or not
|
||||
# - _
|
||||
# - COMMON
|
||||
|
@ -859,14 +855,8 @@ add-required-deps :=
|
|||
|
||||
link_type_error :=
|
||||
|
||||
define link-type-prefix-base
|
||||
$(word 2,$(subst :,$(space),$(1)))
|
||||
endef
|
||||
define link-type-prefix
|
||||
$(if $(filter AUX-%,$(link-type-prefix-base)),$(patsubst AUX-%,AUX,$(link-type-prefix-base)),$(link-type-prefix-base))
|
||||
endef
|
||||
define link-type-aux-variant
|
||||
$(if $(filter AUX-%,$(link-type-prefix-base)),$(patsubst AUX-%,%,$(link-type-prefix-base)))
|
||||
$(word 2,$(subst :,$(space),$(1)))
|
||||
endef
|
||||
define link-type-common
|
||||
$(patsubst _,,$(word 3,$(subst :,$(space),$(1))))
|
||||
|
@ -884,7 +874,7 @@ define link-type-os
|
|||
$(strip $(eval _p := $(link-type-prefix))\
|
||||
$(if $(filter HOST HOST_CROSS,$(_p)),\
|
||||
$($(_p)_OS),\
|
||||
$(if $(filter AUX,$(_p)),AUX,android)))
|
||||
android))
|
||||
endef
|
||||
define link-type-arch
|
||||
$($(link-type-prefix)_$(link-type-2ndarchprefix)ARCH)
|
||||
|
@ -1433,9 +1423,6 @@ bootimage_test_harness: $(INSTALLED_TEST_HARNESS_BOOTIMAGE_TARGET)
|
|||
.PHONY: vbmetaimage
|
||||
vbmetaimage: $(INSTALLED_VBMETAIMAGE_TARGET)
|
||||
|
||||
.PHONY: auxiliary
|
||||
auxiliary: $(INSTALLED_AUX_TARGETS)
|
||||
|
||||
# Build files and then package it into the rom formats
|
||||
.PHONY: droidcore
|
||||
droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \
|
||||
|
@ -1481,7 +1468,6 @@ droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \
|
|||
$(INSTALLED_FILES_FILE_RECOVERY) \
|
||||
$(INSTALLED_FILES_JSON_RECOVERY) \
|
||||
$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
|
||||
auxiliary \
|
||||
soong_docs
|
||||
|
||||
# dist_files only for putting your library into the dist directory with a full build.
|
||||
|
|
|
@ -15,7 +15,6 @@ PARSE_TIME_MAKE_GOALS := \
|
|||
$(dont_bother_goals) \
|
||||
all \
|
||||
ECLIPSE-% \
|
||||
AUX-% \
|
||||
brillo_tests \
|
||||
btnod \
|
||||
build-art% \
|
||||
|
|
Loading…
Reference in New Issue