mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 14:13:15 +08:00
Updated Android cross-compilation on Windows.
This commit is contained in:
parent
f8e4b10248
commit
4c7a8f8d24
5
android/android-opencv/cmake_android.cmd
Normal file
5
android/android-opencv/cmake_android.cmd
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
PUSHD %~dp0
|
||||||
|
SET PROJECT_NAME=android-opencv
|
||||||
|
CALL ..\scripts\cmake_android.cmd
|
||||||
|
POPD
|
@ -7,7 +7,5 @@
|
|||||||
# "build.properties", and override values to adapt the script to your
|
# "build.properties", and override values to adapt the script to your
|
||||||
# project structure.
|
# project structure.
|
||||||
|
|
||||||
#android.library=true
|
|
||||||
# Project target.
|
# Project target.
|
||||||
target=android-7
|
target=android-7
|
||||||
android.library=true
|
|
||||||
|
@ -148,20 +148,21 @@ if( EXISTS ${ANDROID_NDK} )
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set( ANDROID_API_LEVEL $ENV{ANDROID_API_LEVEL} )
|
set( ANDROID_API_LEVEL $ENV{ANDROID_API_LEVEL} )
|
||||||
string( REGEX REPLACE "android-([0-9]+)" "\\1" ANDROID_API_LEVEL "${ANDROID_API_LEVEL}" )
|
string( REGEX REPLACE "[\t ]*android-([0-9]+)[\t ]*" "\\1" ANDROID_API_LEVEL "${ANDROID_API_LEVEL}" )
|
||||||
|
string( REGEX REPLACE "[\t ]*([0-9]+)[\t ]*" "\\1" ANDROID_API_LEVEL "${ANDROID_API_LEVEL}" )
|
||||||
|
|
||||||
set( PossibleAndroidLevels "3;4;5;8;9" )
|
set( PossibleAndroidLevels "3;4;5;8;9" )
|
||||||
set( ANDROID_API_LEVEL ${ANDROID_API_LEVEL} CACHE STRING "android API level" )
|
set( ANDROID_API_LEVEL ${ANDROID_API_LEVEL} CACHE STRING "android API level" )
|
||||||
set_property( CACHE ANDROID_API_LEVEL PROPERTY STRINGS ${PossibleAndroidLevels} )
|
set_property( CACHE ANDROID_API_LEVEL PROPERTY STRINGS ${PossibleAndroidLevels} )
|
||||||
|
|
||||||
if( NOT ANDROID_API_LEVEL GREATER 2 )
|
if( NOT ANDROID_API_LEVEL GREATER 2 )
|
||||||
set( ANDROID_API_LEVEL 8 )
|
set( ANDROID_API_LEVEL 8)
|
||||||
message( STATUS "Using default android API level android-${ANDROID_API_LEVEL}" )
|
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 environment variable: ANDROID_API_LEVEL" )
|
message( STATUS "If you prefer to use a different API level, please define the environment variable: ANDROID_API_LEVEL" )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set( ANDROID_NDK_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/${NDKSYSTEM}" )
|
set( ANDROID_NDK_TOOLCHAIN_ROOT "${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/${NDKSYSTEM}" )
|
||||||
set( ANDROID_NDK_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_API_LEVEL}/arch-arm/" )
|
set( ANDROID_NDK_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_API_LEVEL}/arch-arm" )
|
||||||
|
|
||||||
__TOOLCHAIN_DETECT_API_LEVEL( "${ANDROID_NDK_SYSROOT}/usr/include/android/api-level.h" ${ANDROID_API_LEVEL} )
|
__TOOLCHAIN_DETECT_API_LEVEL( "${ANDROID_NDK_SYSROOT}/usr/include/android/api-level.h" ${ANDROID_API_LEVEL} )
|
||||||
|
|
||||||
@ -180,6 +181,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
set( ANDROID_NDK_TOOLCHAIN_ROOT ${ANDROID_NDK_TOOLCHAIN_ROOT} CACHE PATH "root of the Android NDK standalone toolchain" FORCE )
|
set( ANDROID_NDK_TOOLCHAIN_ROOT ${ANDROID_NDK_TOOLCHAIN_ROOT} CACHE PATH "root of the Android NDK standalone toolchain" FORCE )
|
||||||
|
set( ANDROID_NDK_SYSROOT "${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot" )
|
||||||
|
|
||||||
if( NOT EXISTS ${ANDROID_NDK_TOOLCHAIN_ROOT} )
|
if( NOT EXISTS ${ANDROID_NDK_TOOLCHAIN_ROOT} )
|
||||||
message( FATAL_ERROR "neither ${ANDROID_NDK} nor ${ANDROID_NDK_TOOLCHAIN_ROOT} does not exist!
|
message( FATAL_ERROR "neither ${ANDROID_NDK} nor ${ANDROID_NDK_TOOLCHAIN_ROOT} does not exist!
|
||||||
@ -192,7 +194,7 @@ else()
|
|||||||
sudo ln -s ~/my-android-toolchain ${ANDROID_NDK_TOOLCHAIN_DEFAULT_SEARCH_PATH}" )
|
sudo ln -s ~/my-android-toolchain ${ANDROID_NDK_TOOLCHAIN_DEFAULT_SEARCH_PATH}" )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
__TOOLCHAIN_DETECT_API_LEVEL( "${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot/usr/include/android/api-level.h" )
|
__TOOLCHAIN_DETECT_API_LEVEL( "${ANDROID_NDK_SYSROOT}/usr/include/android/api-level.h" )
|
||||||
|
|
||||||
#message( STATUS "Using android NDK standalone toolchain from ${ANDROID_NDK_TOOLCHAIN_ROOT}" )
|
#message( STATUS "Using android NDK standalone toolchain from ${ANDROID_NDK_TOOLCHAIN_ROOT}" )
|
||||||
set( BUILD_WITH_ANDROID_NDK_TOOLCHAIN True )
|
set( BUILD_WITH_ANDROID_NDK_TOOLCHAIN True )
|
||||||
@ -253,15 +255,16 @@ endif()
|
|||||||
SET( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS ON CACHE INTERNAL "" FORCE)
|
SET( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS ON CACHE INTERNAL "" FORCE)
|
||||||
|
|
||||||
# where is the target environment
|
# where is the target environment
|
||||||
|
set( CMAKE_FIND_ROOT_PATH ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi ${ANDROID_NDK_SYSROOT} ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_PREFIX}/share )
|
||||||
|
|
||||||
if( BUILD_WITH_ANDROID_NDK )
|
if( BUILD_WITH_ANDROID_NDK )
|
||||||
set( STL_LIBRARIES_PATH "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ARMEABI_NDK_NAME}" )
|
set( STL_PATH "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++" )
|
||||||
set( CMAKE_FIND_ROOT_PATH ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi ${ANDROID_NDK_SYSROOT} )
|
set( STL_LIBRARIES_PATH "${STL_PATH}/libs/${ARMEABI_NDK_NAME}" )
|
||||||
include_directories( ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/include ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ARMEABI_NDK_NAME}/include )
|
include_directories( ${STL_PATH}/include ${STL_LIBRARIES_PATH}/include )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if( BUILD_WITH_ANDROID_NDK_TOOLCHAIN )
|
if( BUILD_WITH_ANDROID_NDK_TOOLCHAIN )
|
||||||
set( STL_LIBRARIES_PATH "${CMAKE_INSTALL_PREFIX}/lib" )
|
set( STL_LIBRARIES_PATH "${CMAKE_INSTALL_PREFIX}/lib" )
|
||||||
set( CMAKE_FIND_ROOT_PATH ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi ${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_PREFIX}/share )
|
|
||||||
#for some reason this is needed? TODO figure out why...
|
#for some reason this is needed? TODO figure out why...
|
||||||
include_directories( ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi/include/c++/4.4.3/arm-linux-androideabi )
|
include_directories( ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi/include/c++/4.4.3/arm-linux-androideabi )
|
||||||
endif()
|
endif()
|
||||||
@ -345,7 +348,7 @@ if( NOT NO_SWIG )
|
|||||||
macro( SET_SWIG_JAVA_PACKAGE package_name )
|
macro( SET_SWIG_JAVA_PACKAGE package_name )
|
||||||
string( REGEX REPLACE "[.]" "/" package_name_output ${package_name} )
|
string( REGEX REPLACE "[.]" "/" package_name_output ${package_name} )
|
||||||
set( CMAKE_SWIG_OUTDIR ${SWIG_OUTPUT_ROOT}/${package_name_output} )
|
set( CMAKE_SWIG_OUTDIR ${SWIG_OUTPUT_ROOT}/${package_name_output} )
|
||||||
set( CMAKE_SWIG_FLAGS "-package" "'${package_name}'" )
|
set( CMAKE_SWIG_FLAGS "-package" "\"${package_name}\"" )
|
||||||
endmacro()
|
endmacro()
|
||||||
else()
|
else()
|
||||||
message( STATUS "SWIG is not found" )
|
message( STATUS "SWIG is not found" )
|
||||||
|
@ -1,11 +1,96 @@
|
|||||||
cd %~dp0\..
|
@ECHO OFF
|
||||||
|
|
||||||
::rmdir /S /Q build
|
:: don't modify the caller's environment
|
||||||
mkdir build 2>nul
|
SETLOCAL
|
||||||
|
|
||||||
SET ANDROID_NDK=C:\apps\android-ndk-r5b
|
:: enable command extensions
|
||||||
SET CMAKE_EXE=C:\apps\cmake\bin\cmake.exe
|
VERIFY BADVALUE 2>NUL
|
||||||
SET MAKE_EXE=C:\apps\gnuport\make.exe
|
SETLOCAL ENABLEEXTENSIONS
|
||||||
|
IF ERRORLEVEL 1 ECHO Unable to enable command extensions.
|
||||||
|
|
||||||
cd build
|
:: load configuration
|
||||||
%CMAKE_EXE% -C ../CMakeCache.android.initial.cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=..\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=%MAKE_EXE% ..\..
|
PUSHD %~dp0
|
||||||
|
IF NOT EXIST .\wincfg.cmd GOTO nocfg
|
||||||
|
CALL .\wincfg.cmd
|
||||||
|
SET OPENCV_BUILD_DIR="%cd%"\..\%BUILD_DIR%
|
||||||
|
POPD
|
||||||
|
|
||||||
|
:: path to project root
|
||||||
|
SET SOURCE_DIR="%cd%"
|
||||||
|
|
||||||
|
:: create build dir
|
||||||
|
::rmdir /S /Q %BUILD_DIR% &:: uncomment this line to rebuild instead of build
|
||||||
|
MKDIR %BUILD_DIR% 2>NUL
|
||||||
|
PUSHD %BUILD_DIR%
|
||||||
|
|
||||||
|
:: run cmake
|
||||||
|
ECHO.
|
||||||
|
ECHO Runnning cmake...
|
||||||
|
ECHO ARM_TARGET=%ARM_TARGET%
|
||||||
|
ECHO.
|
||||||
|
IF NOT EXIST %SOURCE_DIR%\CMakeCache.android.initial.cmake GOTO other-cmake
|
||||||
|
:opencv-cmake
|
||||||
|
%CMAKE_EXE% -G"MinGW Makefiles" -DARM_TARGET="%ARM_TARGET%" -C %SOURCE_DIR%\CMakeCache.android.initial.cmake -DCMAKE_TOOLCHAIN_FILE=%SOURCE_DIR%\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE_EXE%" %SOURCE_DIR%\..
|
||||||
|
IF ERRORLEVEL 1 GOTO cmakefails
|
||||||
|
GOTO cmakefin
|
||||||
|
:other-cmake
|
||||||
|
%CMAKE_EXE% -G"MinGW Makefiles" -DARM_TARGET="%ARM_TARGET%" -DOpenCV_DIR=%OPENCV_BUILD_DIR% -DCMAKE_PROGRAM_PATH=%SWIG_DIR% -DCMAKE_TOOLCHAIN_FILE=%OPENCV_BUILD_DIR%\..\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE_EXE%" %SOURCE_DIR%
|
||||||
|
IF ERRORLEVEL 1 GOTO cmakefails
|
||||||
|
GOTO cmakefin
|
||||||
|
:cmakefin
|
||||||
|
|
||||||
|
:: run make
|
||||||
|
ECHO.
|
||||||
|
ECHO Building native libs...
|
||||||
|
%MAKE_EXE% -j %NUMBER_OF_PROCESSORS% &:: VERBOSE=1
|
||||||
|
IF ERRORLEVEL 1 GOTO makefail
|
||||||
|
|
||||||
|
IF NOT EXIST ..\jni GOTO fin
|
||||||
|
|
||||||
|
:: configure java part
|
||||||
|
POPD
|
||||||
|
PUSHD .
|
||||||
|
ECHO.
|
||||||
|
ECHO Updating Android project...
|
||||||
|
CALL %ANDROID_SDK%\tools\android update project --name %PROJECT_NAME% --path .
|
||||||
|
IF ERRORLEVEL 1 GOTO androidfail
|
||||||
|
|
||||||
|
:: compile java part
|
||||||
|
ECHO.
|
||||||
|
ECHO Compiling Android project...
|
||||||
|
CALL %ANT_DIR%\bin\ant compile
|
||||||
|
IF ERRORLEVEL 1 GOTO antfail
|
||||||
|
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:nocfg
|
||||||
|
ECHO.
|
||||||
|
ECHO Could not find wincfg.cmd file.
|
||||||
|
ECHO.
|
||||||
|
ECHO You should create opencv\android\scripts\wincfg.cmd
|
||||||
|
ECHO from template opencv\android\scripts\wincfg.cmd.tmpl
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:antfail
|
||||||
|
ECHO.
|
||||||
|
ECHO failed to compile android project
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:androidfail
|
||||||
|
ECHO.
|
||||||
|
ECHO failed to update android project
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:makefail
|
||||||
|
ECHO.
|
||||||
|
ECHO make failed
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:cmakefail
|
||||||
|
ECHO.
|
||||||
|
ECHO cmake failed
|
||||||
|
GOTO fin
|
||||||
|
|
||||||
|
:fin
|
||||||
|
POPD
|
||||||
|
ENDLOCAL
|
@ -1,11 +0,0 @@
|
|||||||
cd %~dp0\..
|
|
||||||
|
|
||||||
::rmdir /S /Q build
|
|
||||||
mkdir build 2>nul
|
|
||||||
|
|
||||||
SET ANDROID_NDK=C:\apps\android-ndk-r5b
|
|
||||||
SET CMAKE_EXE=C:\apps\cmake\bin\cmake.exe
|
|
||||||
SET MAKE_EXE=C:\apps\gnuport\make.exe
|
|
||||||
|
|
||||||
cd build
|
|
||||||
%CMAKE_EXE% -C ../CMakeCache.android.initial.cmake -G"Unix Makefiles" -DARM_TARGET=armeabi -DCMAKE_TOOLCHAIN_FILE=..\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=%MAKE_EXE% ..\..
|
|
@ -1,11 +0,0 @@
|
|||||||
cd %~dp0\..
|
|
||||||
|
|
||||||
::rmdir /S /Q build
|
|
||||||
mkdir build 2>nul
|
|
||||||
|
|
||||||
SET ANDROID_NDK=C:\apps\android-ndk-r5b
|
|
||||||
SET CMAKE_EXE=C:\apps\cmake\bin\cmake.exe
|
|
||||||
SET MAKE_EXE=C:\apps\gnuport\make.exe
|
|
||||||
|
|
||||||
cd build
|
|
||||||
%CMAKE_EXE% -C ../CMakeCache.android.initial.cmake -G"Unix Makefiles" -DARM_TARGET="armeabi-v7a with NEON" -DCMAKE_TOOLCHAIN_FILE=..\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=%MAKE_EXE% ..\..
|
|
26
android/scripts/wincfg.cmd.tmpl
Normal file
26
android/scripts/wincfg.cmd.tmpl
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
:: variables required for OpenCV build ::
|
||||||
|
SET ANDROID_NDK=C:\full\path\to\your\copy\of\android\NDK\android-ndk-r5b
|
||||||
|
SET CMAKE_EXE=C:\full\path\to\cmake\utility\cmake.exe
|
||||||
|
SET MAKE_EXE=C:\full\path\to\native\port\of\make\utility\make.exe
|
||||||
|
|
||||||
|
:: variables required for android-opencv build ::
|
||||||
|
SET SWIG_DIR=C:\full\path\to\SWIG\directory\swigwin-2.0.3
|
||||||
|
SET ANDROID_SDK=C:\full\path\to\your\copy\of\android\SDK\android-sdk-windows
|
||||||
|
SET ANT_DIR=C:\full\path\to\ant\directory\apache-ant-1.8.2
|
||||||
|
SET JAVA_HOME=C:\full\path\to\JDK\jdk1.6.0_25
|
||||||
|
|
||||||
|
:: configuration options ::
|
||||||
|
:::: general ARM-V7 settings
|
||||||
|
SET ARM_TARGET=armeabi-v7a
|
||||||
|
SET BUILD_DIR=build
|
||||||
|
|
||||||
|
:::: uncomment following lines to compile for emulator or old device
|
||||||
|
::SET ARM_TARGET=armeabi
|
||||||
|
::SET BUILD_DIR=build_armeabi
|
||||||
|
|
||||||
|
:::: uncomment following lines to compile for ARM-V7 with NEON support
|
||||||
|
::SET ARM_TARGET="armeabi-v7a with NEON"
|
||||||
|
::SET BUILD_DIR=build_neon
|
||||||
|
|
||||||
|
:::: other options
|
||||||
|
::SET ANDROID_API_LEVEL=8 &:: android-3 is enough for OpenCV but android-8 is recommended
|
Loading…
Reference in New Issue
Block a user