|
|
|
@ -65,6 +65,7 @@ |
|
|
|
|
# "armeabi" - ARMv5TE based CPU with software floating point operations |
|
|
|
|
# "armeabi-v7a" - ARMv7 based devices with hardware FPU instructions |
|
|
|
|
# this ABI target is used by default |
|
|
|
|
# "armeabi-v7a-hard with NEON" - ARMv7 based devices with hardware FPU instructions and hardfp |
|
|
|
|
# "armeabi-v7a with NEON" - same as armeabi-v7a, but |
|
|
|
|
# sets NEON as floating-point unit |
|
|
|
|
# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but |
|
|
|
@ -178,7 +179,7 @@ |
|
|
|
|
# ANDROID and BUILD_ANDROID will be set to true, you may test any of these |
|
|
|
|
# variables to make necessary Android-specific configuration changes. |
|
|
|
|
# |
|
|
|
|
# Also ARMEABI or ARMEABI_V7A or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64 |
|
|
|
|
# Also ARMEABI or ARMEABI_V7A or ARMEABI_V7A_HARD or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64 |
|
|
|
|
# will be set true, mutually exclusive. NEON option will be set true |
|
|
|
|
# if VFP is set to NEON. |
|
|
|
|
# |
|
|
|
@ -231,7 +232,7 @@ if( NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# known ABIs |
|
|
|
|
set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) |
|
|
|
|
set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a-hard with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) |
|
|
|
|
set( ANDROID_SUPPORTED_ABIS_arm64 "arm64-v8a" ) |
|
|
|
|
set( ANDROID_SUPPORTED_ABIS_x86 "x86" ) |
|
|
|
|
set( ANDROID_SUPPORTED_ABIS_x86_64 "x86_64" ) |
|
|
|
@ -711,6 +712,14 @@ elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" ) |
|
|
|
|
set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) |
|
|
|
|
set( VFPV3 true ) |
|
|
|
|
set( NEON true ) |
|
|
|
|
elseif( ANDROID_ABI STREQUAL "armeabi-v7a-hard with NEON" ) |
|
|
|
|
set( ARMEABI_V7A_HARD true ) |
|
|
|
|
set( ANDROID_NDK_ABI_NAME "armeabi-v7a-hard" ) |
|
|
|
|
set( ANDROID_ARCH_NAME "arm" ) |
|
|
|
|
set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) |
|
|
|
|
set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) |
|
|
|
|
set( VFPV3 true ) |
|
|
|
|
set( NEON true ) |
|
|
|
|
else() |
|
|
|
|
message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." ) |
|
|
|
|
endif() |
|
|
|
@ -904,7 +913,7 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN ) |
|
|
|
|
# old location ( pre r8c ) |
|
|
|
|
set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}" ) |
|
|
|
|
endif() |
|
|
|
|
if( ARMEABI_V7A AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) |
|
|
|
|
if( (ARMEABI_V7A OR ARMEABI_V7A_HARD) AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) |
|
|
|
|
list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" ) |
|
|
|
|
elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" ) |
|
|
|
|
list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" ) |
|
|
|
@ -912,9 +921,9 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN ) |
|
|
|
|
list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) |
|
|
|
|
endif() |
|
|
|
|
# always search static GNU STL to get the location of libsupc++.a |
|
|
|
|
if( ARMEABI_V7A AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) |
|
|
|
|
if( (ARMEABI_V7A OR ARMEABI_V7A_HARD) AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) |
|
|
|
|
elseif( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) |
|
|
|
|
elseif( (ARMEABI_V7A OR ARMEABI_V7A_HARD) AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}" ) |
|
|
|
|
elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libstdc++.a" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb" ) |
|
|
|
@ -935,7 +944,7 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN ) |
|
|
|
|
" ) |
|
|
|
|
endif() |
|
|
|
|
if( ANDROID_STL STREQUAL "gnustl_shared" ) |
|
|
|
|
if( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) |
|
|
|
|
if( (ARMEABI_V7A OR ARMEABI_V7A_HARD) AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) |
|
|
|
|
elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) |
|
|
|
|
set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) |
|
|
|
@ -1198,7 +1207,7 @@ if (ARM64_V8A ) |
|
|
|
|
if( NOT ANDROID_COMPILER_IS_CLANG ) |
|
|
|
|
set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" ) |
|
|
|
|
endif() |
|
|
|
|
elseif( ARMEABI OR ARMEABI_V7A) |
|
|
|
|
elseif( ARMEABI OR ARMEABI_V7A OR ARMEABI_V7A_HARD) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) |
|
|
|
|
if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 ) |
|
|
|
|
set( ANDROID_CXX_FLAGS_RELEASE "-mthumb -fomit-frame-pointer -fno-strict-aliasing" ) |
|
|
|
@ -1245,7 +1254,16 @@ if( NOT ANDROID_COMPILER_VERSION VERSION_LESS "4.6" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
# ABI-specific flags |
|
|
|
|
if( ARMEABI_V7A ) |
|
|
|
|
if( ARMEABI_V7A_HARD ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=hard -mhard-float -D_NDK_MATH_NO_SOFTFP=1" ) |
|
|
|
|
if( NEON ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" ) |
|
|
|
|
elseif( VFPV3 ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" ) |
|
|
|
|
else() |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" ) |
|
|
|
|
endif() |
|
|
|
|
elseif( ARMEABI_V7A ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp" ) |
|
|
|
|
if( NEON ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" ) |
|
|
|
@ -1254,6 +1272,7 @@ if( ARMEABI_V7A ) |
|
|
|
|
else() |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
elseif( ARMEABI_V6 ) |
|
|
|
|
set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) # vfp == vfpv2 |
|
|
|
|
elseif( ARMEABI ) |
|
|
|
@ -1330,6 +1349,10 @@ if( ARMEABI_V7A ) |
|
|
|
|
set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--fix-cortex-a8" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
if( ARMEABI_V7A_HARD ) |
|
|
|
|
set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-warn-mismatch -lm_hard" ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
if( ANDROID_NO_UNDEFINED ) |
|
|
|
|
if( MIPS ) |
|
|
|
|
# there is some sysroot-related problem in mips linker... |
|
|
|
@ -1351,7 +1374,7 @@ if( ANDROID_FUNCTION_LEVEL_LINKING ) |
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
if( ANDROID_COMPILER_VERSION VERSION_EQUAL "4.6" ) |
|
|
|
|
if( ANDROID_GOLD_LINKER AND (CMAKE_HOST_UNIX OR ANDROID_NDK_RELEASE_NUM GREATER 8002) AND (ARMEABI OR ARMEABI_V7A OR X86) ) |
|
|
|
|
if( ANDROID_GOLD_LINKER AND (CMAKE_HOST_UNIX OR ANDROID_NDK_RELEASE_NUM GREATER 8002) AND (ARMEABI OR ARMEABI_V7A OR ARMEABI_V7A_HARD OR X86) ) |
|
|
|
|
set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=gold" ) |
|
|
|
|
elseif( ANDROID_NDK_RELEASE_NUM GREATER 8002 ) # after r8b |
|
|
|
|
set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=bfd" ) |
|
|
|
@ -1626,7 +1649,7 @@ endif() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Variables controlling behavior or set by cmake toolchain: |
|
|
|
|
# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips", "arm64-v8a", "x86_64", "mips64" |
|
|
|
|
# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a-hard with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips", "arm64-v8a", "x86_64", "mips64" |
|
|
|
|
# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14,15,16,17,18,19,21 (depends on NDK version) |
|
|
|
|
# ANDROID_STL : gnustl_static/gnustl_shared/stlport_static/stlport_shared/gabi++_static/gabi++_shared/system_re/system/none |
|
|
|
|
# ANDROID_FORBID_SYGWIN : ON/OFF |
|
|
|
@ -1653,6 +1676,7 @@ endif() |
|
|
|
|
# ARMEABI : TRUE for arm v6 and older devices |
|
|
|
|
# ARMEABI_V6 : TRUE for arm v6 |
|
|
|
|
# ARMEABI_V7A : TRUE for arm v7a |
|
|
|
|
# ARMEABI_V7A_HARD : TRUE for arm v7a with hardfp |
|
|
|
|
# ARM64_V8A : TRUE for arm64-v8a |
|
|
|
|
# NEON : TRUE if NEON unit is enabled |
|
|
|
|
# VFPV3 : TRUE if VFP version 3 is enabled |
|
|
|
@ -1663,7 +1687,7 @@ endif() |
|
|
|
|
# BUILD_WITH_ANDROID_NDK : TRUE if NDK is used |
|
|
|
|
# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used |
|
|
|
|
# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform |
|
|
|
|
# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI |
|
|
|
|
# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "armeabi-v7a-hard", "x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI |
|
|
|
|
# ANDROID_NDK_RELEASE : from r5 to r10d; set only for NDK |
|
|
|
|
# ANDROID_NDK_RELEASE_NUM : numeric ANDROID_NDK_RELEASE version (1000*major+minor) |
|
|
|
|
# ANDROID_ARCH_NAME : "arm", "x86", "mips", "arm64", "x86_64", "mips64" depending on ANDROID_ABI |
|
|
|
|