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?

Author: LuxuryMaster, 2012-09-27

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.

 28
Author: Sergey K.,
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
 32
Author: nneonneo,
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