Недавно я нашел другой способ обойти ограничения NDK.Мой случай не был связан с NEON, но для вас тот же хак мог бы выполнить эту работу.
Хитрость заключается в том, чтобы использовать существующий механизм «тегов» NDK, чтобы задать специальный CFLAGS
для группы файлов.Вот как вы это делаете:
Сначала перечислите неоновые источники.Вы не можете использовать суффикс .neon
, как описано в docs / CPU-ARM-NEON.html , потому что build-binary.mk обнаружит, что вы не нацелены на armeabi-v7a.Я использую следующую технику:
LOCAL_NEON_SRC_FILES := imgproc/neon_utils.c \
videoproc/usingneon.cpp
LOCAL_SRC_FILES := main.c \
imgproc/img.c \
videoproc/video.cpp
LOCAL_SRC_FILES += $(LOCAL_NEON_SRC_FILES)
Теперь определите CFLAGS
для NEON:
LOCAL_NEON_CFLAGS := -mfloat-abi=softfp -mfpu=neon -march=armv7
Наконец, добавьте следующую магическую строку в свой Android.mk:
TARGET-process-src-files-tags += $(call add-src-files-target-cflags, $(LOCAL_NEON_SRC_FILES), $(LOCAL_NEON_CFLAGS))
Если вам нужно построить более одного двоичного файла, вы, вероятно, захотите сбросить $(LOCAL_NEON_SRC_FILES)
на
include $(CLEAR_VARS)
. Для этого добавьте следующее к Android.mk
или Application.mk
:
modules-LOCALS += NEON_SRC_FILES
Примечание: Я не пробовал эту магию для NEON, она мне нужна для совершенно других целей.Возможно, вам потребуются некоторые изменения для достижения желаемых параметров компиляции для ваших файлов и для вашего проекта.Я использую NDK r.8b , и я не проверял, будет ли это работать на более ранних (или более поздних) версиях.