aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.md41
-rw-r--r--CMakeLists.txt24
-rw-r--r--cmake/customconfig.clang-default.cmake31
-rw-r--r--cmake/customconfig.clang-x86_32.cmake30
-rw-r--r--cmake/customconfig.gcc-default.cmake14
-rw-r--r--cmake/customconfig.gcc-x86_32.cmake18
-rw-r--r--cmake/glibc-compat-symbols.h60
-rw-r--r--cmake/toolchain.android.cmake213
-rw-r--r--cmake/toolchain.gcc-aarch64.cmake14
-rw-r--r--cmake/toolchain.gcc-armv6hf.cmake14
-rw-r--r--cmake/toolchain.windows.cmake30
l---------scripts/arm-linux-gnueabi1
l---------scripts/arm-linux-gnueabihf1
-rwxr-xr-xscripts/make.gcc-armv6-cross.sh13
-rwxr-xr-xscripts/make.gcc-armv6hf-cross.sh11
l---------scripts/sys-arm-linux-gnueabi/bin/gcc1
l---------scripts/sys-arm-linux-gnueabi/bin/ld1
l---------scripts/sys-arm-linux-gnueabi/bin/objdump1
l---------scripts/sys-arm-linux-gnueabi/bin/strip1
l---------scripts/sys-arm-linux-gnueabihf/bin/gcc1
l---------scripts/sys-arm-linux-gnueabihf/bin/ld1
l---------scripts/sys-arm-linux-gnueabihf/bin/objdump1
l---------scripts/sys-arm-linux-gnueabihf/bin/strip1
l---------scripts/xtools-armhf-linux-gnueabi/bin/gcc1
l---------scripts/xtools-armhf-linux-gnueabi/bin/ld1
l---------scripts/xtools-armhf-linux-gnueabi/bin/objdump1
l---------scripts/xtools-armhf-linux-gnueabi/bin/strip1
l---------scripts/xtools-armsf-linux-gnueabi/bin/gcc1
l---------scripts/xtools-armsf-linux-gnueabi/bin/ld1
l---------scripts/xtools-armsf-linux-gnueabi/bin/objdump1
l---------scripts/xtools-armsf-linux-gnueabi/bin/strip1
31 files changed, 523 insertions, 8 deletions
diff --git a/Android.md b/Android.md
new file mode 100644
index 00000000..115d5300
--- /dev/null
+++ b/Android.md
@@ -0,0 +1,41 @@
+# How To Rebuild OpenAL-soft for Android
+
+This was completed on a Debian Squeeze 6 system.
+This produces an ARMv6 libopenal.so file ready to be used with Jogamp's JOAL on Android devices.
+
+## Prequisites
+
+Here is the necessary tools needed
+
+* git
+* latest Android NDK (http://dl.google.com/android/ndk/android-ndk-r8d-linux-x86.tar.bz2)
+* CMake (2.8)
+
+We'll suppose the NDK is installed in ~/android-ndk-r8d/:
+
+```bash
+export ANDROID_NDK=~/android-ndk-r8d/
+```
+
+
+## Clone the OpenAL repository
+
+```bash
+git clone git://repo.or.cz/openal-soft.git
+ or
+git clone git://jogamp.org/srv/scm/openal-soft.git
+```
+## Add the toolchain.android.cmake
+
+Included in ```git://jogamp.org/srv/scm/openal-soft.git```
+at ```cmake/toolchain.android.cmake```.
+
+## Build
+
+```bash
+cd build
+cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain.android.cmake -DANDROID_API_LEVEL=9
+make
+```
+
+The result should be available in the "build" directory.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6fea142a..984ec821 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -109,6 +109,9 @@ SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}")
SET(EXPORT_DECL "")
SET(ALIGN_DECL "")
+IF(OPENAL_CUSTOM_CONFIG)
+ include(${OPENAL_CUSTOM_CONFIG})
+ENDIF()
CHECK_TYPE_SIZE("long" SIZEOF_LONG)
CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
@@ -646,15 +649,20 @@ IF(NOT HAVE_WINDOWS_H)
CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
- IF(HAVE_PTHREAD)
- SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -pthread")
- SET(C_FLAGS ${C_FLAGS} -pthread)
- SET(LINKER_FLAGS ${LINKER_FLAGS} -pthread)
- ENDIF()
+ IF(NOT HAVE_ANDROID_H)
+ IF(HAVE_PTHREAD)
+ SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -pthread")
+ SET(C_FLAGS ${C_FLAGS} -pthread)
+ SET(LINKER_FLAGS ${LINKER_FLAGS} -pthread)
+ ENDIF()
- CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
- IF(HAVE_LIBPTHREAD)
- SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
+ CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
+ IF(HAVE_LIBPTHREAD)
+ SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
+ ENDIF()
+ ELSE()
+ # FIXME: Android has pthread in it's bionic libc!
+ CHECK_LIBRARY_EXISTS(c pthread_create "" HAVE_LIBPTHREAD)
ENDIF()
CHECK_SYMBOL_EXISTS(pthread_setschedparam pthread.h HAVE_PTHREAD_SETSCHEDPARAM)
diff --git a/cmake/customconfig.clang-default.cmake b/cmake/customconfig.clang-default.cmake
new file mode 100644
index 00000000..bd6cada8
--- /dev/null
+++ b/cmake/customconfig.clang-default.cmake
@@ -0,0 +1,31 @@
+# For normal clang compilation
+
+set(CMAKE_C_FLAGS "-include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+set(CMAKE_CXX_FLAGS "-include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+
+if(APPLE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.5")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5")
+endif()
+
+# inject additional architectures for fat-binary (macosx)
+# CMAKE_EXTRA_ARCHS is set from JOAL's ant build.xml
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_EXTRA_ARCHS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_EXTRA_ARCHS}")
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
+
+message(STATUS "CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
+message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
+message(STATUS "CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}")
+message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
+
+# set(LINKER_FLAGS "-static-libgcc")
+
+message(STATUS "LINKER_FLAGS: ${LINKER_FLAGS}")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/customconfig.clang-x86_32.cmake b/cmake/customconfig.clang-x86_32.cmake
new file mode 100644
index 00000000..a33e18b0
--- /dev/null
+++ b/cmake/customconfig.clang-x86_32.cmake
@@ -0,0 +1,30 @@
+# For multiarch clang crosscompile, i.e. x86_32 target on x86_64 host
+
+set(CMAKE_SYSTEM_PROCESSOR "x86")
+
+link_directories("/usr/lib32")
+
+set(CMAKE_C_FLAGS "-m32 -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+set(CMAKE_CXX_FLAGS "-m32 -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+
+if(APPLE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.5")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5")
+endif()
+
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")
+
+message(STATUS "CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
+message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
+message(STATUS "CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}")
+message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
+
+# set(LINKER_FLAGS "-m32 -static-libgcc")
+
+message(STATUS "LINKER_FLAGS: ${LINKER_FLAGS}")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/customconfig.gcc-default.cmake b/cmake/customconfig.gcc-default.cmake
new file mode 100644
index 00000000..43294ab0
--- /dev/null
+++ b/cmake/customconfig.gcc-default.cmake
@@ -0,0 +1,14 @@
+# For normal gcc compilation, but use static-libgcc
+
+set(CMAKE_C_FLAGS "-include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+set(CMAKE_CXX_FLAGS "-include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+
+set(LINKER_FLAGS "-static-libgcc")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/customconfig.gcc-x86_32.cmake b/cmake/customconfig.gcc-x86_32.cmake
new file mode 100644
index 00000000..502378ab
--- /dev/null
+++ b/cmake/customconfig.gcc-x86_32.cmake
@@ -0,0 +1,18 @@
+# For multiarch gcc crosscompile, i.e. x86_32 target on x86_64 host
+
+set(CMAKE_SYSTEM_PROCESSOR "x86")
+
+link_directories("/usr/lib32")
+
+set(CMAKE_C_FLAGS "-m32 -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+set(CMAKE_CXX_FLAGS "-m32 -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+
+set(LINKER_FLAGS "-m32 -static-libgcc")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/glibc-compat-symbols.h b/cmake/glibc-compat-symbols.h
new file mode 100644
index 00000000..d8d0d172
--- /dev/null
+++ b/cmake/glibc-compat-symbols.h
@@ -0,0 +1,60 @@
+#ifndef __GLIBC_COMPAT_SYMBOLS_H__
+#define __GLIBC_COMPAT_SYMBOLS_H__ 1
+
+/**
+ *
+ * Note: Patching a specific glibc symbol version is only required if *not* statically linking glibc,
+ * which should be preferred.
+ *
+ * Note: JogAmp's minimum GLIBC is 2.4 due to '__stack_chk_fail' (stack overflow checking)
+ *
+ * GLIBC 2.4 - March 2006 - Standard for LSB 4.0, Used in SLES 10
+ *
+ * We could add compile/link option '-fno-stack-protector', however stack protection seems reasonable
+ * and a pre 2006 distribution a bit too 'far fetched' for our multimedia bindings anyway.
+ *
+ * Check build-in macro definitions via 'gcc -dM -E - < /dev/null'
+ */
+#if defined(__linux__) /* Actually we like to test whether we link against GLIBC .. */
+ #if defined(__GNUC__)
+ #if defined(__aarch64__)
+ /* glibc 2.17 is the first glibc version that support aarch64
+ however memcpy is not versioned for aarch64 */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+ #elif defined(__arm__)
+ /** On recent toolchain memcpy is no more versioned for arm
+ #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
+ */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+ #elif defined(__amd64__)
+ #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.2.5");
+ #else
+ #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.0");
+ #endif /*__amd64__*/
+ #elif defined(__clang__)
+ #if defined(__aarch64__)
+ /* glibc 2.17 is the first glibc version that support aarch64
+ however memcpy is not versioned for aarch64 */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+ #elif defined(__arm__)
+ /** On recent toolchain memcpy is no more versioned for arm
+ #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
+ */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+ #elif defined(__amd64__)
+ #define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.2.5");
+ #else
+ #define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.0");
+ #endif /*__amd64__*/
+ #else
+ #warning GLIBC_COMPAT_SYMBOL not supported with current compiler on GNU/Linux
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+ #endif
+#else
+ #warning GLIBC_COMPAT_SYMBOL not supported with target OS
+ #define GLIBC_COMPAT_SYMBOL(FFF)
+#endif
+
+GLIBC_COMPAT_SYMBOL(memcpy)
+
+#endif /*__GLIBC_COMPAT_SYMBOLS_H__*/
diff --git a/cmake/toolchain.android.cmake b/cmake/toolchain.android.cmake
new file mode 100644
index 00000000..37474a7e
--- /dev/null
+++ b/cmake/toolchain.android.cmake
@@ -0,0 +1,213 @@
+# Adapted from http://code.google.com/p/android-cmake/
+
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_VERSION 1)
+
+if(APPLE)
+ set(HOST_APPLE true)
+elseif(UNIX)
+ set(HOST_UNIX true)
+endif()
+
+set(APPLE false)
+set(UNIX true)
+
+set(ANDROID_NDK_DEFAULT_SEARCH_PATH /opt/android-ndk)
+set(ANDROID_NDK_SUPPORTED_VERSIONS -r8d -r8 -r7 -r6 -r5c -r5b -r5 "")
+set(ANDROID_NDK_TOOLCHAIN_DEFAULT_SEARCH_PATH /opt/android-toolchain)
+set(TOOL_OS_SUFFIX "")
+
+if(NOT DEFINED ANDROID_NDK)
+ set(ANDROID_NDK "$ENV{ANDROID_NDK}")
+endif()
+
+if(NOT DEFINED ANDROID_NDK_TOOLCHAIN_ROOT)
+ set(ANDROID_NDK_TOOLCHAIN_ROOT $ENV{ANDROID_NDK_TOOLCHAIN_ROOT})
+endif()
+
+if(NOT EXISTS "${ANDROID_NDK}")
+ foreach(ndk_version ${ANDROID_NDK_SUPPORTED_VERSIONS})
+ if(EXISTS ${ANDROID_NDK_DEFAULT_SEARCH_PATH}${ndk_version})
+ set(ANDROID_NDK "${ANDROID_NDK_DEFAULT_SEARCH_PATH}${ndk_version}")
+ message(STATUS "Using default path for android NDK ${ANDROID_NDK}")
+ message(STATUS " If you prefer to use a different location, please define the variable: ANDROID_NDK")
+ break()
+ endif()
+ endforeach()
+endif()
+
+if(EXISTS "${ANDROID_NDK}")
+ if(NOT DEFINED ANDROID_TOOLCHAIN_SYSTEM)
+ if(APPLE)
+ set(ANDROID_TOOLCHAIN_SYSTEM "darwin-x86")
+ elseif(WIN32)
+ set(ANDROID_TOOLCHAIN_SYSTEM "windows")
+ set(TOOL_OS_SUFFIX ".exe")
+ elseif(UNIX)
+ set(ANDROID_TOOLCHAIN_SYSTEM "linux-x86")
+ else()
+ message(FATAL_ERROR "Your platform is not supported")
+ endif()
+ endif()
+
+ if(NOT ANDROID_API_LEVEL GREATER 2)
+ if(NDK_CPU_ARM64)
+ set(ANDROID_API_LEVEL 21)
+ elseif(NDK_CPU_X86)
+ set(ANDROID_API_LEVEL 9)
+ else()
+ set(ANDROID_API_LEVEL 5)
+ endif()
+ message(STATUS "Using default android API level android-${ANDROID_API_LEVEL}")
+ message(STATUS " If you prefer to use a different API level, please define the variable: ANDROID_API_LEVEL")
+ endif()
+
+ if (NDK_CPU_X86)
+ set(ANDROID_TOOLCHAIN_PREFIX "i686-android-linux")
+ set(ANDROID_TOOLCHAIN_NAME "x86")
+ set(ANDROID_TOOLCHAIN_PLATFORM_NAME "x86")
+ elseif(NDK_CPU_ARM64)
+ set(ANDROID_TOOLCHAIN_PREFIX "aarch64-linux-android")
+ set(ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_PREFIX}")
+ set(ANDROID_TOOLCHAIN_PLATFORM_NAME "arm64")
+ else()
+ set(ANDROID_TOOLCHAIN_PREFIX "arm-linux-androideabi")
+ set(ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_PREFIX}")
+ set(ANDROID_TOOLCHAIN_PLATFORM_NAME "arm")
+ endif()
+
+ if (NOT DEFINED ANDROID_TOOLCHAIN_VERSION)
+ set(SUPPORTED_TOOLCHAIN_VERSIONS 4.4.0 4.4.3 4.6.0 4.6.1 4.6.2 4.6.3 4.7 4.8 4.9)
+ foreach(gcc_version ${SUPPORTED_TOOLCHAIN_VERSIONS})
+ if (EXISTS "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}-${gcc_version}")
+ set(ANDROID_TOOLCHAIN_VERSION ${gcc_version})
+ endif()
+ endforeach()
+ if(NOT DEFINED ANDROID_TOOLCHAIN_VERSION)
+ message(FATAL_ERROR "Unable to find toolchain")
+ else()
+ message(STATUS "Using auto-detected toolchain ${ANDROID_TOOLCHAIN_NAME}-${ANDROID_TOOLCHAIN_VERSION}")
+ endif()
+ endif()
+ if (EXISTS "${ANDROID_NDK}/toolchains/clang-android-${ANDROID_TOOLCHAIN_VERSION}")
+ set (ANDROID_TOOLCHAIN_NAME "clang-android")
+ message(STATUS "Found clang toolchain ${ANDROID_TOOLCHAIN_NAME}-${ANDROID_TOOLCHAIN_VERSION}")
+ endif()
+
+ set(ANDROID_NDK_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_API_LEVEL}/arch-${ANDROID_TOOLCHAIN_PLATFORM_NAME}")
+ set(ANDROID_NDK_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}-${ANDROID_TOOLCHAIN_VERSION}/prebuilt/${ANDROID_TOOLCHAIN_SYSTEM}")
+
+endif()
+
+set(CMAKE_C_COMPILER "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" FORCE)
+set(CMAKE_CXX_COMPILER "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" FORCE)
+set(CMAKE_AR "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" FORCE)
+set(CMAKE_LINKER "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" FORCE)
+set(CMAKE_NM "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" FORCE)
+set(CMAKE_OBJCOPY "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" FORCE)
+set(CMAKE_OBJDUMP "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" FORCE)
+set(CMAKE_STRIP "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" FORCE)
+set(CMAKE_RANLIB "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_PREFIX}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" FORCE)
+
+if(NDK_CPU_X86)
+ set(ANDROID_NDK_CPU_NAME "x86")
+ set(CMAKE_SYSTEM_PROCESSOR "x86")
+elseif(NDK_CPU_ARM64)
+ set(NDK_CPU_ARM true)
+ set(ANDROID_NDK_CPU_NAME "arm64-v8a")
+ set(NDK_CPU_ARM_NEON false)
+ set(CMAKE_SYSTEM_PROCESSOR "armv8-a")
+elseif(NDK_CPU_ARM_V7A)
+ set(NDK_CPU_ARM_NEON false)
+ set(NDK_CPU_ARM_VFPV3 false)
+ set(NDK_CPU_ARM true)
+ set(ANDROID_NDK_CPU_NAME "armeabi-v7a")
+ set(CMAKE_SYSTEM_PROCESSOR "armv7-a")
+else()
+ set(NDK_CPU_ARM true)
+ set(ANDROID_NDK_CPU_NAME "armeabi")
+ set(NDK_CPU_ARM_NEON false)
+ set(CMAKE_SYSTEM_PROCESSOR "armv5te")
+endif()
+
+set(CMAKE_FIND_ROOT_PATH "${ANDROID_NDK_TOOLCHAIN_ROOT}/bin" "${ANDROID_NDK_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_PREFIX}" "${ANDROID_NDK_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share")
+
+set(STL_PATH "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_TOOLCHAIN_VERSION}")
+set(STL_LIBRARIES_PATH "${STL_PATH}/libs/${ANDROID_NDK_CPU_NAME}")
+include_directories(SYSTEM "${STL_PATH}/include" "${STL_LIBRARIES_PATH}/include")
+link_directories("${ANDROID_NDK_SYSROOT}/usr/lib")
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+set(CMAKE_C_FLAGS "-fPIC -DANDROID -Wno-psabi -fsigned-char -I${ANDROID_NDK_SYSROOT}/usr/include")
+set(CMAKE_CXX_FLAGS "-fPIC -DANDROID -Wno-psabi -fsigned-char -I${ANDROID_NDK_SYSROOT}/usr/include")
+
+set(FORCE_ARM OFF CACHE BOOL "Use 32-bit ARM instructions instead of Thumb-1")
+if(NDK_CPU_X86)
+elseif(NDK_CPU_ARM64)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a -std=c99")
+elseif(NOT FORCE_ARM)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mthumb")
+else()
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -marm")
+endif()
+
+set(CMAKE_C_FLAGS "--sysroot=${ANDROID_NDK_SYSROOT} ${CMAKE_C_FLAGS}")
+
+include(CMakeForceCompiler)
+CMAKE_FORCE_C_COMPILER("${CMAKE_C_COMPILER}" GNU)
+CMAKE_FORCE_CXX_COMPILER("${CMAKE_CXX_COMPILER}" GNU)
+
+if(NDK_CPU_ARM_V7A)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mfloat-abi=softfp")
+ if(NDK_CPU_ARM_NEON)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon")
+ elseif(NDK_CPU_ARM_VFPV3)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=vfpv3")
+ endif()
+elseif(NDK_CPU_ARM64)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mabi=lp64 -mlittle-endian -march=armv8-a -std=c99")
+endif()
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+
+message(STATUS "CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
+message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
+message(STATUS "CMAKE_C_FLAGS : ${CMAKE_C_FLAGS}")
+message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
+message(STATUS "NDK_CPU_ARM: ${NDK_CPU_ARM}")
+message(STATUS "NDK_CPU_ARM64: ${NDK_CPU_ARM64}")
+
+set(LINKER_FLAGS "-L\"${STL_LIBRARIES_PATH}\" -L\"${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_CPU_NAME}\"")
+
+message(STATUS "ARM32_LINKER_OPTS: ${ARM32_LINKER_OPTS}")
+message(STATUS "ARM64_LINKER_OPTS: ${ARM64_LINKER_OPTS}")
+if(NDK_CPU_ARM64)
+ message(STATUS "XXXXXXXXXX Adding ARM64_LINKER_OPTS: ${ARM64_LINKER_OPTS}")
+ set(LINKER_FLAGS "${ARM64_LINKER_OPTS} ${LINKER_FLAGS}")
+elseif(NDK_CPU_ARM OR NDK_CPU_ARM_V7A)
+ # for an unknown reason, passing '-Wl,--fix-cortex-a8' to LINKER_FLAGS directly here
+ # causes its usage for 'try_compile' even though 'NDK_CPU_ARM64' is 'ON' !
+ message(STATUS "XXXXXXXXXX Adding ARM32_LINKER_OPTS: ${ARM32_LINKER_OPTS}")
+ # set(LINKER_FLAGS "-Wl,--fix-cortex-a8 ${LINKER_FLAGS}")
+ set(LINKER_FLAGS "${ARM32_LINKER_OPTS} ${LINKER_FLAGS}")
+endif()
+
+message(STATUS "LINKER_FLAGS: ${LINKER_FLAGS}")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "shared linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "module linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "exe linker flags" FORCE)
+
+message(STATUS "CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}")
+message(STATUS "CMAKE_MODULE_LINKER_FLAGS: ${CMAKE_MODULE_LINKER_FLAGS}")
+message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
+message(STATUS "CMAKE_STATIC_LINKER_FLAGS: ${CMAKE_STATIC_LINKER_FLAGS}")
+
+set(ANDROID true)
+set(BUILD_ANDROID true)
+
+MARK_AS_ADVANCED(FORCE_ARM NO_UNDEFINED)
diff --git a/cmake/toolchain.gcc-aarch64.cmake b/cmake/toolchain.gcc-aarch64.cmake
new file mode 100644
index 00000000..44b9d47b
--- /dev/null
+++ b/cmake/toolchain.gcc-aarch64.cmake
@@ -0,0 +1,14 @@
+# For normal gcc compilation, but use static-libgcc
+
+set(CMAKE_C_FLAGS "-fpic -march=armv8-a -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h -I/usr/include")
+set(CMAKE_CXX_FLAGS "-fpic -march=armv8-a -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h -I/usr/include")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+
+set(LINKER_FLAGS "-fpic -march=armv8-a -static-libgcc")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/toolchain.gcc-armv6hf.cmake b/cmake/toolchain.gcc-armv6hf.cmake
new file mode 100644
index 00000000..7648aa4d
--- /dev/null
+++ b/cmake/toolchain.gcc-armv6hf.cmake
@@ -0,0 +1,14 @@
+# For normal gcc compilation, but use static-libgcc
+
+set(CMAKE_C_FLAGS "-fpic -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h -I/usr/include")
+set(CMAKE_CXX_FLAGS "-fpic -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm -include ${PROJECT_SOURCE_DIR}/cmake/glibc-compat-symbols.h -I/usr/include")
+
+set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c++ flags")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
+
+set(LINKER_FLAGS "-fpic -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm -static-libgcc")
+
+set(CMAKE_SHARED_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_MODULE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+set(CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS}" CACHE STRING "linker flags" FORCE)
+
diff --git a/cmake/toolchain.windows.cmake b/cmake/toolchain.windows.cmake
new file mode 100644
index 00000000..4a4f2718
--- /dev/null
+++ b/cmake/toolchain.windows.cmake
@@ -0,0 +1,30 @@
+# Cross-compiling requires CMake 2.6 or newer. To use it from build/, call it
+# like this:
+# cmake .. -DCMAKE_TOOLCHAIN_FILE=../XCompile.txt -DHOST=i686-pc-mingw32
+# Where 'i686-pc-mingw32' is the host prefix for your cross-compiler. If you
+# already have a toolchain file setup, you may use that instead of this file.
+
+# the name of the target operating system
+SET(CMAKE_SYSTEM_NAME Windows)
+
+# which compilers to use for C and C++
+SET(CMAKE_C_COMPILER "gcc.exe")
+SET(CMAKE_CXX_COMPILER "g++.exe")
+
+# here is the target environment located
+#SET(CMAKE_FIND_ROOT_PATH "/usr/${HOST}")
+
+# here is where stuff gets installed to
+#SET(CMAKE_INSTALL_PREFIX "${CMAKE_FIND_ROOT_PATH}/usr" CACHE STRING "Install path prefix, prepended onto install directories." FORCE)
+
+# adjust the default behaviour of the FIND_XXX() commands:
+# search headers and libraries in the target environment, search
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# set env vars so that pkg-config will look in the appropriate directory for
+# .pc files (as there seems to be no way to force using ${HOST}-pkg-config)
+set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
+set(ENV{PKG_CONFIG_PATH} "")
diff --git a/scripts/arm-linux-gnueabi b/scripts/arm-linux-gnueabi
new file mode 120000
index 00000000..8b9c9e18
--- /dev/null
+++ b/scripts/arm-linux-gnueabi
@@ -0,0 +1 @@
+xtools-armsf-linux-gnueabi \ No newline at end of file
diff --git a/scripts/arm-linux-gnueabihf b/scripts/arm-linux-gnueabihf
new file mode 120000
index 00000000..cb71826d
--- /dev/null
+++ b/scripts/arm-linux-gnueabihf
@@ -0,0 +1 @@
+xtools-armhf-linux-gnueabi \ No newline at end of file
diff --git a/scripts/make.gcc-armv6-cross.sh b/scripts/make.gcc-armv6-cross.sh
new file mode 100755
index 00000000..2eaa1cdf
--- /dev/null
+++ b/scripts/make.gcc-armv6-cross.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+SDIR=`dirname $0`
+CDIR=$SDIR/../cmake
+
+PATH=$SDIR/arm-linux-gnueabi/bin:$PATH
+export PATH
+
+which gcc
+
+cmake .. -DCMAKE_TOOLCHAIN_FILE=$CDIR/toolchain.gcc-armv6.cmake
+make
+
diff --git a/scripts/make.gcc-armv6hf-cross.sh b/scripts/make.gcc-armv6hf-cross.sh
new file mode 100755
index 00000000..406e5241
--- /dev/null
+++ b/scripts/make.gcc-armv6hf-cross.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+SDIR=`dirname $0`
+CDIR=$SDIR/../cmake
+
+PATH=$SDIR/arm-linux-gnueabihf/bin:$PATH
+export PATH
+
+cmake .. -DCMAKE_TOOLCHAIN_FILE=$CDIR/toolchain.gcc-armv6hf.cmake
+make
+
diff --git a/scripts/sys-arm-linux-gnueabi/bin/gcc b/scripts/sys-arm-linux-gnueabi/bin/gcc
new file mode 120000
index 00000000..edeaa99b
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabi/bin/gcc
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabi-gcc \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabi/bin/ld b/scripts/sys-arm-linux-gnueabi/bin/ld
new file mode 120000
index 00000000..68f4fae2
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabi/bin/ld
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabi-ld \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabi/bin/objdump b/scripts/sys-arm-linux-gnueabi/bin/objdump
new file mode 120000
index 00000000..a48d9ee9
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabi/bin/objdump
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabi-objdump \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabi/bin/strip b/scripts/sys-arm-linux-gnueabi/bin/strip
new file mode 120000
index 00000000..8dab56bf
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabi/bin/strip
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabi-strip \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabihf/bin/gcc b/scripts/sys-arm-linux-gnueabihf/bin/gcc
new file mode 120000
index 00000000..dca59c0f
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabihf/bin/gcc
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabihf-gcc \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabihf/bin/ld b/scripts/sys-arm-linux-gnueabihf/bin/ld
new file mode 120000
index 00000000..bce9f7fb
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabihf/bin/ld
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabihf-ld \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabihf/bin/objdump b/scripts/sys-arm-linux-gnueabihf/bin/objdump
new file mode 120000
index 00000000..ded739ce
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabihf/bin/objdump
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabihf-objdump \ No newline at end of file
diff --git a/scripts/sys-arm-linux-gnueabihf/bin/strip b/scripts/sys-arm-linux-gnueabihf/bin/strip
new file mode 120000
index 00000000..c941465e
--- /dev/null
+++ b/scripts/sys-arm-linux-gnueabihf/bin/strip
@@ -0,0 +1 @@
+/usr/bin/arm-linux-gnueabihf-strip \ No newline at end of file
diff --git a/scripts/xtools-armhf-linux-gnueabi/bin/gcc b/scripts/xtools-armhf-linux-gnueabi/bin/gcc
new file mode 120000
index 00000000..ad74056d
--- /dev/null
+++ b/scripts/xtools-armhf-linux-gnueabi/bin/gcc
@@ -0,0 +1 @@
+/usr/local/x-tools/armhf-unknown-linux-gnueabi/bin/armhf-unknown-linux-gnueabi-gcc \ No newline at end of file
diff --git a/scripts/xtools-armhf-linux-gnueabi/bin/ld b/scripts/xtools-armhf-linux-gnueabi/bin/ld
new file mode 120000
index 00000000..6d1bd138
--- /dev/null
+++ b/scripts/xtools-armhf-linux-gnueabi/bin/ld
@@ -0,0 +1 @@
+/usr/local/x-tools/armhf-unknown-linux-gnueabi/bin/armhf-unknown-linux-gnueabi-ld \ No newline at end of file
diff --git a/scripts/xtools-armhf-linux-gnueabi/bin/objdump b/scripts/xtools-armhf-linux-gnueabi/bin/objdump
new file mode 120000
index 00000000..9502840a
--- /dev/null
+++ b/scripts/xtools-armhf-linux-gnueabi/bin/objdump
@@ -0,0 +1 @@
+/usr/local/x-tools/armhf-unknown-linux-gnueabi/bin/armhf-unknown-linux-gnueabi-objdump \ No newline at end of file
diff --git a/scripts/xtools-armhf-linux-gnueabi/bin/strip b/scripts/xtools-armhf-linux-gnueabi/bin/strip
new file mode 120000
index 00000000..a4ce5087
--- /dev/null
+++ b/scripts/xtools-armhf-linux-gnueabi/bin/strip
@@ -0,0 +1 @@
+/usr/local/x-tools/armhf-unknown-linux-gnueabi/bin/armhf-unknown-linux-gnueabi-strip \ No newline at end of file
diff --git a/scripts/xtools-armsf-linux-gnueabi/bin/gcc b/scripts/xtools-armsf-linux-gnueabi/bin/gcc
new file mode 120000
index 00000000..171bfb69
--- /dev/null
+++ b/scripts/xtools-armsf-linux-gnueabi/bin/gcc
@@ -0,0 +1 @@
+/usr/local/x-tools/armsf-unknown-linux-gnueabi/bin/armsf-unknown-linux-gnueabi-gcc \ No newline at end of file
diff --git a/scripts/xtools-armsf-linux-gnueabi/bin/ld b/scripts/xtools-armsf-linux-gnueabi/bin/ld
new file mode 120000
index 00000000..f10f5b85
--- /dev/null
+++ b/scripts/xtools-armsf-linux-gnueabi/bin/ld
@@ -0,0 +1 @@
+/usr/local/x-tools/armsf-unknown-linux-gnueabi/bin/armsf-unknown-linux-gnueabi-ld \ No newline at end of file
diff --git a/scripts/xtools-armsf-linux-gnueabi/bin/objdump b/scripts/xtools-armsf-linux-gnueabi/bin/objdump
new file mode 120000
index 00000000..8e28b950
--- /dev/null
+++ b/scripts/xtools-armsf-linux-gnueabi/bin/objdump
@@ -0,0 +1 @@
+/usr/local/x-tools/armsf-unknown-linux-gnueabi/bin/armsf-unknown-linux-gnueabi-objdump \ No newline at end of file
diff --git a/scripts/xtools-armsf-linux-gnueabi/bin/strip b/scripts/xtools-armsf-linux-gnueabi/bin/strip
new file mode 120000
index 00000000..1e5fe910
--- /dev/null
+++ b/scripts/xtools-armsf-linux-gnueabi/bin/strip
@@ -0,0 +1 @@
+/usr/local/x-tools/armsf-unknown-linux-gnueabi/bin/armsf-unknown-linux-gnueabi-strip \ No newline at end of file