diff --git a/CMakeLists.txt b/CMakeLists.txt index 748f41250c9..c1fafce2043 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -453,8 +453,8 @@ if(NOT DISABLE_DYNAMIC_CODE) src/codegen_sse.h ) else() - message(WARNING "Dynamic code is only supported with x64, disabling dynamic code.") - set(DISABLE_DYNAMIC_CODE ON) + #message(WARNING "Dynamic code is only supported with x64, disabling dynamic code.") + #set(DISABLE_DYNAMIC_CODE ON) endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") endif(NOT DISABLE_DYNAMIC_CODE) diff --git a/build/android-armv7/build.sh b/build/android-armv7/build.sh new file mode 100644 index 00000000000..b607b3a6174 --- /dev/null +++ b/build/android-armv7/build.sh @@ -0,0 +1,28 @@ +#! /bin/bash + +if [ -z $NDK ]; then + echo "ERROR: \$NDK must be set to the path to the Android NDK." + exit 1 +fi + +echo Using NDK at $NDK. + +NDK_MAKE=$NDK/prebuilt/windows-x86_64/bin/make.exe + +cmake \ + -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_MAKE_PROGRAM=$NDK_MAKE \ + -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=armeabi-v7a \ + -DANDROID_ARM_MODE=arm \ + -DANDROID_ARM_NEON=TRUE \ + -DANDROID_PLATFORM=16 \ + -DANDROID_STL=c++_static \ + -DDISABLE_DYNAMIC_CODE=FALSE \ + -DENABLE_VFP=FALSE \ + -DENABLE_NEON=TRUE \ + -DENABLE_STATIC=TRUE \ + ../.. + +$NDK_MAKE ffts_static diff --git a/build/android-armv8/build.sh b/build/android-armv8/build.sh new file mode 100644 index 00000000000..3da128dabc9 --- /dev/null +++ b/build/android-armv8/build.sh @@ -0,0 +1,26 @@ +#! /bin/bash + +if [ -z $NDK ]; then + echo "ERROR: \$NDK must be set to the path to the Android NDK." + exit 1 +fi + +echo Using NDK at $NDK. + +NDK_MAKE=$NDK/prebuilt/windows-x86_64/bin/make.exe + +cmake \ + -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_MAKE_PROGRAM=$NDK_MAKE \ + -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=arm64-v8a \ + -DANDROID_PLATFORM=21 \ + -DANDROID_STL=c++_static \ + -DDISABLE_DYNAMIC_CODE=TRUE \ + -DENABLE_VFP=FALSE \ + -DENABLE_NEON=FALSE \ + -DENABLE_STATIC=TRUE \ + ../.. + +$NDK_MAKE ffts_static diff --git a/build/android-x64/build.sh b/build/android-x64/build.sh new file mode 100644 index 00000000000..634acbc4ead --- /dev/null +++ b/build/android-x64/build.sh @@ -0,0 +1,24 @@ +#! /bin/bash + +if [ -z $NDK ]; then + echo "ERROR: \$NDK must be set to the path to the Android NDK." + exit 1 +fi + +echo Using NDK at $NDK. + +NDK_MAKE=$NDK/prebuilt/windows-x86_64/bin/make.exe + +cmake \ + -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_MAKE_PROGRAM=$NDK_MAKE \ + -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=x86_64 \ + -DANDROID_PLATFORM=21 \ + -DANDROID_STL=c++_static \ + -DDISABLE_DYNAMIC_CODE=TRUE \ + -DENABLE_STATIC=TRUE \ + ../.. + +$NDK_MAKE ffts_static diff --git a/build/android-x86/build.sh b/build/android-x86/build.sh new file mode 100644 index 00000000000..c53bde19780 --- /dev/null +++ b/build/android-x86/build.sh @@ -0,0 +1,24 @@ +#! /bin/bash + +if [ -z $NDK ]; then + echo "ERROR: \$NDK must be set to the path to the Android NDK." + exit 1 +fi + +echo Using NDK at $NDK. + +NDK_MAKE=$NDK/prebuilt/windows-x86_64/bin/make.exe + +cmake \ + -G "Unix Makefiles" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_MAKE_PROGRAM=$NDK_MAKE \ + -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=x86 \ + -DANDROID_PLATFORM=21 \ + -DANDROID_STL=c++_static \ + -DDISABLE_DYNAMIC_CODE=TRUE \ + -DENABLE_STATIC=TRUE \ + ../.. + +$NDK_MAKE ffts_static diff --git a/src/ffts.c b/src/ffts.c index 35c5cad00db..e3bf84d4a6b 100644 --- a/src/ffts.c +++ b/src/ffts.c @@ -116,7 +116,11 @@ ffts_flush_instruction_cache(void *start, size_t length) #ifdef __APPLE__ sys_icache_invalidate(start, length); #elif __ANDROID__ +#if defined(__aarch64__) || defined(__i386__) || defined(__amd64__) + __builtin___clear_cache(start, (char*) start + length); +#else cacheflush((long) start, (long) start + length, 0); +#endif #elif __linux__ #if GCC_VERSION_AT_LEAST(4,3) __builtin___clear_cache(start, (char*) start + length);