e4e92bf2 | 2016-10-01 17:09:04 | Timothy Pearson |
Switch FFTS to linkotec branch for cross-arch support |
||
A lib/ffts/CMakeLists.txt A lib/ffts/README.md A lib/ffts/java/android/.classpath A lib/ffts/java/android/.project A lib/ffts/java/android/.settings/org.eclipse.jdt.core.prefs A lib/ffts/java/android/.settings/org.eclipse.ltk.core.refactoring.prefs A lib/ffts/java/android/AndroidManifest.xml A lib/ffts/java/android/ant.properties A lib/ffts/java/android/build.xml A lib/ffts/java/android/jni/Android.mk A lib/ffts/java/android/jni/Application.mk A lib/ffts/java/android/proguard-project.txt A lib/ffts/java/android/project.properties A lib/ffts/java/src/nz/ac/waikato/ffts/FFTS.java A lib/ffts/m4/ax_check_class.m4 A lib/ffts/m4/ax_check_java_plugin.m4 A lib/ffts/m4/ax_java_check_class.m4 A lib/ffts/m4/ax_prog_java.m4 A lib/ffts/m4/ax_prog_java_cc.m4 A lib/ffts/m4/ax_prog_java_works.m4 A lib/ffts/m4/ax_prog_javadoc.m4 A lib/ffts/m4/ax_prog_javah.m4 A lib/ffts/m4/ax_try_compile_java.m4 A lib/ffts/m4/ax_try_run_java.m4 A lib/ffts/src/arch/.gitignore A lib/ffts/src/arch/ChangeLog A lib/ffts/src/arch/LICENSE A lib/ffts/src/arch/Makefile.am A lib/ffts/src/arch/README A lib/ffts/src/arch/arm/.gitattributes A lib/ffts/src/arch/arm/.gitignore A lib/ffts/src/arch/arm/Makefile.am A lib/ffts/src/arch/arm/arm-codegen.c A lib/ffts/src/arch/arm/arm-codegen.h A lib/ffts/src/arch/arm/arm-dis.c A lib/ffts/src/arch/arm/arm-dis.h A lib/ffts/src/arch/arm/arm-vfp-codegen.h A lib/ffts/src/arch/arm/arm-wmmx.h A lib/ffts/src/arch/arm/cmp_macros.th A lib/ffts/src/arch/arm/dpi_macros.th A lib/ffts/src/arch/arm/dpiops.sh A lib/ffts/src/arch/arm/mov_macros.th A lib/ffts/src/arch/arm/tramp.c A lib/ffts/src/arch/arm/vfp_macros.th A lib/ffts/src/arch/arm/vfpm_macros.th A lib/ffts/src/arch/arm/vfpops.sh A lib/ffts/src/arch/arm64/.gitignore A lib/ffts/src/arch/arm64/Makefile.am A lib/ffts/src/arch/arm64/arm64-codegen.h A lib/ffts/src/arch/ia64/.gitignore A lib/ffts/src/arch/ia64/Makefile.am A lib/ffts/src/arch/ia64/codegen.c A lib/ffts/src/arch/ia64/ia64-codegen.h A lib/ffts/src/arch/mips/.gitignore A lib/ffts/src/arch/mips/Makefile.am A lib/ffts/src/arch/mips/mips-codegen.h A lib/ffts/src/arch/mips/test.c A lib/ffts/src/arch/ppc/.gitignore A lib/ffts/src/arch/ppc/Makefile.am A lib/ffts/src/arch/ppc/ppc-codegen.h A lib/ffts/src/arch/s390x/.gitignore A lib/ffts/src/arch/s390x/ChangeLog A lib/ffts/src/arch/s390x/Makefile.am A lib/ffts/src/arch/s390x/s390x-codegen.h A lib/ffts/src/arch/s390x/tramp.c A lib/ffts/src/arch/sparc/.gitignore A lib/ffts/src/arch/sparc/Makefile.am A lib/ffts/src/arch/sparc/sparc-codegen.h A lib/ffts/src/arch/sparc/test.c A lib/ffts/src/arch/sparc/tramp.c A lib/ffts/src/arch/x64/.gitignore A lib/ffts/src/arch/x64/Makefile.am A lib/ffts/src/arch/x64/x64-codegen.h A lib/ffts/src/arch/x86/.gitignore A lib/ffts/src/arch/x86/Makefile.am A lib/ffts/src/arch/x86/x86-codegen.h A lib/ffts/src/ffts_attributes.h A lib/ffts/src/ffts_dd.h A lib/ffts/src/ffts_internal.h A lib/ffts/src/ffts_transpose.c A lib/ffts/src/ffts_transpose.h A lib/ffts/src/ffts_trig.c A lib/ffts/src/ffts_trig.h A lib/ffts/src/neon_static.s A lib/ffts/src/sequitur.h M lib/ffts/Makefile.in M lib/ffts/aclocal.m4 M lib/ffts/config.h.in M lib/ffts/configure M lib/ffts/include/ffts.h M lib/ffts/java/Makefile.in M lib/ffts/java/jni/ffts_jni.c M lib/ffts/src/Makefile.am M lib/ffts/src/Makefile.in M lib/ffts/src/codegen.c M lib/ffts/src/codegen.h M lib/ffts/src/codegen_arm.h M lib/ffts/src/codegen_sse.h M lib/ffts/src/ffts.c M lib/ffts/src/ffts_nd.c M lib/ffts/src/ffts_nd.h M lib/ffts/src/ffts_real.c M lib/ffts/src/ffts_real.h M lib/ffts/src/ffts_real_nd.c M lib/ffts/src/ffts_real_nd.h M lib/ffts/src/ffts_static.c M lib/ffts/src/ffts_static.h M lib/ffts/src/macros-alpha.h M lib/ffts/src/macros-altivec.h M lib/ffts/src/macros-neon.h M lib/ffts/src/macros-sse.h M lib/ffts/src/macros.h M lib/ffts/src/neon.h M lib/ffts/src/neon.s M lib/ffts/src/patterns.h M lib/ffts/src/types.h M lib/ffts/src/vfp.h M lib/ffts/src/vfp.s M lib/ffts/tests/Makefile.in M lib/ffts/tests/test.c R lib/ffts/README R lib/ffts/src/ffts.h R lib/ffts/src/ffts_small.c R lib/ffts/src/ffts_small.h R lib/ffts/src/neon_float.h R lib/ffts/src/neon_static_f.s R lib/ffts/src/neon_static_i.s R lib/ffts/src/patterns.c R lib/ffts/src/sse.s |
||
diff --git a/lib/ffts/CMakeLists.txt b/lib/ffts/CMakeLists.txt new file mode 100644 index 0000000..2028c03 --- /dev/null +++ b/lib/ffts/CMakeLists.txt @@ -0,0 +1,462 @@ +cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) + +project(ffts C ASM) + +# TODO: to support AutoConfigure building, this should came from "template" file +set(FFTS_MAJOR 0) +set(FFTS_MINOR 9) +set(FFTS_MICRO 0) + +set(FFTS_VERSION "ffts-${FFTS_MAJOR}.${FFTS_MINOR}.${FFTS_MICRO}") + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +# default build type is Debug which means no optimization +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") +endif(NOT CMAKE_BUILD_TYPE) + +# common options +option(ENABLE_NEON + "Enables the use of NEON instructions." OFF +) + +option(ENABLE_VFP + "Enables the use of VFP instructions." OFF +) + +option(DISABLE_DYNAMIC_CODE + "Disables the use of dynamic machine code generation." OFF +) + +option(GENERATE_POSITION_INDEPENDENT_CODE + "Generate position independent code" OFF +) + +option(ENABLE_SHARED + "Enable building a shared library." OFF +) + +option(ENABLE_STATIC + "Enable building a static library." ON +) + +include(CheckCSourceCompiles) +include(CheckCSourceRuns) +include(CheckIncludeFile) + +# Ensure defined when building FFTS (as opposed to using it from +# another project). Used to export functions from Windows DLL. +add_definitions(-DFFTS_BUILD) + +# check existence of various headers +check_include_file(malloc.h HAVE_MALLOC_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stdlib.h HAVE_STDLIB_H) +check_include_file(string.h HAVE_STRING_H) +check_include_file(sys/mman.h HAVE_SYS_MMAN_H) +check_include_file(unistd.h HAVE_UNISTD_H) + +if(HAVE_MALLOC_H) + add_definitions(-DHAVE_MALLOC_H) +endif(HAVE_MALLOC_H) + +if(HAVE_STDINT_H) + add_definitions(-DHAVE_STDINT_H) +endif(HAVE_STDINT_H) + +if(HAVE_STDLIB_H) + add_definitions(-DHAVE_STDLIB_H) +endif(HAVE_STDLIB_H) + +if(HAVE_STRING_H) + add_definitions(-DHAVE_STRING_H) +endif(HAVE_STRING_H) + +if(HAVE_SYS_MMAN_H) + add_definitions(-DHAVE_SYS_MMAN_H) +endif(HAVE_SYS_MMAN_H) + +if(HAVE_UNISTD_H) + add_definitions(-DHAVE_UNISTD_H) +endif(HAVE_UNISTD_H) + +# backup flags +set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + +# Determinate if we are cross-compiling +if(NOT CMAKE_CROSSCOMPILING) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") + # Determinate ARM architecture + + # Try to execute quietly without messages + set(CMAKE_REQUIRED_QUIET 1) + + # The test for ARM architecture + set(TEST_SOURCE_CODE "int main() { return 0; }") + + # GCC documentation says "native" is only supported on Linux, but let's try + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=native") + check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_NATIVE_FLAG_SUPPORTED) + + if(NOT GCC_MARCH_NATIVE_FLAG_SUPPORTED) + # Fallback trying generic ARMv7 + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=armv7-a") + check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_ARMV7A_FLAG_SUPPORTED) + + if(NOT GCC_MARCH_ARMV7A_FLAG_SUPPORTED) + # Fallback trying generic ARMv6 + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -march=armv6") + check_c_source_runs("${TEST_SOURCE_CODE}" GCC_MARCH_ARMV6_FLAG_SUPPORTED) + + if(NOT GCC_MARCH_ARMV6_FLAG_SUPPORTED) + message(WARNING "FFTS failed to determinate ARM architecture") + set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) + else() + message("FFTS is build using 'march=armv6'") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv6") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6") + endif(NOT GCC_MARCH_ARMV6_FLAG_SUPPORTED) + else() + message("FFTS is build using 'march=armv7-a'") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=armv7-a") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a") + endif(NOT GCC_MARCH_ARMV7A_FLAG_SUPPORTED) + else() + message("FFTS is build using 'march=native'") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -march=native") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") + endif(NOT GCC_MARCH_NATIVE_FLAG_SUPPORTED) + + # Determinate what floating-point hardware (or hardware emulation) is available + set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + + # The test for ARM NEON support + set(TEST_SOURCE_CODE " + #include <arm_neon.h> + int main() + { + float32x4_t v; + float zeros[4] = {0.0f, 0.0f, 0.0f, 0.0f}; + v = vld1q_f32(zeros); + return 0; + }" + ) + + # Test running with -mfpu=neon and -mfloat-abi=hard + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=neon -mfloat-abi=hard") + check_c_source_runs("${TEST_SOURCE_CODE}" NEON_HARDFP_SUPPORTED) + + if(NOT NEON_HARDFP_SUPPORTED) + # Test running with -mfpu=neon and -mfloat-abi=softfp + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=neon -mfloat-abi=softfp") + check_c_source_runs("${TEST_SOURCE_CODE}" NEON_SOFTFP_SUPPORTED) + + if(NOT NEON_SOFTFP_SUPPORTED) + if(ENABLE_NEON) + message(FATAL_ERROR "FFTS cannot enable NEON on this platform") + endif(ENABLE_NEON) + else() + message("FFTS is using 'neon' FPU and 'softfp' float ABI") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=neon -mfloat-abi=softfp") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon -mfloat-abi=softfp") + set(ENABLE_NEON ON) + endif(NOT NEON_SOFTFP_SUPPORTED) + else() + message("FFTS is using 'neon' FPU and 'hard' float ABI") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=neon -mfloat-abi=hard") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon -mfloat-abi=hard") + set(ENABLE_NEON ON) + endif(NOT NEON_HARDFP_SUPPORTED) + + # Fallback using VFP if NEON is not supported + if(NOT NEON_HARDFP_SUPPORTED AND NOT NEON_SOFTFP_SUPPORTED) + # Test for ARM VFP support + set(TEST_SOURCE_CODE " + double sum(double a, double b) + { + return a + b; + } + int main() + { + double s1, s2, v1 = 1.0, v2 = 2.0, v3 = 1.0e-322; + s1 = sum(v1, v2); + s2 = sum(v3, v3); + return 0; + }" + ) + + # Test running with -mfpu=vfp + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfpu=vfp") + check_c_source_runs("${TEST_SOURCE_CODE}" VFP_SUPPORTED) + + if(NOT VFP_SUPPORTED) + # Fallback using emulation if VFP is not supported + if(ENABLE_VFP) + message(FATAL_ERROR "FFTS cannot enable VFP on this platform") + endif(ENABLE_VFP) + + message(WARNING "FFTS is using 'soft' FPU") + else() + message("FFTS is using 'vfp' FPU") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfpu=vfp") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfp") + set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) + set(ENABLE_VFP ON) + endif(NOT VFP_SUPPORTED) + + # Test running with -mfloat-abi=hard + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfloat-abi=hard") + + # Use the same test as before + check_c_source_runs("${TEST_SOURCE_CODE}" HARDFP_SUPPORTED) + + if(NOT HARDFP_SUPPORTED) + # Test running with -mfloat-abi=softfp + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -mfloat-abi=softfp") + check_c_source_runs("${TEST_SOURCE_CODE}" SOFTFP_SUPPORTED) + + if(NOT SOFTFP_SUPPORTED) + # Most likely development libraries are missing + message(WARNING "FFTS is using 'soft' float ABI") + else() + message("FFTS is using 'softfp' float ABI") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfloat-abi=softfp") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=softfp") + endif(NOT SOFTFP_SUPPORTED) + else() + message("FFTS is using 'hard' float ABI") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -mfloat-abi=hard") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=hard") + endif(NOT HARDFP_SUPPORTED) + endif(NOT NEON_HARDFP_SUPPORTED AND NOT NEON_SOFTFP_SUPPORTED) + else() + # enable SSE code generation + if(CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_SAVE} -msse") + endif(CMAKE_COMPILER_IS_GNUCC) + + # check if the platform has support for SSE intrinsics + check_include_file(xmmintrin.h HAVE_XMMINTRIN_H) + if(HAVE_XMMINTRIN_H) + add_definitions(-DHAVE_SSE) + set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) ** Diff limit reached (max: 250 lines) ** |