Android NDK: Cómo obtener la arquitectura del compilador en Android.mk dinámicamente
Estoy tratando de configurar Android.mk para compilar código nativo para soportar diferentes chipset a saber armeabi, mips, y x86. Sé que puedo configurar Application.mk de la siguiente manera para compilar el código fuente para diferentes conjuntos de chips:
APP_ABI := all
Esto activará el script de compilación de Android-NDK para compilar el código fuente para todos los chipsets. Sin embargo, quiero decir dinámicamente Android.mk para buscar diferentes dependencias estáticas de la biblioteca compiladas con diferentes chips establecer.
# Get the architecture info
ARCH := ????
include $(CLEAR_VARS)
LOCAL_MODULE:= mylib
LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
¿Es posible hacer esto? Si es así, ¿puede alguien aconsejar cómo hacerlo?
Update: Probé algo como esto en Application.mk:
APP_ABI := armeabi armeabi-v7a mips x64
Con Android.mk:
# Get the architecture info ARCH := $(APP_ABI) include $(CLEAR_VARS) LOCAL_MODULE:= mylib LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY)
Pero se equivoca con lo siguiente:
The LOCAL_SRC_FILES for a prebuilt static library should only contain one item
Que tiene sentido. Quiero pasar APP_ABI: = all in Application.mk y ser capaz de dinámicamente referenciarlo. Alguna idea?
2 answers
Existe una variable TARGET_ARCH
que contiene el valor del ABI actual que se está construyendo. Puede usarlo de la siguiente manera:
ifeq ($(TARGET_ARCH),x86)
LOCAL_CFLAGS := $(COMMON_FLAGS_LIST)
else
LOCAL_CFLAGS := -mfpu=vfp -mfloat-abi=softfp $(COMMON_FLAGS_LIST)
endif
Si especifica APP_ABI := armeabi-v7a armeabi mips x86
o APP_ABI := all
en su Application.mk
obtendrá todos y cada uno de los valores ABI separados.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-25 12:20:33
Compruebe TARGET_ARCH_ABI
:
ifeq($(TARGET_ARCH_ABI), armeabi-v7a)
# v7a-specific stuff
endif
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-30 12:14:09