Android NDK CPU Features detection library: ------------------------------------------- This NDK provides a small library named "cpufeatures" that can be used at runtime to detect the target device's CPU family and the optional features it supports. Usage: ------ The library is available from sources/cpufeatures. It provides an Android.mk build script that can be used to build it as a static library. To use it, you must: * include '$(NDK_ROOT)/sources/cpufeatures/Android.mk' at the start or end of your Android.mk file. * add '$(NDK_ROOT)/sources/cpufeatures' to your LOCAL_C_INCLUDES definition. * add 'cpufeatures' to your LOCAL_STATIC_LIBRARIES definition when building your final shared library. your source code can then #include to compile against it. Here is a simple example: /jni/Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cpufeatures LOCAL_SRC_FILES := LOCAL_STATIC_LIBRARIES += cpufeatures include $(BUILD_SHARED_LIBRARY) include $(NDK_ROOT)/sources/cpufeature/Android.mk Features: --------- Two functions are provided for now: AndroidCpuFamily android_getCpuFamily(); Returns the target device's CPU Family as an enum. For now, the only supported family is ANDROID_CPU_FAMILY_ARM. uint64_t android_getCpuFeatures(); Returns the set of optional features supported by the device's CPU. The result is a set of bit-flags, each corresponding to one CPU Family-specific optional feature. Currently, only the following flags are defined, for the ARM CPU Family: ANDROID_CPU_ARM_FEATURE_ARMv7 Indicates that the device's CPU supports the ARMv7-A instruction set as supported by the "armeabi-v7a" abi (see CPU-ARCH-ABIS.TXT). This corresponds to Thumb-2 and VFPv3-D16 instructions. ANDROID_CPU_ARM_FEATURE_VFPv3 Indicates that the device's CPU supports the VFPv3 hardware FPU instruction set extension. Due to the definition of 'armeabi-v7a', this will always be the case if ANDROID_CPU_ARM_FEATURE_ARMv7 is returned. Note that this corresponds to the minimum profile VFPv3-D16 that _only_ provides 16 hardware FP registers. ANDROID_CPU_ARM_FEATURE_NEON Indicates that the device's CPU supports the ARM Advanced SIMD (a.k.a. NEON) vector instruction set extension. Note that ARM mandates that such CPUs also implement VFPv3-D32, which provides 32 hardware FP registers (shared with the NEON unit). Important Note: --------------- The cpufeatures library will be updated to support more CPU families and optional features in the future. It is designed to work as-is on all official Android platform versions.