diff --git a/CMakeLists.txt b/CMakeLists.txt index 08a3d40252..abbfe69490 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,11 +245,6 @@ endif() if(CMAKE_COMPILER_IS_GNUCXX) set(ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)") set(USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC") - if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*) - # We can use only -O2 because the -O3 causes gcc crash - set(USE_O2 ON CACHE BOOL "Enable -O2 for GCC") - set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC") - endif() if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*|x86_64*) set(X86_64 1) @@ -257,7 +252,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*|i386*|x86*) set(X86 1) - endif() + endif() if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*) set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC") @@ -1148,14 +1143,8 @@ set(CMAKE_BASE_INCLUDE_DIRS_CONFIGCMAKE "\"${CMAKE_CURRENT_SOURCE_DIR}\"") set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}") -if (ANDROID) - if (NOT BUILD_SHARED_LIBS) - set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} "${CMAKE_BINARY_DIR}/lib") - endif() - - if( HAVE_ANDROID_NATIVE_CAMERA ) - set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} ${NativeCamera_LIB_DIR}) - endif() +if( HAVE_ANDROID_NATIVE_CAMERA ) + set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} ${NativeCamera_LIB_DIR}) endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY) diff --git a/OpenCVModule.cmake b/OpenCVModule.cmake index ab12991aff..8cf4f21c8b 100644 --- a/OpenCVModule.cmake +++ b/OpenCVModule.cmake @@ -32,21 +32,27 @@ macro(define_opencv_module name) add_library(${the_target} ${lib_srcs} ${lib_hdrs} ${lib_int_hdrs}) # For dynamic link numbering convenions - set_target_properties(${the_target} PROPERTIES - VERSION ${OPENCV_VERSION} - SOVERSION ${OPENCV_SOVERSION} - OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" - ) - if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(${the_target} PROPERTIES FOLDER "modules") - endif() + if(NOT ANDROID) + # Android SDK build scripts can include only .so files into final .apk + # As result we should not set version properties for Android + set_target_properties(${the_target} PROPERTIES + VERSION ${OPENCV_VERSION} + SOVERSION ${OPENCV_SOVERSION} + ) + endif() + + set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" ) + + if(ENABLE_SOLUTION_FOLDERS) + set_target_properties(${the_target} PROPERTIES FOLDER "modules") + endif() - if (BUILD_SHARED_LIBS) - if(MSVC) - set_target_properties(${the_target} PROPERTIES DEFINE_SYMBOL CVAPI_EXPORTS) - else() - add_definitions(-DCVAPI_EXPORTS) - endif() + if (BUILD_SHARED_LIBS) + if(MSVC) + set_target_properties(${the_target} PROPERTIES DEFINE_SYMBOL CVAPI_EXPORTS) + else() + add_definitions(-DCVAPI_EXPORTS) + endif() endif() # Additional target properties diff --git a/android/CMakeCache.android.initial.cmake b/android/CMakeCache.android.initial.cmake index 060fe5a9b5..e6b86d3484 100644 --- a/android/CMakeCache.android.initial.cmake +++ b/android/CMakeCache.android.initial.cmake @@ -105,3 +105,6 @@ SET( ENABLE_SSE42 OFF CACHE INTERNAL "" FORCE ) #Enable SSSE3 instructions SET( ENABLE_SSSE3 OFF CACHE INTERNAL "" FORCE ) + +#Set output folder to "libs" instead of "lib" for better compatibility with java projects +SET( LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/libs CACHE PATH "path for android libs" ) diff --git a/android/android.toolchain.cmake b/android/android.toolchain.cmake index c4210307e3..ba540e1d4f 100644 --- a/android/android.toolchain.cmake +++ b/android/android.toolchain.cmake @@ -227,6 +227,7 @@ if( ARM_TARGET STREQUAL "armeabi" ) set( ARMEABI true ) set( ARMEABI_NDK_NAME "armeabi" ) set( NEON false ) + set( CMAKE_SYSTEM_PROCESSOR "armv5te" ) else() if( ARM_TARGET STREQUAL "armeabi-v7a with NEON" ) set( NEON true ) @@ -240,6 +241,7 @@ Supported values are: \"armeabi\", \"armeabi-v7a\", \"armeabi-v7a with NEON\", \ endif() set( ARMEABI_V7A true ) set( ARMEABI_NDK_NAME "armeabi-v7a" ) + set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) endif() #setup output directories @@ -248,8 +250,12 @@ set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "root for library o SET( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS OFF CACHE BOOL "") if( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS ) #some cmake standard modules work incorrectly if output paths are changed - set( LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ARMEABI_NDK_NAME} CACHE PATH "path for android libs" FORCE ) - set( EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ARMEABI_NDK_NAME} CACHE PATH "Output directory for applications" FORCE) + if( EXISTS ${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt ) + # these paths are required for jni part of Android projects + # but they may conflict with traditional unix makefile's folder structure + set( LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ARMEABI_NDK_NAME} CACHE PATH "path for android libs" FORCE ) + set( EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ARMEABI_NDK_NAME} CACHE PATH "Output directory for applications" FORCE) + endif() set( CMAKE_INSTALL_PREFIX ${ANDROID_NDK_TOOLCHAIN_ROOT}/user/${ARMEABI_NDK_NAME} CACHE STRING "path for installing" FORCE ) endif() SET( DO_NOT_CHANGE_OUTPUT_PATHS_ON_FIRST_PASS ON CACHE INTERNAL "" FORCE) diff --git a/android/scripts/wincfg.cmd.tmpl b/android/scripts/wincfg.cmd.tmpl index f60c07a124..f0a5b54280 100644 --- a/android/scripts/wincfg.cmd.tmpl +++ b/android/scripts/wincfg.cmd.tmpl @@ -1,4 +1,5 @@ :: variables required for OpenCV build :: +:: Note: all pathes should be specified without tailing slashes! 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 @@ -23,4 +24,4 @@ SET BUILD_DIR=build ::SET BUILD_DIR=build_neon :::: other options -::SET ANDROID_API_LEVEL=8 &:: android-3 is enough for OpenCV but android-8 is recommended \ No newline at end of file +::SET ANDROID_API_LEVEL=8 &:: android-3 is enough for OpenCV but android-8 is recommended diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt index 27ed6af19f..d216b60727 100644 --- a/modules/highgui/CMakeLists.txt +++ b/modules/highgui/CMakeLists.txt @@ -273,11 +273,15 @@ if(PCHSupport_FOUND AND USE_PRECOMPILED_HEADERS) endif() # For dynamic link numbering convenions -set_target_properties(${the_target} PROPERTIES - VERSION ${OPENCV_VERSION} - SOVERSION ${OPENCV_SOVERSION} - OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" - ) +if(NOT ANDROID) + # Android SDK build scripts can include only .so files into final .apk + set_target_properties(${the_target} PROPERTIES + VERSION ${OPENCV_VERSION} + SOVERSION ${OPENCV_SOVERSION} + ) +endif() + +set_target_properties(${the_target} PROPERTIES OUTPUT_NAME "${the_target}${OPENCV_DLLVERSION}" ) # Additional target properties set_target_properties(${the_target} PROPERTIES