optee各组件支持32位系统
问题:
export USE_A32=true之后编译32位安卓版本时,出现无法开机问题。
现象表现在手机卡在开机LOGO界面,从log看是optee keymaster 3.0 start失败导致的。
库上的optee方案集成思路:
conf.mk的默认配置为:ta-targets := ta_arm64
toolchain用了64位的。
aosp版本,optee的组件采用闭源方式。
REE侧的service和tee-supplicant,是通过mma编译完了之后,将生成物搜集到一起,同时生成一个Android.mk,通过prebuilt的方式将这些组件集成到vendor.img中。
梳理:
prebuilt生成物的搜集过程,默认是在64bit配置下编译的。
在32bit的out目录下,通过file命令,如optee-keymaster,optee-gatekeeper等文件(vendor/bin/hw下面),都是32bit。
产品要求在默认64bit的配置下,能同时生成64位和32位的prebuilt组件。
解决过程:
通过拉取源码,在aosp代码下,export USE_A32=true之后编译的32位版本,烧写之后开机成功。
REE侧的几个bin,包括gatekeeper,keymaster和wait-for-keymaster这3个组件,增加LOCAL_MULTILIB的配置,确保32位和64位生成物生成。
同时修改搜集生成物的脚本,形成配套的Android.mk。
开机之后,发现还是无法启动。
串口log看还是在init时keymaster服务一直无法启动。
这时,通过ps -A |grep tee-supplicant,发现该服务没有启动。
串口log中显示supplicant服务启动异常log。
4017 01-02 02:57:57.987 0 0 I init : processing action (fs) from (/vendor/etc/init/tee-supplicant.rc:6) 4018 01-02 02:57:58.039 0 0 I init : starting service 'tee-supplicant'... 4019 01-02 02:57:58.050 0 0 E init : cannot execv('/vendor/bin/tee-supplicant'). See the 'Debugging init' section of init's README.md for tips: No such file or directory 4023 01-02 02:57:58.099 0 0 I init : Service 'tee-supplicant' (pid 322) exited with status 127 4024 01-02 02:57:58.106 0 0 I init : Sending signal 9 to service 'tee-supplicant' (pid 322) process group...
于是同步修改了tee-supplicant的mk和release组件过程,让tee-supplicant也同时支持LOCAL_MULTILIB:=both配置。
修改后编译启动成功。
修改点示例:
以gatekeeper为例。
Android.mk:
黄色部分是新增的。
include $(CLEAR_VARS) LOCAL_MODULE := android.hardware.gatekeeper@1.0-service.optee LOCAL_INIT_RC := android.hardware.gatekeeper@1.0-service.optee.rc LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_MODULE_TAGS := optional LOCAL_VENDOR_MODULE := true LOCAL_VINTF_FRAGMENTS := android.hardware.gatekeeper@1.0-service.optee.xml LOCAL_OVERRIDES_MODULES := android.hardware.gatekeeper@1.0-service.software LOCAL_CFLAGS = -Wall -Werror LOCAL_CFLAGS += -DANDROID_BUILD LOCAL_SRC_FILES := \ service.cpp \ optee_gatekeeper_device.cpp \ optee_ipc.cpp LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/ta/include LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../optee_client/include LOCAL_SHARED_LIBRARIES := \ liblog \ libcutils \ libteec \ libhardware \ libhidlbase \ libhidltransport \ libutils \ android.hardware.gatekeeper@1.0 #LOCAL_MULTILIB := 64 LOCAL_MULTILIB := both LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32 LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64 include $(BUILD_EXECUTABLE)
搜集生成物的脚本:
#!/bin/bash usage () { cat <<USAGE copy releaseed files from outbin_dir to dstdir usage:$(basename $0) dst_dir outbin_dir [system|vendor] USAGE } if [ $# -eq 0 ]; then usage exit fi DST=$1/gatekeeper PART=$3 if [ "NULL$PART" = "NULL" ]; then PART=vendor fi BINDIR=$2/$PART if [ -e $DST ]; then echo "error: $DST exist! DO NOTHING!!!!" exit -1 fi binlist=( etc/init/android.hardware.gatekeeper@1.0-service.optee.rc -bin/hw/android.hardware.gatekeeper@1.0-service.optee +bin/hw/android.hardware.gatekeeper@1.0-service.optee32 +bin/hw/android.hardware.gatekeeper@1.0-service.optee64 lib/optee_armtz/4d573443-6a56-4272-ac6f-2425af9ef9bb.ta etc/vintf/manifest/android.hardware.gatekeeper@1.0-service.optee.xml ) include \$(CLEAR_VARS) LOCAL_VENDOR_MODULE := true LOCAL_MODULE := android.hardware.gatekeeper@1.0-service.optee -LOCAL_SRC_FILES:= android.hardware.gatekeeper@1.0-service.optee LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_INIT_RC := android.hardware.gatekeeper@1.0-service.optee.rc LOCAL_VINTF_FRAGMENTS := android.hardware.gatekeeper@1.0-service.optee.xml LOCAL_OVERRIDES_MODULES := android.hardware.gatekeeper@1.0-service.software +LOCAL_MULTILIB := both +LOCAL_SRC_FILES_32 := \$(LOCAL_MODULE)32 +LOCAL_SRC_FILES_64 := \$(LOCAL_MODULE)64 include \$(BUILD_PREBUILT) #gatekeeper ta include \$(CLEAR_VARS) ................ include \$(BUILD_PREBUILT) AndroidINFO } echo "cp binary files" mkdir -p $DST for file in ${binlist[@]}; do echo "cp $file $DST/$(dirname $file)" if [ ! -e $BINDIR/$file ];then echo "error: $BINDIR/$file NOT EXIST!!!" exit -2 fi cp $BINDIR/$file $DST/ done
android官网上关于64位系统的编译选项说明:
https://source.android.com/source/64-bit-builds?hl=zh-cn
clear_vars.mk
########################################################### ## Clear out values of all variables used by rule templates. ########################################################### # '',true LOCAL_2ND_ARCH_VAR_PREFIX:= LOCAL_32_BIT_ONLY:= LOCAL_AAPT2_ONLY:= LOCAL_AAPT_FLAGS:= LOCAL_AAPT_INCLUDE_ALL_RESOURCES:= LOCAL_AAPT_NAMESPACES:= LOCAL_ADDITIONAL_CERTIFICATES:= LOCAL_ADDITIONAL_CHECKED_MODULE:= LOCAL_ADDITIONAL_DEPENDENCIES:= LOCAL_ADDITIONAL_HTML_DIR:= LOCAL_ADDITIONAL_JAVA_DIR:= LOCAL_AIDL_INCLUDES:= LOCAL_ALLOW_UNDEFINED_SYMBOLS:= LOCAL_ANNOTATION_PROCESSORS:= LOCAL_ANNOTATION_PROCESSOR_CLASSES:= LOCAL_APIDIFF_NEWAPI:= LOCAL_APIDIFF_OLDAPI:= LOCAL_APK_LIBRARIES:= LOCAL_APK_SET_MASTER_FILE:= LOCAL_APKCERTS_FILE:= LOCAL_ARM_MODE:= LOCAL_ASFLAGS:= LOCAL_ASSET_DIR:= LOCAL_BUILT_MODULE:= LOCAL_BUILT_MODULE_STEM:= LOCAL_CC:= LOCAL_CERTIFICATE:= LOCAL_CFLAGS:= LOCAL_CHECK_SAME_VNDK_VARIANTS:= LOCAL_CHECKED_MODULE:= LOCAL_C_INCLUDES:= LOCAL_CLANG:= LOCAL_CLANG_ASFLAGS:= LOCAL_CLANG_CFLAGS:= LOCAL_CLANG_CONLYFLAGS:= LOCAL_CLANG_CPPFLAGS:= LOCAL_CLANG_LDFLAGS:= LOCAL_CLASSPATH:= LOCAL_COMPATIBILITY_SUITE:= LOCAL_COMPATIBILITY_SUPPORT_FILES:= LOCAL_COMPRESSED_MODULE:= LOCAL_CONLYFLAGS:= LOCAL_COPY_HEADERS:= LOCAL_COPY_HEADERS_TO:= LOCAL_CPP_EXTENSION:= LOCAL_CPPFLAGS:= LOCAL_CPP_STD:= LOCAL_C_STD:= LOCAL_CTS_TEST_PACKAGE:= LOCAL_CTS_TEST_RUNNER:= LOCAL_CXX:= LOCAL_CXX_STL := default LOCAL_DEX_PREOPT_APP_IMAGE:= LOCAL_DEX_PREOPT_FLAGS:= LOCAL_DEX_PREOPT_GENERATE_PROFILE:= LOCAL_DEX_PREOPT_PROFILE_CLASS_LISTING:= LOCAL_DEX_PREOPT:= # '',true,false LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG:= LOCAL_DISABLE_RESOLVE_SUPPORT_LIBRARIES:= LOCAL_DONT_CHECK_MODULE:= # Don't delete the META_INF dir when merging static Java libraries. LOCAL_DONT_DELETE_JAR_META_INF:= LOCAL_DONT_MERGE_MANIFESTS:= LOCAL_DPI_FILE_STEM:= LOCAL_DPI_VARIANTS:= LOCAL_DROIDDOC_ANNOTATIONS_ZIP := LOCAL_DROIDDOC_API_VERSIONS_XML := LOCAL_DROIDDOC_ASSET_DIR:= LOCAL_DROIDDOC_CUSTOM_ASSET_DIR:= LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:= LOCAL_DROIDDOC_DOC_ZIP := LOCAL_DROIDDOC_JDIFF_DOC_ZIP := LOCAL_DROIDDOC_HTML_DIR:= LOCAL_DROIDDOC_METADATA_ZIP:= LOCAL_DROIDDOC_OPTIONS:= LOCAL_DROIDDOC_SOURCE_PATH:= LOCAL_DROIDDOC_STUB_OUT_DIR:= LOCAL_DROIDDOC_STUBS_SRCJAR := LOCAL_DROIDDOC_TEMPLATE_DIR:= LOCAL_DROIDDOC_USE_STANDARD_DOCLET:= LOCAL_DX_FLAGS:= LOCAL_DYLIB_LIBRARIES:= LOCAL_EMMA_COVERAGE_FILTER:= LOCAL_EMMA_INSTRUMENT:= LOCAL_ENFORCE_USES_LIBRARIES:= LOCAL_ERROR_PRONE_FLAGS:= LOCAL_EXPORT_CFLAGS:= LOCAL_EXPORT_C_INCLUDE_DEPS:= LOCAL_EXPORT_C_INCLUDE_DIRS:= LOCAL_EXPORT_HEADER_LIBRARY_HEADERS:= LOCAL_EXPORT_PACKAGE_RESOURCES:= LOCAL_EXPORT_PROGUARD_FLAG_FILES:= LOCAL_EXPORT_SDK_LIBRARIES:= LOCAL_EXPORT_SHARED_LIBRARY_HEADERS:= LOCAL_EXPORT_STATIC_LIBRARY_HEADERS:= LOCAL_EXTRACT_APK:= LOCAL_EXTRACT_DPI_APK:= LOCAL_FDO_SUPPORT:= LOCAL_FINDBUGS_FLAGS:= LOCAL_FORCE_STATIC_EXECUTABLE:= LOCAL_FULL_CLASSES_JACOCO_JAR:= LOCAL_FULL_CLASSES_PRE_JACOCO_JAR:= LOCAL_FULL_LIBS_MANIFEST_FILES:= LOCAL_FULL_MANIFEST_FILE:= LOCAL_FULL_TEST_CONFIG:= LOCAL_FUZZ_ENGINE:= LOCAL_FUZZ_INSTALLED_SHARED_DEPS:= LOCAL_GCNO_FILES:= LOCAL_GENERATED_SOURCES:= # Group static libraries with "-Wl,--start-group" and "-Wl,--end-group" when linking. LOCAL_GROUP_STATIC_LIBRARIES:= LOCAL_GTEST:=true LOCAL_HEADER_LIBRARIES:= LOCAL_HOST_PREFIX:= LOCAL_HOST_REQUIRED_MODULES:= LOCAL_INIT_RC:= LOCAL_INJECT_BSSL_HASH:= LOCAL_INSTALLED_MODULE:= LOCAL_INSTALLED_MODULE_STEM:= LOCAL_INSTRUMENTATION_FOR:= LOCAL_INTERMEDIATE_SOURCE_DIR:= LOCAL_INTERMEDIATE_SOURCES:= LOCAL_INTERMEDIATE_TARGETS:= LOCAL_IS_FUZZ_TARGET:= LOCAL_IS_HOST_MODULE:= LOCAL_IS_RUNTIME_RESOURCE_OVERLAY:= LOCAL_JACK_CLASSPATH:= LOCAL_JACK_COVERAGE_EXCLUDE_FILTER:= LOCAL_JACK_COVERAGE_INCLUDE_FILTER:= # '' (ie disabled), disabled, full, incremental, javac_frontend LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) LOCAL_JACK_FLAGS:= LOCAL_JACK_PLUGIN:= LOCAL_JACK_PLUGIN_PATH:= LOCAL_JACK_PROGUARD_FLAGS:= LOCAL_JAR_EXCLUDE_FILES:= LOCAL_JAR_EXCLUDE_PACKAGES:= LOCAL_JARJAR_RULES:= LOCAL_JAR_MANIFEST:= LOCAL_JAR_PACKAGES:= LOCAL_JAR_PROCESSOR:= LOCAL_JAR_PROCESSOR_ARGS:= LOCAL_JAVACFLAGS:= LOCAL_JAVA_LANGUAGE_VERSION:= LOCAL_JAVA_LAYERS_FILE:= LOCAL_JAVA_LIBRARIES:= LOCAL_JAVA_RESOURCE_DIRS:= LOCAL_JAVA_RESOURCE_FILES:= LOCAL_JETIFIER_ENABLED:= LOCAL_JNI_SHARED_LIBRARIES:= LOCAL_JNI_SHARED_LIBRARIES_ABI:= LOCAL_CERTIFICATE_LINEAGE:= LOCAL_LDFLAGS:= LOCAL_LDLIBS:= LOCAL_LOGTAGS_FILES:= LOCAL_MANIFEST_FILE:= LOCAL_MANIFEST_INSTRUMENTATION_FOR:= LOCAL_MANIFEST_PACKAGE_NAME:= LOCAL_MIN_SDK_VERSION:= LOCAL_MODULE:= LOCAL_MODULE_CLASS:= LOCAL_MODULE_HOST_ARCH:= LOCAL_MODULE_HOST_ARCH_WARN:= LOCAL_MODULE_HOST_CROSS_ARCH:= LOCAL_MODULE_HOST_OS:= LOCAL_MODULE_OWNER:= LOCAL_MODULE_PATH:= LOCAL_MODULE_RELATIVE_PATH := LOCAL_MODULE_STEM:= LOCAL_MODULE_SUFFIX:= LOCAL_MODULE_SYMLINKS:= LOCAL_MODULE_TAGS:= LOCAL_MODULE_TARGET_ARCH:= LOCAL_MODULE_TARGET_ARCH_WARN:= LOCAL_MODULE_UNSUPPORTED_HOST_ARCH:= LOCAL_MODULE_UNSUPPORTED_HOST_ARCH_WARN:= LOCAL_MODULE_UNSUPPORTED_TARGET_ARCH:= LOCAL_MODULE_UNSUPPORTED_TARGET_ARCH_WARN:= LOCAL_MULTILIB:= LOCAL_NATIVE_BENCHMARK:= LOCAL_NDK_STL_VARIANT:= LOCAL_NDK_VERSION:=current LOCAL_NO_CRT:= LOCAL_NO_DEFAULT_COMPILER_FLAGS:= LOCAL_NO_FPIE := LOCAL_NO_LIBCRT_BUILTINS:= LOCAL_NO_NOTICE_FILE:= LOCAL_NO_PIC:= LOCAL_NOSANITIZE:= LOCAL_NO_STANDARD_LIBRARIES:= LOCAL_NO_STATIC_ANALYZER:= LOCAL_NOT_AVAILABLE_FOR_PLATFORM:= LOCAL_NOTICE_FILE:= LOCAL_ODM_MODULE:= LOCAL_OEM_MODULE:= LOCAL_OPTIONAL_USES_LIBRARIES:= LOCAL_OVERRIDES_PACKAGES:= LOCAL_OVERRIDES_MODULES:= LOCAL_PACKAGE_NAME:= LOCAL_PACKAGE_SPLITS:= LOCAL_PACK_MODULE_RELOCATIONS:= LOCAL_PATCH_MODULE:= LOCAL_PICKUP_FILES:= LOCAL_POST_INSTALL_CMD:= LOCAL_POST_LINK_CMD:= LOCAL_PREBUILT_COVERAGE_ARCHIVE:= LOCAL_PREBUILT_EXECUTABLES:= LOCAL_PREBUILT_JAVA_LIBRARIES:= LOCAL_PREBUILT_JNI_LIBS:= LOCAL_PREBUILT_LIBS:= LOCAL_PREBUILT_MODULE_FILE:= LOCAL_PREBUILT_OBJ_FILES:= LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:= LOCAL_PREBUILT_STRIP_COMMENTS:= LOCAL_USE_EMBEDDED_DEX:= LOCAL_USE_EMBEDDED_NATIVE_LIBS:= LOCAL_PRESUBMIT_DISABLED:= LOCAL_PRIVATE_PLATFORM_APIS:= LOCAL_PRIVILEGED_MODULE:= LOCAL_PROC_MACRO_LIBRARIES:= # '',full,custom,disabled,obfuscation,optimization LOCAL_PRODUCT_MODULE:= # TODO(b/135957588) Remove LOCAL_PRODUCT_SERVICES_MODULE LOCAL_PRODUCT_SERVICES_MODULE := LOCAL_PROGUARD_ENABLED:= LOCAL_PROGUARD_FLAG_FILES:= LOCAL_PROGUARD_FLAGS:= LOCAL_PROGUARD_FLAGS_DEPS:= LOCAL_PROPRIETARY_MODULE:= LOCAL_PROTOC_FLAGS:= # lite(default),micro,nano,stream,full,nanopb-c,nanopb-c-enable_malloc,nanopb-c-16bit,nanopb-c-enable_malloc-16bit,nanopb-c-32bit,nanopb-c-enable_malloc-32bit LOCAL_PROTOC_OPTIMIZE_TYPE:= LOCAL_PROTO_JAVA_OUTPUT_PARAMS:= LOCAL_R8_FLAG_FILES:= LOCAL_RECORDED_MODULE_TYPE:= LOCAL_RENDERSCRIPT_CC:= LOCAL_RENDERSCRIPT_COMPATIBILITY:= LOCAL_RENDERSCRIPT_FLAGS:= LOCAL_RENDERSCRIPT_INCLUDES:= LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE:= LOCAL_RENDERSCRIPT_TARGET_API:= # Used to replace the installed file of a presigned prebuilt apk in PDK fusion build, # to avoid installing the presigned apks with classes.dex unstripped. LOCAL_REPLACE_PREBUILT_APK_INSTALLED:= LOCAL_REQUIRED_MODULES:= LOCAL_RES_LIBRARIES:= LOCAL_RESOURCE_DIR:= LOCAL_RLIB_LIBRARIES:= LOCAL_RMTYPEDEFS:= LOCAL_RRO_THEME:= LOCAL_RTTI_FLAG:= LOCAL_SANITIZE:= LOCAL_SANITIZE_DIAG:= LOCAL_SANITIZE_RECOVER:= LOCAL_SANITIZE_NO_RECOVER:= LOCAL_SANITIZE_BLACKLIST := LOCAL_SDK_LIBRARIES := LOCAL_SDK_RES_VERSION:= LOCAL_SDK_VERSION:= LOCAL_SHARED_ANDROID_LIBRARIES:= LOCAL_SHARED_LIBRARIES:= LOCAL_SOONG_AAR := LOCAL_SOONG_BUILT_INSTALLED := LOCAL_SOONG_BUNDLE := LOCAL_SOONG_CLASSES_JAR := LOCAL_SOONG_DEX_JAR := LOCAL_SOONG_EXPORT_PROGUARD_FLAGS := LOCAL_SOONG_HEADER_JAR := LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR := LOCAL_SOONG_LINK_TYPE := LOCAL_SOONG_LINT_REPORTS := LOCAL_SOONG_PROGUARD_DICT := LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE := LOCAL_SOONG_DEVICE_RRO_DIRS := LOCAL_SOONG_PRODUCT_RRO_DIRS := LOCAL_SOONG_STATIC_LIBRARY_EXTRA_PACKAGES := LOCAL_SOONG_SYMBOL_PATH := LOCAL_SOONG_TOC := LOCAL_SOONG_UNSTRIPPED_BINARY := LOCAL_SOONG_VNDK_VERSION := # '',true LOCAL_SOURCE_FILES_ALL_GENERATED:= LOCAL_SRC_FILES:= LOCAL_SRC_FILES_EXCLUDE:= LOCAL_SRCJARS:= LOCAL_STATIC_ANDROID_LIBRARIES:= LOCAL_STATIC_JAVA_AAR_LIBRARIES:= LOCAL_STATIC_JAVA_LIBRARIES:= LOCAL_STATIC_LIBRARIES:= LOCAL_SYSTEM_EXT_MODULE:= LOCAL_STRIP_MODULE:= LOCAL_SYSTEM_SHARED_LIBRARIES:=none LOCAL_TARGET_REQUIRED_MODULES:= LOCAL_TEST_CONFIG:= LOCAL_TEST_CONFIG_OPTIONS:= LOCAL_TEST_DATA:= LOCAL_TEST_MODULE_TO_PROGUARD_WITH:= LOCAL_TIDY:= LOCAL_TIDY_CHECKS:= LOCAL_TIDY_FLAGS:= LOCAL_UNCOMPRESS_DEX:= LOCAL_UNINSTALLABLE_MODULE:= LOCAL_UNSTRIPPED_PATH:= LOCAL_USE_AAPT2:= LOCAL_USE_CLANG_LLD:= LOCAL_USE_VNDK:= LOCAL_USE_VNDK_PRODUCT:= LOCAL_USES_LIBRARIES:= LOCAL_VENDOR_MODULE:= LOCAL_VINTF_FRAGMENTS:= LOCAL_VNDK_DEPEND_ON_CORE_VARIANT:= LOCAL_VTSC_FLAGS:= LOCAL_VTS_INCLUDES:= LOCAL_VTS_MODE:= LOCAL_WARNINGS_ENABLE:= LOCAL_WHOLE_STATIC_LIBRARIES:= LOCAL_YACCFLAGS:= LOCAL_CHECK_ELF_FILES:= # TODO: deprecate, it does nothing OVERRIDE_BUILT_MODULE_PATH:= # arch specific variables LOCAL_ASFLAGS_$(TARGET_ARCH):= LOCAL_CFLAGS_$(TARGET_ARCH):= LOCAL_C_INCLUDES_$(TARGET_ARCH):= LOCAL_CLANG_ASFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_CFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_CPPFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_LDFLAGS_$(TARGET_ARCH):= LOCAL_CLANG_$(TARGET_ARCH):= LOCAL_CPPFLAGS_$(TARGET_ARCH):= LOCAL_GENERATED_SOURCES_$(TARGET_ARCH):= LOCAL_HEADER_LIBRARIES_$(TARGET_ARCH):= LOCAL_LDFLAGS_$(TARGET_ARCH):= LOCAL_PACK_MODULE_RELOCATIONS_$(TARGET_ARCH):= LOCAL_PREBUILT_JNI_LIBS_$(TARGET_ARCH):= LOCAL_REQUIRED_MODULES_$(TARGET_ARCH):= LOCAL_SHARED_LIBRARIES_$(TARGET_ARCH):= LOCAL_SOONG_JNI_LIBS_$(TARGET_ARCH):= LOCAL_SOONG_JNI_LIBS_SYMBOLS:= LOCAL_SRC_FILES_EXCLUDE_$(TARGET_ARCH):= LOCAL_SRC_FILES_$(TARGET_ARCH):= LOCAL_STATIC_LIBRARIES_$(TARGET_ARCH):= LOCAL_STRIP_MODULE_$(TARGET_ARCH):= LOCAL_WHOLE_STATIC_LIBRARIES_$(TARGET_ARCH):= ifdef TARGET_2ND_ARCH LOCAL_ASFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CFLAGS_$(TARGET_2ND_ARCH):= LOCAL_C_INCLUDES_$(TARGET_2ND_ARCH):= LOCAL_CLANG_ASFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_CFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_CPPFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_CLANG_$(TARGET_2ND_ARCH):= LOCAL_CPPFLAGS_$(TARGET_2ND_ARCH):= LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH):= LOCAL_HEADER_LIBRARIES_$(TARGET_2ND_ARCH):= LOCAL_LDFLAGS_$(TARGET_2ND_ARCH):= LOCAL_PACK_MODULE_RELOCATIONS_$(TARGET_2ND_ARCH):= LOCAL_PREBUILT_JNI_LIBS_$(TARGET_2ND_ARCH):= LOCAL_REQUIRED_MODULES_$(TARGET_2ND_ARCH):= LOCAL_SHARED_LIBRARIES_$(TARGET_2ND_ARCH):= LOCAL_SOONG_JNI_LIBS_$(TARGET_2ND_ARCH):= LOCAL_SRC_FILES_EXCLUDE_$(TARGET_2ND_ARCH):= LOCAL_SRC_FILES_$(TARGET_2ND_ARCH):= LOCAL_STATIC_LIBRARIES_$(TARGET_2ND_ARCH):= LOCAL_STRIP_MODULE_$(TARGET_2ND_ARCH):= LOCAL_WHOLE_STATIC_LIBRARIES_$(TARGET_2ND_ARCH):= endif LOCAL_ASFLAGS_$(HOST_ARCH):= LOCAL_CFLAGS_$(HOST_ARCH):= LOCAL_C_INCLUDES_$(HOST_ARCH):= LOCAL_CLANG_ASFLAGS_$(HOST_ARCH):= LOCAL_CLANG_CFLAGS_$(HOST_ARCH):= LOCAL_CLANG_CPPFLAGS_$(HOST_ARCH):= LOCAL_CLANG_$(HOST_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_ARCH):= LOCAL_CPPFLAGS_$(HOST_ARCH):= LOCAL_GENERATED_SOURCES_$(HOST_ARCH):= LOCAL_HEADER_LIBRARIES_$(HOST_ARCH):= LOCAL_LDFLAGS_$(HOST_ARCH):= LOCAL_REQUIRED_MODULES_$(HOST_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_ARCH):= LOCAL_SRC_FILES_EXCLUDE_$(HOST_ARCH):= LOCAL_SRC_FILES_$(HOST_ARCH):= LOCAL_STATIC_LIBRARIES_$(HOST_ARCH):= LOCAL_WHOLE_STATIC_LIBRARIES_$(HOST_ARCH):= ifdef HOST_2ND_ARCH LOCAL_ASFLAGS_$(HOST_2ND_ARCH):= LOCAL_CFLAGS_$(HOST_2ND_ARCH):= LOCAL_C_INCLUDES_$(HOST_2ND_ARCH):= LOCAL_CLANG_ASFLAGS_$(HOST_2ND_ARCH):= LOCAL_CLANG_CFLAGS_$(HOST_2ND_ARCH):= LOCAL_CLANG_CPPFLAGS_$(HOST_2ND_ARCH):= LOCAL_CLANG_$(HOST_2ND_ARCH):= LOCAL_CLANG_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_CPPFLAGS_$(HOST_2ND_ARCH):= LOCAL_GENERATED_SOURCES_$(HOST_2ND_ARCH):= LOCAL_HEADER_LIBRARIES_$(HOST_2ND_ARCH):= LOCAL_LDFLAGS_$(HOST_2ND_ARCH):= LOCAL_REQUIRED_MODULES_$(HOST_2ND_ARCH):= LOCAL_SHARED_LIBRARIES_$(HOST_2ND_ARCH):= LOCAL_SRC_FILES_EXCLUDE_$(HOST_2ND_ARCH):= LOCAL_SRC_FILES_$(HOST_2ND_ARCH):= LOCAL_STATIC_LIBRARIES_$(HOST_2ND_ARCH):= LOCAL_WHOLE_STATIC_LIBRARIES_$(HOST_2ND_ARCH):= endif LOCAL_ASFLAGS_$(HOST_OS):= LOCAL_CFLAGS_$(HOST_OS):= LOCAL_C_INCLUDES_$(HOST_OS):= LOCAL_CPPFLAGS_$(HOST_OS):= LOCAL_GENERATED_SOURCES_$(HOST_OS):= LOCAL_HEADER_LIBRARIES_$(HOST_OS):= LOCAL_LDFLAGS_$(HOST_OS):= LOCAL_LDLIBS_$(HOST_OS):= LOCAL_REQUIRED_MODULES_$(HOST_OS):= LOCAL_SHARED_LIBRARIES_$(HOST_OS):= LOCAL_SRC_FILES_$(HOST_OS):= LOCAL_STATIC_LIBRARIES_$(HOST_OS):= LOCAL_SRC_FILES_$(HOST_OS)_$(HOST_ARCH):= ifdef HOST_2ND_ARCH LOCAL_SRC_FILES_$(HOST_OS)_$(HOST_2ND_ARCH):= endif LOCAL_ASFLAGS_32:= LOCAL_ASFLAGS_64:= LOCAL_CFLAGS_32:= LOCAL_CFLAGS_64:= LOCAL_C_INCLUDES_32:= LOCAL_C_INCLUDES_64:= LOCAL_CLANG_32:= LOCAL_CLANG_64:= LOCAL_CLANG_ASFLAGS_32:= LOCAL_CLANG_ASFLAGS_64:= LOCAL_CLANG_CFLAGS_32:= LOCAL_CLANG_CFLAGS_64:= LOCAL_CLANG_CPPFLAGS_32:= LOCAL_CLANG_CPPFLAGS_64:= LOCAL_CLANG_LDFLAGS_32:= LOCAL_CLANG_LDFLAGS_64:= LOCAL_CPPFLAGS_32:= LOCAL_CPPFLAGS_64:= LOCAL_GENERATED_SOURCES_32:= LOCAL_GENERATED_SOURCES_64:= LOCAL_HEADER_LIBRARIES_32:= LOCAL_HEADER_LIBRARIES_64:= LOCAL_INIT_RC_32:= LOCAL_INIT_RC_64:= LOCAL_LDFLAGS_32:= LOCAL_LDFLAGS_64:= LOCAL_MODULE_PATH_32:= LOCAL_MODULE_PATH_64:= LOCAL_MODULE_STEM_32:= LOCAL_MODULE_STEM_64:= LOCAL_MODULE_SYMLINKS_32:= LOCAL_MODULE_SYMLINKS_64:= LOCAL_SDCLANG:= LOCAL_SDCLANG_EXTRA_FLAGS_32:= LOCAL_SDCLANG_EXTRA_FLAGS_64:= LOCAL_SDCLANG_LTO:= LOCAL_SHARED_LIBRARIES_32:= LOCAL_SHARED_LIBRARIES_64:= LOCAL_SRC_FILES_32:= LOCAL_SRC_FILES_64:= LOCAL_SRC_FILES_EXCLUDE_32:= LOCAL_SRC_FILES_EXCLUDE_64:= LOCAL_STATIC_LIBRARIES_32:= LOCAL_STATIC_LIBRARIES_64:= LOCAL_WHOLE_STATIC_LIBRARIES_32:= LOCAL_WHOLE_STATIC_LIBRARIES_64:= # Robolectric variables LOCAL_INSTRUMENT_SOURCE_DIRS := LOCAL_ROBOTEST_FAILURE_FATAL := 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 := # Trim MAKEFILE_LIST so that $(call my-dir) doesn't need to # iterate over thousands of entries every time. # Leave the current makefile to make sure we don't break anything # that expects to be able to find the name of the current makefile. MAKEFILE_LIST := $(lastword $(MAKEFILE_LIST))