From d11679a06e6a992216148fd2ce1730c9912c8564 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 19 Mar 2013 21:53:09 -0500 Subject: [PATCH 01/53] Android mega commit of trash. --- Source/Android/.classpath | 8 + Source/Android/.gitignore | 7 + Source/Android/.project | 33 + .../.settings/org.eclipse.jdt.core.prefs | 4 + Source/Android/AndroidManifest.xml | 29 + Source/Android/android.toolchain.cmake | 1125 +++++++++++++++++ Source/Android/assets/ButtonA.png | Bin 0 -> 5178 bytes Source/Android/assets/ButtonB.png | Bin 0 -> 4971 bytes Source/Android/build.xml | 92 ++ Source/Android/custom_rules.xml | 16 + Source/Android/jni/Android.mk | 189 +++ Source/Android/jni/Application.mk | 4 + Source/Android/project.properties | 14 + Source/Android/res/drawable-hdpi/launcher.png | Bin 0 -> 14225 bytes Source/Android/res/drawable-mdpi/launcher.png | Bin 0 -> 8634 bytes .../Android/res/drawable-xhdpi/launcher.png | Bin 0 -> 23020 bytes .../Android/res/drawable-xxhdpi/launcher.png | Bin 0 -> 82300 bytes Source/Android/res/layout/main.xml | 26 + Source/Android/res/values/strings.xml | 6 + .../src/org/dolphinemu/dolphinemu/Button.java | 33 + .../dolphinemu/dolphinemu/ButtonManager.java | 43 + .../dolphinemu/DolphinEmulator.java | 124 ++ .../dolphinemu/FileArrayAdapter.java | 53 + .../dolphinemu/NativeGLSurfaceView.java | 61 + .../dolphinemu/dolphinemu/NativeListView.java | 94 ++ .../dolphinemu/dolphinemu/NativeRenderer.java | 168 +++ .../src/org/dolphinemu/dolphinemu/Option.java | 38 + Source/Core/Common/Src/StringUtil.cpp | 3 +- Source/Core/Core/Src/ConfigManager.cpp | 2 + Source/Core/Core/Src/HW/GCPad.cpp | 11 + Source/Core/DolphinWX/Src/GLInterface.h | 2 + Source/Core/DolphinWX/Src/MainAndroid.cpp | 66 +- .../Plugin_VideoSoftware/Src/SWRenderer.cpp | 93 +- 33 files changed, 2311 insertions(+), 33 deletions(-) create mode 100644 Source/Android/.classpath create mode 100644 Source/Android/.gitignore create mode 100644 Source/Android/.project create mode 100644 Source/Android/.settings/org.eclipse.jdt.core.prefs create mode 100644 Source/Android/AndroidManifest.xml create mode 100644 Source/Android/android.toolchain.cmake create mode 100644 Source/Android/assets/ButtonA.png create mode 100644 Source/Android/assets/ButtonB.png create mode 100644 Source/Android/build.xml create mode 100644 Source/Android/custom_rules.xml create mode 100644 Source/Android/jni/Android.mk create mode 100644 Source/Android/jni/Application.mk create mode 100644 Source/Android/project.properties create mode 100644 Source/Android/res/drawable-hdpi/launcher.png create mode 100644 Source/Android/res/drawable-mdpi/launcher.png create mode 100644 Source/Android/res/drawable-xhdpi/launcher.png create mode 100644 Source/Android/res/drawable-xxhdpi/launcher.png create mode 100644 Source/Android/res/layout/main.xml create mode 100644 Source/Android/res/values/strings.xml create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/Button.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeGLSurfaceView.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeListView.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/NativeRenderer.java create mode 100644 Source/Android/src/org/dolphinemu/dolphinemu/Option.java diff --git a/Source/Android/.classpath b/Source/Android/.classpath new file mode 100644 index 0000000000..3f9691c5dd --- /dev/null +++ b/Source/Android/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Source/Android/.gitignore b/Source/Android/.gitignore new file mode 100644 index 0000000000..31bce7aa41 --- /dev/null +++ b/Source/Android/.gitignore @@ -0,0 +1,7 @@ +gen +obj +#ui_atlas.zim +ui_atlas.zim.png +#assets/ui_atlas.zim +#jni/ui_atlas.cpp +#jni/ui_atlas.h diff --git a/Source/Android/.project b/Source/Android/.project new file mode 100644 index 0000000000..a79d8a1840 --- /dev/null +++ b/Source/Android/.project @@ -0,0 +1,33 @@ + + + ppsspp + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/Source/Android/.settings/org.eclipse.jdt.core.prefs b/Source/Android/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..f77b31c2d2 --- /dev/null +++ b/Source/Android/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/Source/Android/AndroidManifest.xml b/Source/Android/AndroidManifest.xml new file mode 100644 index 0000000000..e22370dd16 --- /dev/null +++ b/Source/Android/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Android/android.toolchain.cmake b/Source/Android/android.toolchain.cmake new file mode 100644 index 0000000000..69b402670d --- /dev/null +++ b/Source/Android/android.toolchain.cmake @@ -0,0 +1,1125 @@ +# ------------------------------------------------------------------------------ +# Android CMake toolchain file, for use with the Android NDK r5-r8 +# Requires cmake 2.6.3 or newer (2.8.5 or newer is recommended). +# See home page: http://code.google.com/p/android-cmake/ +# +# The file is mantained by the OpenCV project. And also can be found at +# http://code.opencv.org/projects/opencv/repository/revisions/master/changes/android/android.toolchain.cmake +# +# Usage Linux: +# $ export ANDROID_NDK=/absolute/path/to/the/android-ndk +# $ mkdir build && cd build +# $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. +# $ make -j8 +# +# Usage Linux (using standalone toolchain): +# $ export ANDROID_STANDALONE_TOOLCHAIN=/absolute/path/to/android-toolchain +# $ mkdir build && cd build +# $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. +# $ make -j8 +# +# Usage Windows: +# You need native port of make to build your project. +# Android NDK r7 (or newer) already has make.exe on board. +# For older NDK you have to install it separately. +# For example, this one: http://gnuwin32.sourceforge.net/packages/make.htm +# +# $ SET ANDROID_NDK=C:\absolute\path\to\the\android-ndk +# $ mkdir build && cd build +# $ cmake.exe -G"MinGW Makefiles" +# -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake +# -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe" .. +# $ "%ANDROID_NDK%\prebuilt\windows\bin\make.exe" +# +# +# Options (can be set as cmake parameters: -D=): +# ANDROID_NDK=/opt/android-ndk - path to the NDK root. +# Can be set as environment variable. Can be set only at first cmake run. +# +# ANDROID_STANDALONE_TOOLCHAIN=/opt/android-toolchain - path to the +# standalone toolchain. This option is not used if full NDK is found +# (ignored if ANDROID_NDK is set). +# Can be set as environment variable. Can be set only at first cmake run. +# +# ANDROID_ABI=armeabi-v7a - specifies the target Application Binary +# Interface (ABI). This option nearly matches to the APP_ABI variable +# used by ndk-build tool from Android NDK. +# +# Possible targets are: +# "armeabi" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "armeabi-v7a" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "armeabi-v7a with NEON" - same as armeabi-v7a, but +# sets NEON as floating-point unit +# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but +# sets VFPV3 as floating-point unit (has 32 registers instead of 16). +# "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP. +# "x86" - matches to the NDK ABI with the same name. +# See ${ANDROID_NDK}/docs/CPU-ARCH-ABIS.html for the documentation. +# "mips" - matches to the NDK ABI with the same name +# (not testes on real devices) +# +# ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for. +# Option is read-only when standalone toolchain used. +# +# ANDROID_FORCE_ARM_BUILD=OFF - set true to generate 32-bit ARM instructions +# instead of Thumb-1. Is not available for "x86" (inapplicable) and +# "armeabi-v6 with VFP" (forced) ABIs. +# +# ANDROID_NO_UNDEFINED=ON - set true to show all undefined symbols as linker +# errors even if they are not used. +# +# ANDROID_SO_UNDEFINED=OFF - set true to allow undefined symbols in shared +# libraries. Automatically turned on for NDK r5x and r6x due to GLESv2 +# problems. +# +# LIBRARY_OUTPUT_PATH_ROOT=${CMAKE_SOURCE_DIR} - where to output binary +# files. See additional details below. +# +# ANDROID_SET_OBSOLETE_VARIABLES=ON - it set, then toolchain defines some +# obsolete variables which were set by previous versions of this file for +# backward compatibility. +# +# +# What?: +# android-cmake toolchain searches for NDK/toolchain in the following order: +# ANDROID_NDK - cmake parameter +# ANDROID_NDK - environment variable +# ANDROID_STANDALONE_TOOLCHAIN - cmake parameter +# ANDROID_STANDALONE_TOOLCHAIN - environment variable +# ANDROID_NDK - default locations +# ANDROID_STANDALONE_TOOLCHAIN - default locations +# +# Make sure to do the following in your scripts: +# SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}" ) +# SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}" ) +# The flags will be prepopulated with critical flags, so don't loose them. +# Also be aware that toolchain also sets configuration-specific compiler +# flags and linker flags. +# +# 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 will be set true, mutually exclusive. +# NEON option will be set true if VFP is set to NEON. +# +# LIBRARY_OUTPUT_PATH_ROOT should be set in cache to determine where Android +# libraries will be installed. +# Default is ${CMAKE_SOURCE_DIR}, and the android libs will always be +# under the ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME} +# (depending on the target ABI). This is convenient for Android packaging. +# +# Authors: +# Ethan Rublee ethan.ruble@gmail.com +# Andrey Kamaev andrey.kamaev@itseez.com +# +# Change Log: +# - initial version December 2010 +# - modified April 2011 +# [+] added possibility to build with NDK (without standalone toolchain) +# [+] support cross-compilation on Windows (native, no cygwin support) +# [+] added compiler option to force "char" type to be signed +# [+] added toolchain option to compile to 32-bit ARM instructions +# [+] added toolchain option to disable SWIG search +# [+] added platform "armeabi-v7a with VFPV3" +# [~] ARM_TARGETS renamed to ARM_TARGET +# [+] EXECUTABLE_OUTPUT_PATH is set by toolchain (required on Windows) +# [~] Fixed bug with ANDROID_API_LEVEL variable +# [~] turn off SWIG search if it is not found first time +# - modified May 2011 +# [~] ANDROID_LEVEL is renamed to ANDROID_API_LEVEL +# [+] ANDROID_API_LEVEL is detected by toolchain if not specified +# [~] added guard to prevent changing of output directories on the first +# cmake pass +# [~] toolchain exits with error if ARM_TARGET is not recognized +# - modified June 2011 +# [~] default NDK path is updated for version r5c +# [+] variable CMAKE_SYSTEM_PROCESSOR is set based on ARM_TARGET +# [~] toolchain install directory is added to linker paths +# [-] removed SWIG-related stuff from toolchain +# [+] added macro find_host_package, find_host_program to search +# packages/programs on the host system +# [~] fixed path to STL library +# - modified July 2011 +# [~] fixed options caching +# [~] search for all supported NDK versions +# [~] allowed spaces in NDK path +# - modified September 2011 +# [~] updated for NDK r6b +# - modified November 2011 +# [*] rewritten for NDK r7 +# [+] x86 toolchain support (experimental) +# [+] added "armeabi-v6 with VFP" ABI for ARMv6 processors. +# [~] improved compiler and linker flags management +# [+] support different build flags for Release and Debug configurations +# [~] by default compiler flags the same as used by ndk-build (but only +# where reasonable) +# [~] ANDROID_NDK_TOOLCHAIN_ROOT is splitted to ANDROID_STANDALONE_TOOLCHAIN +# and ANDROID_TOOLCHAIN_ROOT +# [~] ARM_TARGET is renamed to ANDROID_ABI +# [~] ARMEABI_NDK_NAME is renamed to ANDROID_NDK_ABI_NAME +# [~] ANDROID_API_LEVEL is renamed to ANDROID_NATIVE_API_LEVEL +# - modified January 2012 +# [+] added stlport_static support (experimental) +# [+] added special check for cygwin +# [+] filtered out hidden files (starting with .) while globbing inside NDK +# [+] automatically applied GLESv2 linkage fix for NDK revisions 5-6 +# [+] added ANDROID_GET_ABI_RAWNAME to get NDK ABI names by CMake flags +# - modified February 2012 +# [+] updated for NDK r7b +# [~] fixed cmake try_compile() command +# [~] Fix for missing install_name_tool on OS X +# - modified March 2012 +# [~] fixed incorrect C compiler flags +# [~] fixed CMAKE_SYSTEM_PROCESSOR change on ANDROID_ABI change +# [+] improved toolchain loading speed +# [+] added assembler language support (.S) +# [+] allowed preset search paths and extra search suffixes +# - modified April 2012 +# [+] updated for NDK r7c +# [~] fixed most of problems with compiler/linker flags and caching +# [+] added option ANDROID_FUNCTION_LEVEL_LINKING +# - modified May 2012 +# [+] updated for NDK r8 +# [+] added mips architecture support +# - modified August 2012 +# [+] updated for NDK r8b +# [~] all intermediate files generated by toolchain are moved into CMakeFiles +# [~] libstdc++ and libsupc are removed from explicit link libraries +# ------------------------------------------------------------------------------ + +cmake_minimum_required( VERSION 2.6.3 ) + +if( DEFINED CMAKE_CROSSCOMPILING ) + # subsequent toolchain loading is not really needed + return() +endif() + +get_property(_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE) +if( _CMAKE_IN_TRY_COMPILE ) + include( "${CMAKE_CURRENT_SOURCE_DIR}/../android.toolchain.config.cmake" OPTIONAL ) +endif() + +# this one is important +set( CMAKE_SYSTEM_NAME Linux ) +# this one not so much +set( CMAKE_SYSTEM_VERSION 1 ) + +set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" ) +if(NOT DEFINED ANDROID_NDK_SEARCH_PATHS) + if( CMAKE_HOST_WIN32 ) + file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS ) + set( ANDROID_NDK_SEARCH_PATHS "${ANDROID_NDK_SEARCH_PATHS}/android-ndk" "$ENV{SystemDrive}/NVPACK/android-ndk" ) + else() + file( TO_CMAKE_PATH "$ENV{HOME}" ANDROID_NDK_SEARCH_PATHS ) + set( ANDROID_NDK_SEARCH_PATHS /opt/android-ndk "${ANDROID_NDK_SEARCH_PATHS}/NVPACK/android-ndk" ) + endif() +endif() +if(NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH) + set( ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH /opt/android-toolchain ) +endif() + +set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) +set( ANDROID_SUPPORTED_ABIS_x86 "x86" ) +set( ANDROID_SUPPORTED_ABIS_mipsel "mips" ) + +set( ANDROID_DEFAULT_NDK_API_LEVEL 9 ) +set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 ) +set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 ) + + +macro( __LIST_FILTER listvar regex ) + if( ${listvar} ) + foreach( __val ${${listvar}} ) + if( __val MATCHES "${regex}" ) + list( REMOVE_ITEM ${listvar} "${__val}" ) + endif() + endforeach() + endif() +endmacro() + +macro( __INIT_VARIABLE var_name ) + set( __test_path 0 ) + foreach( __var ${ARGN} ) + if( __var STREQUAL "PATH" ) + set( __test_path 1 ) + break() + endif() + endforeach() + if( __test_path AND NOT EXISTS "${${var_name}}" ) + unset( ${var_name} CACHE ) + endif() + if( "${${var_name}}" STREQUAL "" ) + set( __values 0 ) + foreach( __var ${ARGN} ) + if( __var STREQUAL "VALUES" ) + set( __values 1 ) + elseif( NOT __var STREQUAL "PATH" ) + set( __obsolete 0 ) + if( __var MATCHES "^OBSOLETE_.*$" ) + string( REPLACE "OBSOLETE_" "" __var "${__var}" ) + set( __obsolete 1 ) + endif() + if( __var MATCHES "^ENV_.*$" ) + string( REPLACE "ENV_" "" __var "${__var}" ) + set( __value "$ENV{${__var}}" ) + elseif( DEFINED ${__var} ) + set( __value "${${__var}}" ) + else() + if( __values ) + set( __value "${__var}" ) + else() + set( __value "" ) + endif() + endif() + if( NOT "${__value}" STREQUAL "" ) + if( __test_path ) + if( EXISTS "${__value}" ) + set( ${var_name} "${__value}" ) + if( __obsolete ) + message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) + endif() + break() + endif() + else() + set( ${var_name} "${__value}" ) + if( __obsolete ) + message( WARNING "Using value of obsolete variable ${__var} as initial value for ${var_name}. Please note, that ${__var} can be completely removed in future versions of the toolchain." ) + endif() + break() + endif() + endif() + endif() + endforeach() + unset( __value ) + unset( __values ) + unset( __obsolete ) + endif() + unset( __test_path ) +endmacro() + +macro( __DETECT_NATIVE_API_LEVEL _var _path ) + SET( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+([0-9]+)[\t ]*$" ) + FILE( STRINGS ${_path} __apiFileContent REGEX "${__ndkApiLevelRegex}" ) + if( NOT __apiFileContent ) + message( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." ) + endif() + string( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${_var} "${__apiFileContent}" ) + unset( __apiFileContent ) + unset( __ndkApiLevelRegex ) +endmacro() + +macro( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root ) + file( GLOB __gccExePath "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" ) + __LIST_FILTER( __gccExePath "bin/[.].*-gcc${TOOL_OS_SUFFIX}$" ) + list( LENGTH __gccExePath __gccExePathsCount ) + if( NOT __gccExePathsCount EQUAL 1 ) + message( WARNING "Could not uniquely determine machine name for compiler from ${_root}." ) + set( ${_var} "" ) + else() + get_filename_component( __gccExeName "${__gccExePath}" NAME_WE ) + string( REPLACE "-gcc" "" ${_var} "${__gccExeName}" ) + endif() + unset( __gccExePath ) + unset( __gccExePathsCount ) + unset( __gccExeName ) +endmacro() + +macro( __COPY_IF_DIFFERENT _source _destination ) + execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_source}" "${_destination}" RESULT_VARIABLE __fileCopyProcess ) + if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${_destination}") + message( SEND_ERROR "Failed copying of ${_source} to the ${_destination}" ) + endif() + unset( __fileCopyProcess ) +endmacro() + + +# stl version: by default gnustl_static will be used +set( ANDROID_USE_STLPORT FALSE CACHE BOOL "Experimental: use stlport_static instead of gnustl_static") +mark_as_advanced( ANDROID_USE_STLPORT ) + +# fight against cygwin +set( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL "Prevent cmake from working under cygwin and using cygwin tools") +mark_as_advanced( ANDROID_FORBID_SYGWIN ) +if( ANDROID_FORBID_SYGWIN ) + if( CYGWIN ) + message( FATAL_ERROR "Android NDK and android-cmake toolchain are not welcome Cygwin. It is unlikely that this cmake toolchain will work under cygwin. But if you want to try then you can set cmake variable ANDROID_FORBID_SYGWIN to FALSE and rerun cmake." ) + endif() + + if( CMAKE_HOST_WIN32 ) + # remove cygwin from PATH + set( __new_path "$ENV{PATH}") + __LIST_FILTER( __new_path "cygwin" ) + set(ENV{PATH} "${__new_path}") + unset(__new_path) + endif() +endif() + +# detect current host platform +set( TOOL_OS_SUFFIX "" ) +if( CMAKE_HOST_APPLE ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "darwin-x86" ) +elseif( CMAKE_HOST_WIN32 ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "windows" ) + set( TOOL_OS_SUFFIX ".exe" ) +elseif( CMAKE_HOST_UNIX ) + set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86" ) +else() + message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) +endif() + +# see if we have path to Android NDK +__INIT_VARIABLE( ANDROID_NDK PATH ENV_ANDROID_NDK ) +if( NOT ANDROID_NDK ) + # see if we have path to Android standalone toolchain + __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ENV_ANDROID_STANDALONE_TOOLCHAIN OBSOLETE_ANDROID_NDK_TOOLCHAIN_ROOT OBSOLETE_ENV_ANDROID_NDK_TOOLCHAIN_ROOT ) + + if( NOT ANDROID_STANDALONE_TOOLCHAIN ) + #try to find Android NDK in one of the the default locations + set( __ndkSearchPaths ) + foreach( __ndkSearchPath ${ANDROID_NDK_SEARCH_PATHS} ) + foreach( suffix ${ANDROID_SUPPORTED_NDK_VERSIONS} ) + list( APPEND __ndkSearchPaths "${__ndkSearchPath}${suffix}" ) + endforeach() + endforeach() + __INIT_VARIABLE( ANDROID_NDK PATH VALUES ${__ndkSearchPaths} ) + unset( __ndkSearchPaths ) + + if( ANDROID_NDK ) + message( STATUS "Using default path for Android NDK: ${ANDROID_NDK}" ) + message( STATUS " If you prefer to use a different location, please define a cmake or environment variable: ANDROID_NDK" ) + else() + #try to find Android standalone toolchain in one of the the default locations + __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) + + if( ANDROID_STANDALONE_TOOLCHAIN ) + message( STATUS "Using default path for standalone toolchain ${ANDROID_STANDALONE_TOOLCHAIN}" ) + message( STATUS " If you prefer to use a different location, please define the variable: ANDROID_STANDALONE_TOOLCHAIN" ) + endif( ANDROID_STANDALONE_TOOLCHAIN ) + endif( ANDROID_NDK ) + endif( NOT ANDROID_STANDALONE_TOOLCHAIN ) +endif( NOT ANDROID_NDK ) + +# remember found paths +if( ANDROID_NDK ) + get_filename_component( ANDROID_NDK "${ANDROID_NDK}" ABSOLUTE ) + # try to detect change + if( CMAKE_AR ) + string( LENGTH "${ANDROID_NDK}" __length ) + string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidNdkPreviousPath ) + if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK ) + message( FATAL_ERROR "It is not possible to change path to the NDK on subsequent run." ) + endif() + unset( __androidNdkPreviousPath ) + unset( __length ) + endif() + set( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" ) + set( BUILD_WITH_ANDROID_NDK True ) +elseif( ANDROID_STANDALONE_TOOLCHAIN ) + get_filename_component( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" ABSOLUTE ) + # try to detect change + if( CMAKE_AR ) + string( LENGTH "${ANDROID_STANDALONE_TOOLCHAIN}" __length ) + string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidStandaloneToolchainPreviousPath ) + if( NOT __androidStandaloneToolchainPreviousPath STREQUAL ANDROID_STANDALONE_TOOLCHAIN ) + message( FATAL_ERROR "It is not possible to change path to the Android standalone toolchain on subsequent run." ) + endif() + unset( __androidStandaloneToolchainPreviousPath ) + unset( __length ) + endif() + set( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" ) + set( BUILD_WITH_STANDALONE_TOOLCHAIN True ) +else() + list(GET ANDROID_NDK_SEARCH_PATHS 0 ANDROID_NDK_SEARCH_PATH) + message( FATAL_ERROR "Could not find neither Android NDK nor Android standalone toolcahin. + You should either set an environment variable: + export ANDROID_NDK=~/my-android-ndk + or + export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain + or put the toolchain or NDK in the default path: + sudo ln -s ~/my-android-ndk ${ANDROID_NDK_SEARCH_PATH} + sudo ln -s ~/my-android-toolchain ${ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH}" ) +endif() + +# get all the details about standalone toolchain +if( BUILD_WITH_STANDALONE_TOOLCHAIN ) + __DETECT_NATIVE_API_LEVEL( ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h" ) + set( ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) + set( __availableToolchains "standalone" ) + __DETECT_TOOLCHAIN_MACHINE_NAME( __availableToolchainMachines "${ANDROID_STANDALONE_TOOLCHAIN}" ) + if( NOT __availableToolchainMachines ) + message( FATAL_ERROR "Could not determine machine name of your toolchain. Probably your Android standalone toolchain is broken." ) + endif() + if( __availableToolchainMachines MATCHES i686 ) + set( __availableToolchainArchs "x86" ) + elseif( __availableToolchainMachines MATCHES arm ) + set( __availableToolchainArchs "arm" ) + elseif( __availableToolchainMachines MATCHES mipsel ) + set( __availableToolchainArchs "mipsel" ) + endif() + if( ANDROID_COMPILER_VERSION ) + # do not run gcc every time because it is relatevely expencive + set( __availableToolchainCompilerVersions "${ANDROID_COMPILER_VERSION}" ) + else() + execute_process( COMMAND "${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}" --version + OUTPUT_VARIABLE __availableToolchainCompilerVersions OUTPUT_STRIP_TRAILING_WHITESPACE ) + string( REGEX MATCH "[0-9]+.[0-9]+.[0-9]+" __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" ) + endif() +endif() + +# get all the details about NDK +if( BUILD_WITH_ANDROID_NDK ) + file( GLOB ANDROID_SUPPORTED_NATIVE_API_LEVELS RELATIVE "${ANDROID_NDK}/platforms" "${ANDROID_NDK}/platforms/android-*" ) + string( REPLACE "android-" "" ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_SUPPORTED_NATIVE_API_LEVELS}" ) + file( GLOB __availableToolchains RELATIVE "${ANDROID_NDK}/toolchains" "${ANDROID_NDK}/toolchains/*" ) + __LIST_FILTER( __availableToolchains "^[.]" ) + set( __availableToolchainMachines "" ) + set( __availableToolchainArchs "" ) + set( __availableToolchainCompilerVersions "" ) + foreach( __toolchain ${__availableToolchains} ) + __DETECT_TOOLCHAIN_MACHINE_NAME( __machine "${ANDROID_NDK}/toolchains/${__toolchain}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) + if( __machine ) + string( REGEX MATCH "[0-9]+[.][0-9]+[.]*[0-9]*$" __version "${__toolchain}" ) + string( REGEX MATCH "^[^-]+" __arch "${__toolchain}" ) + list( APPEND __availableToolchainMachines "${__machine}" ) + list( APPEND __availableToolchainArchs "${__arch}" ) + list( APPEND __availableToolchainCompilerVersions "${__version}" ) + else() + list( REMOVE_ITEM __availableToolchains "${__toolchain}" ) + endif() + endforeach() + if( NOT __availableToolchains ) + message( FATAL_ERROR "Could not any working toolchain in the NDK. Probably your Android NDK is broken." ) + endif() +endif() + +# build list of available ABIs +if( NOT ANDROID_SUPPORTED_ABIS ) + set( ANDROID_SUPPORTED_ABIS "" ) + set( __uniqToolchainArchNames ${__availableToolchainArchs} ) + list( REMOVE_DUPLICATES __uniqToolchainArchNames ) + list( SORT __uniqToolchainArchNames ) + foreach( __arch ${__uniqToolchainArchNames} ) + list( APPEND ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${__arch}} ) + endforeach() + unset( __uniqToolchainArchNames ) + if( NOT ANDROID_SUPPORTED_ABIS ) + message( FATAL_ERROR "No one of known Android ABIs is supported by this cmake toolchain." ) + endif() +endif() + +# choose target ABI +__INIT_VARIABLE( ANDROID_ABI OBSOLETE_ARM_TARGET OBSOLETE_ARM_TARGETS VALUES ${ANDROID_SUPPORTED_ABIS} ) +# verify that target ABI is supported +list( FIND ANDROID_SUPPORTED_ABIS "${ANDROID_ABI}" __androidAbiIdx ) +if( __androidAbiIdx EQUAL -1 ) + string( REPLACE ";" "\", \"", PRINTABLE_ANDROID_SUPPORTED_ABIS "${ANDROID_SUPPORTED_ABIS}" ) + message( FATAL_ERROR "Specified ANDROID_ABI = \"${ANDROID_ABI}\" is not supported by this cmake toolchain or your NDK/toolchain. + Supported values are: \"${PRINTABLE_ANDROID_SUPPORTED_ABIS}\" + " ) +endif() +unset( __androidAbiIdx ) + +# remember target ABI +set( ANDROID_ABI "${ANDROID_ABI}" CACHE STRING "The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point." FORCE ) + +# set target ABI options +if( ANDROID_ABI STREQUAL "x86" ) + set( X86 true ) + set( ANDROID_NDK_ABI_NAME "x86" ) + set( ANDROID_ARCH_NAME "x86" ) + set( ANDROID_ARCH_FULLNAME "x86" ) + set( CMAKE_SYSTEM_PROCESSOR "i686" ) +elseif( ANDROID_ABI STREQUAL "mips" ) + set( MIPS true ) + set( ANDROID_NDK_ABI_NAME "mips" ) + set( ANDROID_ARCH_NAME "mips" ) + set( ANDROID_ARCH_FULLNAME "mipsel" ) + set( CMAKE_SYSTEM_PROCESSOR "mips" ) +elseif( ANDROID_ABI STREQUAL "armeabi" ) + set( ARMEABI true ) + set( ANDROID_NDK_ABI_NAME "armeabi" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv5te" ) +elseif( ANDROID_ABI STREQUAL "armeabi-v6 with VFP" ) + set( ARMEABI_V6 true ) + set( ANDROID_NDK_ABI_NAME "armeabi" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv6" ) + # need always fallback to older platform + set( ARMEABI true ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a") + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a with VFPV3" ) + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) + set( VFPV3 true ) +elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" ) + set( ARMEABI_V7A true ) + set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) + set( ANDROID_ARCH_NAME "arm" ) + set( ANDROID_ARCH_FULLNAME "arm" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) + set( VFPV3 true ) + set( NEON true ) +else() + message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." ) +endif() + +if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" ) + # really dirty hack + # it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run... + file( APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" "SET(CMAKE_SYSTEM_PROCESSOR \"${CMAKE_SYSTEM_PROCESSOR}\")\n" ) +endif() + +set( ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME}} CACHE INTERNAL "ANDROID_ABI can be changed only to one of these ABIs. Changing to any other ABI requires to reset cmake cache." ) +if( CMAKE_VERSION VERSION_GREATER "2.8" ) + list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME} ) + set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_FULLNAME}} ) +endif() + +if( ANDROID_ARCH_NAME STREQUAL "arm" AND NOT ARMEABI_V6 ) + __INIT_VARIABLE( ANDROID_FORCE_ARM_BUILD OBSOLETE_FORCE_ARM VALUES OFF ) + set( ANDROID_FORCE_ARM_BUILD ${ANDROID_FORCE_ARM_BUILD} CACHE BOOL "Use 32-bit ARM instructions instead of Thumb-1" FORCE ) + mark_as_advanced( ANDROID_FORCE_ARM_BUILD ) +else() + unset( ANDROID_FORCE_ARM_BUILD CACHE ) +endif() + +# choose toolchain +if( ANDROID_TOOLCHAIN_NAME ) + list( FIND __availableToolchains "${ANDROID_TOOLCHAIN_NAME}" __toolchainIdx ) + if( __toolchainIdx EQUAL -1 ) + message( FATAL_ERROR "Previously selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is missing. You need to remove CMakeCache.txt and rerun cmake manually to change the toolchain" ) + endif() + list( GET __availableToolchainArchs ${__toolchainIdx} __toolchainArch ) + if( NOT __toolchainArch STREQUAL ANDROID_ARCH_FULLNAME ) + message( SEND_ERROR "Previously selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is not able to compile binaries for the \"${ANDROID_ARCH_NAME}\" platform." ) + endif() +else() + set( __toolchainIdx -1 ) + set( __applicableToolchains "" ) + set( __toolchainMaxVersion "0.0.0" ) + list( LENGTH __availableToolchains __availableToolchainsCount ) + math( EXPR __availableToolchainsCount "${__availableToolchainsCount}-1" ) + foreach( __idx RANGE ${__availableToolchainsCount} ) + list( GET __availableToolchainArchs ${__idx} __toolchainArch ) + if( __toolchainArch STREQUAL ANDROID_ARCH_FULLNAME ) + list( GET __availableToolchainCompilerVersions ${__idx} __toolchainVersion ) + if( __toolchainVersion VERSION_GREATER __toolchainMaxVersion ) + set( __toolchainMaxVersion "${__toolchainVersion}" ) + set( __toolchainIdx ${__idx} ) + endif() + endif() + endforeach() + unset( __availableToolchainsCount ) + unset( __toolchainMaxVersion ) + unset( __toolchainVersion ) +endif() +unset( __toolchainArch ) +if( __toolchainIdx EQUAL -1 ) + message( FATAL_ERROR "No one of available compiler toolchains is able to compile for ${ANDROID_ARCH_NAME} platform." ) +endif() +list( GET __availableToolchains ${__toolchainIdx} ANDROID_TOOLCHAIN_NAME ) +list( GET __availableToolchainMachines ${__toolchainIdx} ANDROID_TOOLCHAIN_MACHINE_NAME ) +list( GET __availableToolchainCompilerVersions ${__toolchainIdx} ANDROID_COMPILER_VERSION ) +set( ANDROID_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" CACHE INTERNAL "Name of toolchain used" ) +set( ANDROID_COMPILER_VERSION "${ANDROID_COMPILER_VERSION}" CACHE INTERNAL "compiler version from selected toolchain" ) +unset( __toolchainIdx ) +unset( __availableToolchains ) +unset( __availableToolchainMachines ) +unset( __availableToolchainArchs ) +unset( __availableToolchainCompilerVersions ) + +# choose native API level +__INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL ) +string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" ) +# validate +list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx ) +if( __levelIdx EQUAL -1 ) + message( SEND_ERROR "Specified Android native API level (${ANDROID_NATIVE_API_LEVEL}) is not supported by your NDK/toolchain." ) +endif() +unset( __levelIdx ) +if( BUILD_WITH_ANDROID_NDK ) + __DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" ) + if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL ) + message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." ) + endif() + unset( __realApiLevel ) +endif() +set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE ) +if( CMAKE_VERSION VERSION_GREATER "2.8" ) + list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) + set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) +endif() + +# setup paths +if( BUILD_WITH_STANDALONE_TOOLCHAIN ) + set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) + set( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" ) + set( __stlLibPath "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) +endif() +if( BUILD_WITH_ANDROID_NDK ) + set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) + set( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" ) + if( ANDROID_USE_STLPORT ) + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}" ) + else() + if( EXISTS "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/include" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}" ) + else() + set( __stlIncludePath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/include" ) + set( __stlLibPath "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}" ) + endif() + endif() +endif() + +# specify the cross compiler +set( CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "gcc" ) +set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "g++" ) +set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "Assembler" ) +if( CMAKE_VERSION VERSION_LESS 2.8.5 ) + set( CMAKE_ASM_COMPILER_ARG1 "-c" ) +endif() +# there may be a way to make cmake deduce these TODO deduce the rest of the tools +set( CMAKE_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" ) +set( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" ) +set( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" ) +set( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" ) +set( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" ) +set( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" ) +set( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" ) +set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) +if( APPLE ) + find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) + if( NOT CMAKE_INSTALL_NAME_TOOL ) + message( FATAL_ERROR "Could not find install_name_tool, please check your installation." ) + endif() + mark_as_advanced( CMAKE_INSTALL_NAME_TOOL ) +endif() + +# export directories +set( ANDROID_SYSTEM_INCLUDE_DIRS "" ) +set( ANDROID_SYSTEM_LIB_DIRS "" ) + +# setup output directories +set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library output, set this to change where android libs are installed to" ) +set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) + +if(NOT _CMAKE_IN_TRY_COMPILE) + if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" ) + set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" ) + else() + set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" ) + endif() + set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" ) +endif() + +# includes +list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_SYSROOT}/usr/include" ) +if( __stlIncludePath AND EXISTS "${__stlIncludePath}" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlIncludePath}" ) +endif() + +# c++ bits includes +if( __stlLibPath AND EXISTS "${__stlLibPath}/include" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${__stlLibPath}/include" ) +endif() +if( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) +elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" ) +elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" ) +elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/bits" ) + list( APPEND ANDROID_SYSTEM_INCLUDE_DIRS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) +endif() + +# flags and definitions +if(ANDROID_SYSROOT MATCHES "[ ;\"]") + set( ANDROID_CXX_FLAGS "--sysroot=\"${ANDROID_SYSROOT}\"" ) + # quotes will break try_compile and compiler identification + message(WARNING "Your Android system root has non-alphanumeric symbols. It can break compiler features detection and the whole build.") +else() + set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) +endif() + +remove_definitions( -DANDROID ) +add_definitions( -DANDROID ) + +# Force set compilers because standard identification works badly for us +include( CMakeForceCompiler ) +CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) +set( CMAKE_C_PLATFORM_ID Linux ) +set( CMAKE_C_SIZEOF_DATA_PTR 4 ) +set( CMAKE_C_HAS_ISYSROOT 1 ) +set( CMAKE_C_COMPILER_ABI ELF ) +CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) +set( CMAKE_CXX_PLATFORM_ID Linux ) +set( CMAKE_CXX_SIZEOF_DATA_PTR 4 ) +set( CMAKE_CXX_HAS_ISYSROOT 1 ) +set( CMAKE_CXX_COMPILER_ABI ELF ) +# force ASM compiler (required for CMake < 2.8.5) +set( CMAKE_ASM_COMPILER_ID_RUN TRUE ) +set( CMAKE_ASM_COMPILER_ID GNU ) +set( CMAKE_ASM_COMPILER_WORKS TRUE ) +set( CMAKE_ASM_COMPILER_FORCED TRUE ) +set( CMAKE_COMPILER_IS_GNUASM 1) + +# NDK flags +if( ARMEABI OR ARMEABI_V7A ) + # NDK also defines -ffunction-sections -funwind-tables but they result in worse OpenCV performance + set( _CMAKE_CXX_FLAGS "-fPIC -Wno-psabi" ) + set( _CMAKE_C_FLAGS "-fPIC -Wno-psabi" ) + remove_definitions( -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ ) + add_definitions( -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ ) + # extra arm-specific flags + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) +elseif( X86 ) + set( _CMAKE_CXX_FLAGS "-funwind-tables" ) + set( _CMAKE_C_FLAGS "-funwind-tables" ) +elseif( MIPS ) + set( _CMAKE_CXX_FLAGS "-fpic -Wno-psabi -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) + set( _CMAKE_CXX_FLAGS "-fpic -Wno-psabi -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) +else() + set( _CMAKE_CXX_FLAGS "" ) + set( _CMAKE_C_FLAGS "" ) +endif() + +if( ANDROID_USE_STLPORT ) + set( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions" ) + set( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fno-exceptions" ) +else() + set( _CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS} -frtti -fexceptions" ) + set( _CMAKE_C_FLAGS "${_CMAKE_C_FLAGS} -fexceptions" ) +endif() + +# release and debug flags +if( ARMEABI OR ARMEABI_V7A ) + if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 ) + # It is recommended to use the -mthumb compiler flag to force the generation + # of 16-bit Thumb-1 instructions (the default being 32-bit ARM ones). + # O3 instead of O2/Os in release mode - like cmake sets for desktop gcc + set( _CMAKE_CXX_FLAGS_RELEASE "-mthumb -O3" ) + set( _CMAKE_C_FLAGS_RELEASE "-mthumb -O3" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-marm -Os -finline-limit=64" ) + set( _CMAKE_C_FLAGS_DEBUG "-marm -Os -finline-limit=64" ) + else() + # always compile ARMEABI_V6 in arm mode; otherwise there is no difference from ARMEABI + # O3 instead of O2/Os in release mode - like cmake sets for desktop gcc + set( _CMAKE_CXX_FLAGS_RELEASE "-marm -O3 -fstrict-aliasing" ) + set( _CMAKE_C_FLAGS_RELEASE "-marm -O3 -fstrict-aliasing" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-marm -O0 -finline-limit=300" ) + set( _CMAKE_C_FLAGS_DEBUG "-marm -O0 -finline-limit=300" ) + endif() +elseif( X86 ) + set( _CMAKE_CXX_FLAGS_RELEASE "-O3 -fstrict-aliasing" ) + set( _CMAKE_C_FLAGS_RELEASE "-O3 -fstrict-aliasing" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-O0 -finline-limit=300" ) + set( _CMAKE_C_FLAGS_DEBUG "-O0 -finline-limit=300" ) +elseif( MIPS ) + set( _CMAKE_CXX_FLAGS_RELEASE "-O3 -funswitch-loops -finline-limit=300" ) + set( _CMAKE_C_FLAGS_RELEASE "-O3 -funswitch-loops -finline-limit=300" ) + set( _CMAKE_CXX_FLAGS_DEBUG "-O0 -g" ) + set( _CMAKE_C_FLAGS_DEBUG "-O0 -g" ) +endif() +set( _CMAKE_CXX_FLAGS_RELEASE "${_CMAKE_CXX_FLAGS_RELEASE} -fomit-frame-pointer -DNDEBUG" ) +set( _CMAKE_C_FLAGS_RELEASE "${_CMAKE_C_FLAGS_RELEASE} -fomit-frame-pointer -DNDEBUG" ) +set( _CMAKE_CXX_FLAGS_DEBUG "${_CMAKE_CXX_FLAGS_DEBUG} -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG" ) +set( _CMAKE_C_FLAGS_DEBUG "${_CMAKE_C_FLAGS_DEBUG} -fno-strict-aliasing -fno-omit-frame-pointer -DDEBUG -D_DEBUG" ) + +# ABI-specific flags +if( 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" ) + elseif( VFPV3 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" ) + else() + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfp" ) + endif() +elseif( ARMEABI_V6 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) +elseif( ARMEABI ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float" ) +elseif( X86 ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" )#sse? +endif() + +# linker flags +if( NOT DEFINED __ndklibspath ) + set( __ndklibspath "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ndklibs/${ANDROID_NDK_ABI_NAME}" ) +endif() +list( APPEND ANDROID_SYSTEM_LIB_DIRS "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ) +set( ANDROID_LINKER_FLAGS "" ) + +# STL +if( ANDROID_USE_STLPORT ) + if( EXISTS "${__stlLibPath}/libstlport_static.a" ) + set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o \"${__stlLibPath}/libstlport_static.a\"") + set( CMAKE_CXX_CREATE_SHARED_MODULE " -o \"${__stlLibPath}/libstlport_static.a\"") + endif() +else( ANDROID_USE_STLPORT ) + if( EXISTS "${__stlLibPath}/libgnustl_static.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libgnustl_static.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${__stlLibPath}/thumb/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/thumb/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + elseif( EXISTS "${__stlLibPath}/libstdc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libstdc++.a" "${__ndklibspath}/libstdc++.a" ) + endif() + if( EXISTS "${__stlLibPath}/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${__stlLibPath}/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( ANDROID_ARCH_NAME STREQUAL "arm" AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + elseif( EXISTS "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" ) + __COPY_IF_DIFFERENT( "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" "${__ndklibspath}/libsupc++.a" ) + endif() + list( APPEND ANDROID_SYSTEM_LIB_DIRS "${__ndklibspath}" ) +endif( ANDROID_USE_STLPORT ) + +# cleanup for STL search +unset( __stlIncludePath ) +unset( __stlLibPath ) + +# other linker flags +__INIT_VARIABLE( ANDROID_NO_UNDEFINED OBSOLETE_NO_UNDEFINED VALUES ON ) +set( ANDROID_NO_UNDEFINED ${ANDROID_NO_UNDEFINED} CACHE BOOL "Show all undefined symbols as linker errors" FORCE ) +mark_as_advanced( ANDROID_NO_UNDEFINED ) +if( ANDROID_NO_UNDEFINED ) + set( ANDROID_LINKER_FLAGS "-Wl,--no-undefined ${ANDROID_LINKER_FLAGS}" ) +endif() + +if (ANDROID_NDK MATCHES "-r[56].?$") + # libGLESv2.so in NDK's prior to r7 refers to exteranal symbols. So this flag option is required for all projects using OpenGL from native. + __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES ON ) +else() + __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES OFF ) +endif() + +set( ANDROID_SO_UNDEFINED ${ANDROID_SO_UNDEFINED} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" FORCE ) +mark_as_advanced( ANDROID_SO_UNDEFINED ) +if( ANDROID_SO_UNDEFINED ) + set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-allow-shlib-undefined" ) +endif() + +__INIT_VARIABLE( ANDROID_FUNCTION_LEVEL_LINKING VALUES ON ) +set( ANDROID_FUNCTION_LEVEL_LINKING ON CACHE BOOL "Allows or disallows undefined symbols in shared libraries" FORCE ) +mark_as_advanced( ANDROID_FUNCTION_LEVEL_LINKING ) +if( ANDROID_FUNCTION_LEVEL_LINKING ) + set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections" ) + set( ANDROID_LINKER_FLAGS "-Wl,--gc-sections ${ANDROID_LINKER_FLAGS}" ) +endif() + +if( ARMEABI_V7A ) + # this is *required* to use the following linker flags that routes around + # a CPU bug in some Cortex-A8 implementations: + set( ANDROID_LINKER_FLAGS "-Wl,--fix-cortex-a8 ${ANDROID_LINKER_FLAGS}" ) +endif() + +# cache flags +set( CMAKE_CXX_FLAGS "${_CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags" ) +set( CMAKE_C_FLAGS "${_CMAKE_C_FLAGS}" CACHE STRING "c flags" ) +set( CMAKE_CXX_FLAGS_RELEASE "${_CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "c++ Release flags" ) +set( CMAKE_C_FLAGS_RELEASE "${_CMAKE_C_FLAGS_RELEASE}" CACHE STRING "c Release flags" ) +set( CMAKE_CXX_FLAGS_DEBUG "${_CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "c++ Debug flags" ) +set( CMAKE_C_FLAGS_DEBUG "${_CMAKE_C_FLAGS_DEBUG}" CACHE STRING "c Debug flags" ) +set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "linker flags" ) +set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "linker flags" ) +set( CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "linker flags" ) + +include_directories( SYSTEM ${ANDROID_SYSTEM_INCLUDE_DIRS} ) +link_directories( ${ANDROID_SYSTEM_LIB_DIRS} ) + +# finish flags +set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" CACHE INTERNAL "Extra Android compiler flags") +set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Extra Android linker flags") +set( CMAKE_CXX_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" ) +set( CMAKE_C_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" ) +if( MIPS AND BUILD_WITH_ANDROID_NDK ) + set( CMAKE_SHARED_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) + set( CMAKE_MODULE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.xsc ${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) + set( CMAKE_EXE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_NAME}/mipself.x ${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) +else() + set( CMAKE_SHARED_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) + set( CMAKE_MODULE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) + set( CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) +endif() + +# set these global flags for cmake client scripts to change behavior +set( ANDROID True ) +set( BUILD_ANDROID True ) + +# where is the target environment +set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin" "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" "${ANDROID_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" ) + +# only search for libraries and includes in the ndk toolchain +set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) +set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) +set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) + + +# macro to find packages on the host OS +macro( find_host_package ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_package( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() + + +# macro to find programs on the host OS +macro( find_host_program ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + if( CMAKE_HOST_WIN32 ) + SET( WIN32 1 ) + SET( UNIX ) + elseif( CMAKE_HOST_APPLE ) + SET( APPLE 1 ) + SET( UNIX ) + endif() + find_program( ${ARGN} ) + SET( WIN32 ) + SET( APPLE ) + SET( UNIX 1 ) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endmacro() + + +macro( ANDROID_GET_ABI_RAWNAME TOOLCHAIN_FLAG VAR ) + if( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI" ) + set( ${VAR} "armeabi" ) + elseif( "${TOOLCHAIN_FLAG}" STREQUAL "ARMEABI_V7A" ) + set( ${VAR} "armeabi-v7a" ) + elseif( "${TOOLCHAIN_FLAG}" STREQUAL "X86" ) + set( ${VAR} "x86" ) + else() + set( ${VAR} "unknown" ) + endif() +endmacro() + + +# export toolchain settings for the try_compile() command +if( NOT PROJECT_NAME STREQUAL "CMAKE_TRY_COMPILE" ) + set( __toolchain_config "") + foreach( __var ANDROID_ABI ANDROID_FORCE_ARM_BUILD ANDROID_NATIVE_API_LEVEL ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_SET_OBSOLETE_VARIABLES LIBRARY_OUTPUT_PATH_ROOT ANDROID_USE_STLPORT ANDROID_FORBID_SYGWIN ANDROID_NDK ANDROID_STANDALONE_TOOLCHAIN ANDROID_FUNCTION_LEVEL_LINKING __ndklibspath ) + if( DEFINED ${__var} ) + if( "${__var}" MATCHES " ") + set( __toolchain_config "${__toolchain_config}set( ${__var} \"${${__var}}\" CACHE INTERNAL \"\" )\n" ) + else() + set( __toolchain_config "${__toolchain_config}set( ${__var} ${${__var}} CACHE INTERNAL \"\" )\n" ) + endif() + endif() + endforeach() + file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/android.toolchain.config.cmake" "${__toolchain_config}" ) + unset( __toolchain_config ) + unset( __ndklibspath ) +endif() + + +# set some obsolete variables for backward compatibility +set( ANDROID_SET_OBSOLETE_VARIABLES ON CACHE BOOL "Define obsolete Andrid-specific cmake variables" ) +mark_as_advanced( ANDROID_SET_OBSOLETE_VARIABLES ) +if( ANDROID_SET_OBSOLETE_VARIABLES ) + set( ANDROID_API_LEVEL ${ANDROID_NATIVE_API_LEVEL} ) + set( ARM_TARGET "${ANDROID_ABI}" ) + set( ARMEABI_NDK_NAME "${ANDROID_NDK_ABI_NAME}" ) +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" +# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14 (depends on NDK version) +# ANDROID_SET_OBSOLETE_VARIABLES : ON/OFF +# ANDROID_USE_STLPORT : OFF/ON - EXPERIMENTAL!!! +# ANDROID_FORBID_SYGWIN : ON/OFF +# ANDROID_NO_UNDEFINED : ON/OFF +# ANDROID_SO_UNDEFINED : OFF/ON (default depends on NDK version) +# ANDROID_FUNCTION_LEVEL_LINKING : ON/OFF +# Variables that takes effect only at first run: +# ANDROID_FORCE_ARM_BUILD : ON/OFF +# LIBRARY_OUTPUT_PATH_ROOT : +# Can be set only at the first run: +# ANDROID_NDK +# ANDROID_STANDALONE_TOOLCHAIN +# ANDROID_TOOLCHAIN_NAME : "arm-linux-androideabi-4.4.3" or "arm-linux-androideabi-4.6" or "mipsel-linux-android-4.4.3" or "mipsel-linux-android-4.6" or "x86-4.4.3" or "x86-4.6" +# Obsolete: +# ANDROID_API_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL +# ARM_TARGET : superseded by ANDROID_ABI +# ARM_TARGETS : superseded by ANDROID_ABI (can be set only) +# ANDROID_NDK_TOOLCHAIN_ROOT : superseded by ANDROID_STANDALONE_TOOLCHAIN (can be set only) +# ANDROID_LEVEL : superseded by ANDROID_NATIVE_API_LEVEL (completely removed) +# +# Primary read-only variables: +# ANDROID : always TRUE +# ARMEABI : TRUE for arm v6 and older devices +# ARMEABI_V6 : TRUE for arm v6 +# ARMEABI_V7A : TRUE for arm v7a +# NEON : TRUE if NEON unit is enabled +# VFPV3 : TRUE if VFP version 3 is enabled +# X86 : TRUE if configured for x86 +# BUILD_ANDROID : always TRUE +# 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" or "x86" depending on ANDROID_ABI +# ANDROID_ARCH_NAME : "arm" or "x86" or "mips" depending on ANDROID_ABI +# TOOL_OS_SUFFIX : "" or ".exe" depending on host platform +# ANDROID_SYSROOT : path to the compiler sysroot +# ANDROID_SYSTEM_INCLUDE_DIRS +# ANDROID_SYSTEM_LIB_DIRS +# Obsolete: +# ARMEABI_NDK_NAME : superseded by ANDROID_NDK_ABI_NAME +# +# Secondary (less stable) read-only variables: +# ANDROID_COMPILER_VERSION : GCC version used +# ANDROID_CXX_FLAGS : C/C++ compiler flags required by Android platform +# ANDROID_SUPPORTED_ABIS : list of currently allowed values for ANDROID_ABI +# ANDROID_TOOLCHAIN_MACHINE_NAME : "arm-linux-androideabi", "arm-eabi" or "i686-android-linux" +# ANDROID_TOOLCHAIN_ROOT : path to the top level of toolchain (standalone or placed inside NDK) +# ANDROID_SUPPORTED_NATIVE_API_LEVELS : list of native API levels found inside NDK +# +# Defaults: +# ANDROID_DEFAULT_NDK_API_LEVEL +# ANDROID_DEFAULT_NDK_API_LEVEL_${ARCH} +# ANDROID_NDK_SEARCH_PATHS +# ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH +# ANDROID_SUPPORTED_ABIS_${ARCH} +# ANDROID_SUPPORTED_NDK_VERSIONS diff --git a/Source/Android/assets/ButtonA.png b/Source/Android/assets/ButtonA.png new file mode 100644 index 0000000000000000000000000000000000000000..7e685324ae8a4ad016eb1033d64b659966cfcd0c GIT binary patch literal 5178 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 literal 0 HcmV?d00001 diff --git a/Source/Android/build.xml b/Source/Android/build.xml new file mode 100644 index 0000000000..dc36e5c45a --- /dev/null +++ b/Source/Android/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Android/custom_rules.xml b/Source/Android/custom_rules.xml new file mode 100644 index 0000000000..3c6d5b53ba --- /dev/null +++ b/Source/Android/custom_rules.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Source/Android/jni/Android.mk b/Source/Android/jni/Android.mk new file mode 100644 index 0000000000..68366e380c --- /dev/null +++ b/Source/Android/jni/Android.mk @@ -0,0 +1,189 @@ +LOCAL_PATH := $(call my-dir) + +# BEGIN Native Audio Separate Library - copy paste this section to your Android.mk + +include $(CLEAR_VARS) + +LOCAL_MODULE := native_audio +LOCAL_CFLAGS := -O2 -fsigned-char -ffast-math -Wall -Wno-multichar -Wno-psabi -std=gnu++0x +NATIVE := ../../native +LOCAL_SRC_FILES := \ + $(NATIVE)/android/native-audio-so.cpp +LOCAL_LDLIBS := -lOpenSLES -llog + +include $(BUILD_SHARED_LIBRARY) + +# END Native Audio Separate Library - copy paste this section to your Android.mk + +include $(CLEAR_VARS) + +#TARGET_PLATFORM := android-8 + +LOCAL_MODULE := ppsspp_jni + +NATIVE := ../../native +SRC := ../.. + +LOCAL_CFLAGS := -DUSE_PROFILER -DARM -DGL_GLEXT_PROTOTYPES -DUSING_GLES2 -O2 -fsigned-char -Wall -Wno-multichar -Wno-psabi -Wno-unused-variable -fno-strict-aliasing -ffast-math +LOCAL_CXXFLAGS := -std=gnu++0x +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../Common \ + $(LOCAL_PATH)/../.. \ + $(LOCAL_PATH)/$(NATIVE)/base \ + $(LOCAL_PATH)/$(NATIVE)/ext/libzip \ + $(LOCAL_PATH)/$(NATIVE) \ + $(LOCAL_PATH) \ + +LOCAL_STATIC_LIBRARIES := native libzip +LOCAL_LDLIBS := -lz -lGLESv2 -ldl -llog + + +# $(SRC)/Core/EmuThread.cpp \ + +LOCAL_SRC_FILES := \ + NativeApp.cpp \ + EmuScreen.cpp \ + MenuScreens.cpp \ + UIShader.cpp \ + GamepadEmu.cpp \ + ArmEmitterTest.cpp \ + ui_atlas.cpp \ + $(SRC)/native/android/app-android.cpp \ + $(SRC)/ext/disarm.cpp \ + $(SRC)/ext/libkirk/AES.c \ + $(SRC)/ext/libkirk/SHA1.c \ + $(SRC)/ext/libkirk/bn.c \ + $(SRC)/ext/libkirk/ec.c \ + $(SRC)/ext/libkirk/kirk_engine.c \ + $(SRC)/ext/snappy/snappy-c.cpp \ + $(SRC)/ext/snappy/snappy.cpp \ + $(SRC)/Common/ArmEmitter.cpp \ + $(SRC)/Common/ArmCPUDetect.cpp \ + $(SRC)/Common/ArmThunk.cpp \ + $(SRC)/Common/LogManager.cpp \ + $(SRC)/Common/MemArena.cpp \ + $(SRC)/Common/MemoryUtil.cpp \ + $(SRC)/Common/MsgHandler.cpp \ + $(SRC)/Common/IniFile.cpp \ + $(SRC)/Common/FileUtil.cpp \ + $(SRC)/Common/StringUtil.cpp \ + $(SRC)/Common/Thread.cpp \ + $(SRC)/Common/Timer.cpp \ + $(SRC)/Common/Misc.cpp \ + $(SRC)/Common/MathUtil.cpp \ + $(SRC)/GPU/Math3D.cpp \ + $(SRC)/GPU/GPUCommon.cpp \ + $(SRC)/GPU/GPUState.cpp \ + $(SRC)/GPU/GeDisasm.cpp \ + $(SRC)/GPU/GLES/Framebuffer.cpp \ + $(SRC)/GPU/GLES/DisplayListInterpreter.cpp \ + $(SRC)/GPU/GLES/TextureCache.cpp \ + $(SRC)/GPU/GLES/IndexGenerator.cpp \ + $(SRC)/GPU/GLES/TransformPipeline.cpp \ + $(SRC)/GPU/GLES/StateMapping.cpp \ + $(SRC)/GPU/GLES/VertexDecoder.cpp \ + $(SRC)/GPU/GLES/ShaderManager.cpp \ + $(SRC)/GPU/GLES/VertexShaderGenerator.cpp \ + $(SRC)/GPU/GLES/FragmentShaderGenerator.cpp \ + $(SRC)/GPU/Null/NullGpu.cpp \ + $(SRC)/Core/ELF/ElfReader.cpp \ + $(SRC)/Core/ELF/PrxDecrypter.cpp \ + $(SRC)/Core/ELF/ParamSFO.cpp \ + $(SRC)/Core/HW/MemoryStick.cpp \ + $(SRC)/Core/HW/MediaEngine.cpp \ + $(SRC)/Core/HW/SasAudio.cpp \ + $(SRC)/Core/Core.cpp \ + $(SRC)/Core/Config.cpp \ + $(SRC)/Core/CoreTiming.cpp \ + $(SRC)/Core/CPU.cpp \ + $(SRC)/Core/Host.cpp \ + $(SRC)/Core/Loaders.cpp \ + $(SRC)/Core/PSPLoaders.cpp \ + $(SRC)/Core/MemMap.cpp \ + $(SRC)/Core/MemMapFunctions.cpp \ + $(SRC)/Core/SaveState.cpp \ + $(SRC)/Core/System.cpp \ + $(SRC)/Core/PSPMixer.cpp \ + $(SRC)/Core/Debugger/Breakpoints.cpp \ + $(SRC)/Core/Debugger/SymbolMap.cpp \ + $(SRC)/Core/Dialog/PSPDialog.cpp \ + $(SRC)/Core/Dialog/PSPMsgDialog.cpp \ + $(SRC)/Core/Dialog/PSPOskDialog.cpp \ + $(SRC)/Core/Dialog/PSPPlaceholderDialog.cpp \ + $(SRC)/Core/Dialog/PSPSaveDialog.cpp \ + $(SRC)/Core/Dialog/SavedataParam.cpp \ + $(SRC)/Core/HLE/HLETables.cpp \ + $(SRC)/Core/HLE/HLE.cpp \ + $(SRC)/Core/HLE/sceAtrac.cpp \ + $(SRC)/Core/HLE/__sceAudio.cpp \ + $(SRC)/Core/HLE/sceAudio.cpp \ + $(SRC)/Core/HLE/sceCtrl.cpp \ + $(SRC)/Core/HLE/sceDisplay.cpp \ + $(SRC)/Core/HLE/sceDmac.cpp \ + $(SRC)/Core/HLE/sceGe.cpp \ + $(SRC)/Core/HLE/sceFont.cpp \ + $(SRC)/Core/HLE/sceHprm.cpp \ + $(SRC)/Core/HLE/sceHttp.cpp \ + $(SRC)/Core/HLE/sceImpose.cpp \ + $(SRC)/Core/HLE/sceIo.cpp \ + $(SRC)/Core/HLE/sceKernel.cpp \ + $(SRC)/Core/HLE/sceKernelAlarm.cpp \ + $(SRC)/Core/HLE/sceKernelEventFlag.cpp \ + $(SRC)/Core/HLE/sceKernelInterrupt.cpp \ + $(SRC)/Core/HLE/sceKernelMemory.cpp \ + $(SRC)/Core/HLE/sceKernelModule.cpp \ + $(SRC)/Core/HLE/sceKernelMutex.cpp \ + $(SRC)/Core/HLE/sceKernelMbx.cpp \ + $(SRC)/Core/HLE/sceKernelMsgPipe.cpp \ + $(SRC)/Core/HLE/sceKernelSemaphore.cpp \ + $(SRC)/Core/HLE/sceKernelThread.cpp \ + $(SRC)/Core/HLE/sceKernelTime.cpp \ + $(SRC)/Core/HLE/sceKernelVTimer.cpp \ + $(SRC)/Core/HLE/sceMpeg.cpp \ + $(SRC)/Core/HLE/sceNet.cpp \ + $(SRC)/Core/HLE/sceOpenPSID.cpp \ + $(SRC)/Core/HLE/sceParseHttp.cpp \ + $(SRC)/Core/HLE/sceParseUri.cpp \ + $(SRC)/Core/HLE/scePower.cpp \ + $(SRC)/Core/HLE/sceRtc.cpp \ + $(SRC)/Core/HLE/scePsmf.cpp \ + $(SRC)/Core/HLE/sceSas.cpp \ + $(SRC)/Core/HLE/sceSsl.cpp \ + $(SRC)/Core/HLE/sceUmd.cpp \ + $(SRC)/Core/HLE/sceUsb.cpp \ + $(SRC)/Core/HLE/sceUtility.cpp \ + $(SRC)/Core/HLE/sceVaudio.cpp \ + $(SRC)/Core/FileSystems/BlockDevices.cpp \ + $(SRC)/Core/FileSystems/ISOFileSystem.cpp \ + $(SRC)/Core/FileSystems/MetaFileSystem.cpp \ + $(SRC)/Core/FileSystems/DirectoryFileSystem.cpp \ + $(SRC)/Core/MIPS/MIPS.cpp.arm \ + $(SRC)/Core/MIPS/MIPSAnalyst.cpp \ + $(SRC)/Core/MIPS/MIPSDis.cpp \ + $(SRC)/Core/MIPS/MIPSDisVFPU.cpp \ + $(SRC)/Core/MIPS/MIPSInt.cpp.arm \ + $(SRC)/Core/MIPS/MIPSIntVFPU.cpp.arm \ + $(SRC)/Core/MIPS/MIPSTables.cpp.arm \ + $(SRC)/Core/MIPS/MIPSVFPUUtils.cpp \ + $(SRC)/Core/MIPS/MIPSCodeUtils.cpp \ + $(SRC)/Core/MIPS/MIPSDebugInterface.cpp \ + $(SRC)/Core/MIPS/JitCommon/JitCommon.cpp \ + $(SRC)/Core/MIPS/ARM/ArmJitCache.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompALU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompBranch.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompFPU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompLoadStore.cpp \ + $(SRC)/Core/MIPS/ARM/ArmCompVFPU.cpp \ + $(SRC)/Core/MIPS/ARM/ArmAsm.cpp \ + $(SRC)/Core/MIPS/ARM/ArmJit.cpp \ + $(SRC)/Core/MIPS/ARM/ArmRegCache.cpp \ + $(SRC)/Core/MIPS/ARM/ArmRegCacheFPU.cpp \ + $(SRC)/Core/Util/BlockAllocator.cpp \ + $(SRC)/Core/Util/ppge_atlas.cpp \ + $(SRC)/Core/Util/PPGeDraw.cpp + + +include $(BUILD_SHARED_LIBRARY) + +$(call import-module,libzip) +$(call import-module,native) diff --git a/Source/Android/jni/Application.mk b/Source/Android/jni/Application.mk new file mode 100644 index 0000000000..d18d3a46ff --- /dev/null +++ b/Source/Android/jni/Application.mk @@ -0,0 +1,4 @@ +APP_STL := stlport_static +APP_ABI := armeabi-v7a armeabi + +#APP_ABI := armeabi-v7a diff --git a/Source/Android/project.properties b/Source/Android/project.properties new file mode 100644 index 0000000000..a3ee5ab64f --- /dev/null +++ b/Source/Android/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-17 diff --git a/Source/Android/res/drawable-hdpi/launcher.png b/Source/Android/res/drawable-hdpi/launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..da35bbad811a8217ca7d998c325b3a91f00a94e1 GIT binary patch literal 14225 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 literal 0 HcmV?d00001 diff --git a/Source/Android/res/drawable-xxhdpi/launcher.png b/Source/Android/res/drawable-xxhdpi/launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb72b57bb1bf87b94d5f327bc055bfc102c65b1 GIT binary patch literal 82300 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 + + + + + + + + + diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml new file mode 100644 index 0000000000..2cfdcb6e7e --- /dev/null +++ b/Source/Android/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + Dolphin Emulator + + diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/Button.java b/Source/Android/src/org/dolphinemu/dolphinemu/Button.java new file mode 100644 index 0000000000..629e572d83 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/Button.java @@ -0,0 +1,33 @@ +package org.dolphinemu.dolphinemu; + +public class Button { + private String ButtonID; + private float _x; + private float _y; + private float _ex; + private float _ey; + public Button(String Button, float[] Coords) + { + ButtonID = Button; + _x = Coords[0]; + _y = Coords[1]; + _ex = Coords[4]; + _ey = Coords[5]; + } + public float X() + { + return _x; + } + public float Y() + { + return _y; + } + public float EX() + { + return _ex; + } + public float EY() + { + return _ey; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java b/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java new file mode 100644 index 0000000000..ee7a8f79d0 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/ButtonManager.java @@ -0,0 +1,43 @@ +package org.dolphinemu.dolphinemu; + +public class ButtonManager { + + private final int NUMBUTTONS = 15; + + Button[] Buttons; + float[][] ButtonCoords = + { // X, Y, X, EY, EX, EY, EX, Y + {0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f}, + {0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f}, + }; + public ButtonManager() + { + Buttons = new Button[NUMBUTTONS]; + + Buttons[0] = new Button("A", ButtonCoords[0]); + Buttons[1] = new Button("B", ButtonCoords[1]); + + } + Button GetButton(int ID) + { + return Buttons[ID]; + } + float[][] GetButtonCoords() + { + return ButtonCoords; + } + public int ButtonPressed(int action, float x, float y) + { + for (int a = 0; a < 2; ++a) + { + if (x >= Buttons[a].X() && + x <= Buttons[a].EX() && + -y >= Buttons[a].Y() && + -y <= Buttons[a].EY()) + { + return a; + } + } + return -1; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java new file mode 100644 index 0000000000..f95195b53e --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -0,0 +1,124 @@ +package org.dolphinemu.dolphinemu; + +import javax.microedition.khronos.egl.EGL10; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLContext; +import javax.microedition.khronos.egl.EGLDisplay; + +import android.app.Activity; +import android.content.Intent; +import android.content.res.Configuration; +import android.opengl.GLSurfaceView; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.MotionEvent; +import android.view.WindowManager; + +public class DolphinEmulator extends Activity { + + static private NativeGLSurfaceView GLview = null; + static private NativeRenderer Renderer = null; + static private boolean Running = false; + + private float screenWidth; + private float screenHeight; + + public static native void SetKey(int Value, int Key); + + static + { + try + { + System.loadLibrary("dolphin-emu-nogui"); + } + catch (Exception ex) + { + Log.w("me", ex.toString()); + } + } + @Override + public void onStop() + { + super.onStop(); + if (Running) + Renderer.StopEmulation(); + } + @Override + public void onPause() + { + super.onPause(); + if (Running) + Renderer.PauseEmulation(); + } + @Override + public void onResume() + { + super.onResume(); + if (Running) + Renderer.UnPauseEmulation(); + } + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (savedInstanceState == null) + { + Intent ListIntent = new Intent(this, NativeListView.class); + startActivityForResult(ListIntent, 1); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) + { + super.onActivityResult(requestCode, resultCode, data); + + if (resultCode == Activity.RESULT_OK) + { + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager wm = (WindowManager) getApplicationContext().getSystemService(getApplicationContext().WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut + wm.getDefaultDisplay().getMetrics(displayMetrics); + screenWidth = displayMetrics.widthPixels; + screenHeight = displayMetrics.heightPixels; + + + String FileName = data.getStringExtra("Select"); + Renderer = new NativeRenderer(); + Renderer.setContext(getApplicationContext()); + + GLview = new NativeGLSurfaceView(this); + GLview.setEGLContextClientVersion(2); + GLview.setRenderer(Renderer); + + GLview.SetFileName(FileName); + setContentView(GLview); + Running = true; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) + { + float X, Y; + int Action; + X = event.getX(); + Y = event.getY(); + Action = event.getActionMasked(); + + int Button = Renderer.ButtonPressed(Action, ((X / screenWidth) * 2.0f) - 1.0f, ((Y / screenHeight) * 2.0f) - 1.0f); + + if (Button != -1) + SetKey(Action, Button); + + return false; + } + + public boolean overrideKeys() + { + return false; + } + +} \ No newline at end of file diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java new file mode 100644 index 0000000000..b49149a36c --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FileArrayAdapter.java @@ -0,0 +1,53 @@ +package org.dolphinemu.dolphinemu; + +import java.util.List; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +public class FileArrayAdapter extends ArrayAdapter