65
65
# "armeabi" - ARMv5TE based CPU with software floating point operations
66
66
# "armeabi-v7a" - ARMv7 based devices with hardware FPU instructions
67
67
# this ABI target is used by default
68
+ # "armeabi-v7a-hard with NEON" - ARMv7 based devices with hardware FPU instructions and hardfp
68
69
# "armeabi-v7a with NEON" - same as armeabi-v7a, but
69
70
# sets NEON as floating-point unit
70
71
# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but
178
179
# ANDROID and BUILD_ANDROID will be set to true, you may test any of these
179
180
# variables to make necessary Android-specific configuration changes.
180
181
#
181
- # Also ARMEABI or ARMEABI_V7A or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64
182
+ # Also ARMEABI or ARMEABI_V7A or ARMEABI_V7A_HARD or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64
182
183
# will be set true, mutually exclusive. NEON option will be set true
183
184
# if VFP is set to NEON.
184
185
#
@@ -231,7 +232,7 @@ if( NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH )
231
232
endif ()
232
233
233
234
# known ABIs
234
- set ( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" )
235
+ 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" )
235
236
set ( ANDROID_SUPPORTED_ABIS_arm64 "arm64-v8a" )
236
237
set ( ANDROID_SUPPORTED_ABIS_x86 "x86" )
237
238
set ( ANDROID_SUPPORTED_ABIS_x86_64 "x86_64" )
@@ -711,6 +712,14 @@ elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" )
711
712
set ( CMAKE_SYSTEM_PROCESSOR "armv7-a" )
712
713
set ( VFPV3 true )
713
714
set ( NEON true )
715
+ elseif ( ANDROID_ABI STREQUAL "armeabi-v7a-hard with NEON" )
716
+ set ( ARMEABI_V7A_HARD true )
717
+ set ( ANDROID_NDK_ABI_NAME "armeabi-v7a-hard" )
718
+ set ( ANDROID_ARCH_NAME "arm" )
719
+ set ( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" )
720
+ set ( CMAKE_SYSTEM_PROCESSOR "armv7-a" )
721
+ set ( VFPV3 true )
722
+ set ( NEON true )
714
723
else ()
715
724
message ( SEND_ERROR "Unknown ANDROID_ABI=\" ${ANDROID_ABI} \" is specified." )
716
725
endif ()
@@ -904,17 +913,17 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN )
904
913
# old location ( pre r8c )
905
914
set ( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /include/c++/${ANDROID_COMPILER_VERSION} " )
906
915
endif ()
907
- if ( ARMEABI_V7A AND EXISTS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /${CMAKE_SYSTEM_PROCESSOR} /bits" )
916
+ if ( ( ARMEABI_V7A OR ARMEABI_V7A_HARD ) AND EXISTS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /${CMAKE_SYSTEM_PROCESSOR} /bits" )
908
917
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /${CMAKE_SYSTEM_PROCESSOR} " )
909
918
elseif ( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /thumb/bits" )
910
919
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /thumb" )
911
920
else ()
912
921
list ( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS} /${ANDROID_TOOLCHAIN_MACHINE_NAME} " )
913
922
endif ()
914
923
# always search static GNU STL to get the location of libsupc++.a
915
- 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" )
924
+ 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" )
916
925
set ( __libstl "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /thumb" )
917
- elseif ( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /libstdc++.a" )
926
+ elseif ( ( ARMEABI_V7A OR ARMEABI_V7A_HARD ) AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /libstdc++.a" )
918
927
set ( __libstl "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} " )
919
928
elseif ( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/thumb/libstdc++.a" )
920
929
set ( __libstl "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/thumb" )
@@ -935,7 +944,7 @@ if( BUILD_WITH_STANDALONE_TOOLCHAIN )
935
944
" )
936
945
endif ()
937
946
if ( ANDROID_STL STREQUAL "gnustl_shared" )
938
- if ( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /libgnustl_shared.so" )
947
+ if ( ( ARMEABI_V7A OR ARMEABI_V7A_HARD ) AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /libgnustl_shared.so" )
939
948
set ( __libstl "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/${CMAKE_SYSTEM_PROCESSOR} /libgnustl_shared.so" )
940
949
elseif ( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/thumb/libgnustl_shared.so" )
941
950
set ( __libstl "${ANDROID_STANDALONE_TOOLCHAIN} /${ANDROID_TOOLCHAIN_MACHINE_NAME} /lib/thumb/libgnustl_shared.so" )
@@ -1198,7 +1207,7 @@ if (ARM64_V8A )
1198
1207
if ( NOT ANDROID_COMPILER_IS_CLANG )
1199
1208
set ( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" )
1200
1209
endif ()
1201
- elseif ( ARMEABI OR ARMEABI_V7A )
1210
+ elseif ( ARMEABI OR ARMEABI_V7A OR ARMEABI_V7A_HARD )
1202
1211
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" )
1203
1212
if ( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 )
1204
1213
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" )
1245
1254
endif ()
1246
1255
1247
1256
# ABI-specific flags
1248
- if ( ARMEABI_V7A )
1257
+ if ( ARMEABI_V7A_HARD )
1258
+ set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=hard -mhard-float -D_NDK_MATH_NO_SOFTFP=1" )
1259
+ if ( NEON )
1260
+ set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" )
1261
+ elseif ( VFPV3 )
1262
+ set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" )
1263
+ else ()
1264
+ set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" )
1265
+ endif ()
1266
+ elseif ( ARMEABI_V7A )
1249
1267
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp" )
1250
1268
if ( NEON )
1251
1269
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" )
@@ -1254,6 +1272,7 @@ if( ARMEABI_V7A )
1254
1272
else ()
1255
1273
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" )
1256
1274
endif ()
1275
+
1257
1276
elseif ( ARMEABI_V6 )
1258
1277
set ( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) # vfp == vfpv2
1259
1278
elseif ( ARMEABI )
@@ -1330,6 +1349,10 @@ if( ARMEABI_V7A )
1330
1349
set ( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--fix-cortex-a8" )
1331
1350
endif ()
1332
1351
1352
+ if ( ARMEABI_V7A_HARD )
1353
+ set ( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-warn-mismatch -lm_hard" )
1354
+ endif ()
1355
+
1333
1356
if ( ANDROID_NO_UNDEFINED )
1334
1357
if ( MIPS )
1335
1358
# there is some sysroot-related problem in mips linker...
@@ -1351,7 +1374,7 @@ if( ANDROID_FUNCTION_LEVEL_LINKING )
1351
1374
endif ()
1352
1375
1353
1376
if ( ANDROID_COMPILER_VERSION VERSION_EQUAL "4.6" )
1354
- if ( ANDROID_GOLD_LINKER AND (CMAKE_HOST_UNIX OR ANDROID_NDK_RELEASE_NUM GREATER 8002 ) AND (ARMEABI OR ARMEABI_V7A OR X86 ) )
1377
+ 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 ) )
1355
1378
set ( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=gold" )
1356
1379
elseif ( ANDROID_NDK_RELEASE_NUM GREATER 8002 ) # after r8b
1357
1380
set ( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=bfd" )
@@ -1626,7 +1649,7 @@ endif()
1626
1649
1627
1650
1628
1651
# Variables controlling behavior or set by cmake toolchain:
1629
- # 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"
1652
+ # 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"
1630
1653
# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14,15,16,17,18,19,21 (depends on NDK version)
1631
1654
# ANDROID_STL : gnustl_static/gnustl_shared/stlport_static/stlport_shared/gabi++_static/gabi++_shared/system_re/system/none
1632
1655
# ANDROID_FORBID_SYGWIN : ON/OFF
@@ -1653,6 +1676,7 @@ endif()
1653
1676
# ARMEABI : TRUE for arm v6 and older devices
1654
1677
# ARMEABI_V6 : TRUE for arm v6
1655
1678
# ARMEABI_V7A : TRUE for arm v7a
1679
+ # ARMEABI_V7A_HARD : TRUE for arm v7a with hardfp
1656
1680
# ARM64_V8A : TRUE for arm64-v8a
1657
1681
# NEON : TRUE if NEON unit is enabled
1658
1682
# VFPV3 : TRUE if VFP version 3 is enabled
@@ -1663,7 +1687,7 @@ endif()
1663
1687
# BUILD_WITH_ANDROID_NDK : TRUE if NDK is used
1664
1688
# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used
1665
1689
# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform
1666
- # ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI
1690
+ # ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "armeabi-v7a-hard", " x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI
1667
1691
# ANDROID_NDK_RELEASE : from r5 to r10d; set only for NDK
1668
1692
# ANDROID_NDK_RELEASE_NUM : numeric ANDROID_NDK_RELEASE version (1000*major+minor)
1669
1693
# ANDROID_ARCH_NAME : "arm", "x86", "mips", "arm64", "x86_64", "mips64" depending on ANDROID_ABI
0 commit comments