Android NDK: Как получить архитектуру компилятора в Android.mk динамически
Я пытаюсь настроить Android.mk для перекрестного компиляции собственного кода для поддержки различных чипсетов, а именно armeabi, mips и x86. Я знаю, что я могу настроить Application.mk следующим образом, чтобы скомпилировать исходный код для другого набора микросхем:
APP_ABI := all
Это приведет к созданию Android-NDK build script для компиляции исходного кода для всех наборов микросхем. Тем не менее, я хочу динамически сообщать Android.mk о поиске разных статических зависимостей библиотек, скомпилированных с использованием разных наборов микросхем.
# 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)
Можно ли это сделать? Если да, можете ли кто-нибудь советовать, как это сделать?
Обновление. Я попробовал что-то вроде этого в Application.mk:
APP_ABI := armeabi armeabi-v7a mips x64
с 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)
но это ошибки со следующим:
The LOCAL_SRC_FILES for a prebuilt static library should only contain one item
что имеет смысл. Я хочу передать APP_ABI: = all в Application.mk и уметь динамически ссылаться на него. Любые идеи?
Ответы
Ответ 1
Существует переменная TARGET_ARCH
, которая содержит значение текущего ABI, который строится. Вы можете использовать его следующим образом:
ifeq ($(TARGET_ARCH),x86)
LOCAL_CFLAGS := $(COMMON_FLAGS_LIST)
else
LOCAL_CFLAGS := -mfpu=vfp -mfloat-abi=softfp $(COMMON_FLAGS_LIST)
endif
Если вы укажете APP_ABI := armeabi-v7a armeabi mips x86
или APP_ABI := all
в своем Application.mk
, вы получите каждое отдельное значение ABI.
Ответ 2
Проверьте TARGET_ARCH_ABI
:
ifeq($(TARGET_ARCH_ABI), armeabi-v7a)
# v7a-specific stuff
endif