Fixed Android build
authorAndrey Kamaev <no@email>
Fri, 3 Jun 2011 12:01:55 +0000 (12:01 +0000)
committerAndrey Kamaev <no@email>
Fri, 3 Jun 2011 12:01:55 +0000 (12:01 +0000)
CMakeLists.txt
OpenCVModule.cmake
android/CMakeCache.android.initial.cmake
android/android.toolchain.cmake
android/scripts/wincfg.cmd.tmpl
modules/highgui/CMakeLists.txt

index 08a3d40..abbfe69 100644 (file)
@@ -245,11 +245,6 @@ endif()
 if(CMAKE_COMPILER_IS_GNUCXX)\r
     set(ENABLE_PROFILING OFF CACHE BOOL "Enable profiling in the GCC compiler (Add flags: -g -pg)")\r
     set(USE_OMIT_FRAME_POINTER ON CACHE BOOL "Enable -fomit-frame-pointer for GCC")\r
-    if(${CMAKE_SYSTEM_PROCESSOR} MATCHES arm*)\r
-        # We can use only -O2 because the -O3 causes gcc crash\r
-        set(USE_O2 ON CACHE BOOL "Enable -O2 for GCC")\r
-        set(USE_FAST_MATH ON CACHE BOOL "Enable -ffast-math for GCC")\r
-    endif()\r
 \r
     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES amd64*|x86_64*)\r
         set(X86_64 1)\r
@@ -257,7 +252,7 @@ if(CMAKE_COMPILER_IS_GNUCXX)
     \r
     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES i686*|i386*|x86*)\r
         set(X86 1)\r
-    endif()   \r
+    endif()\r
 \r
     if(${CMAKE_SYSTEM_PROCESSOR} MATCHES powerpc*)\r
         set(USE_O3 ON CACHE BOOL "Enable -O3 for GCC")\r
@@ -1148,14 +1143,8 @@ set(CMAKE_BASE_INCLUDE_DIRS_CONFIGCMAKE "\"${CMAKE_CURRENT_SOURCE_DIR}\"")
 \r
 set(CMAKE_LIB_DIRS_CONFIGCMAKE "${LIBRARY_OUTPUT_PATH}")\r
 \r
-if (ANDROID)\r
-    if (NOT BUILD_SHARED_LIBS)\r
-      set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} "${CMAKE_BINARY_DIR}/lib")\r
-    endif()\r
-\r
-    if( HAVE_ANDROID_NATIVE_CAMERA )\r
-      set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} ${NativeCamera_LIB_DIR})\r
-    endif()\r
+if( HAVE_ANDROID_NATIVE_CAMERA )\r
+    set(CMAKE_LIB_DIRS_CONFIGCMAKE ${CMAKE_LIB_DIRS_CONFIGCMAKE} ${NativeCamera_LIB_DIR})\r
 endif()\r
 \r
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCVConfig.cmake.in" "${CMAKE_BINARY_DIR}/OpenCVConfig.cmake" IMMEDIATE @ONLY)\r
index ab12991..8cf4f21 100644 (file)
@@ -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
index 060fe5a..e6b86d3 100644 (file)
@@ -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" )
index c421030..ba540e1 100644 (file)
@@ -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)
index f60c07a..f0a5b54 100644 (file)
@@ -1,4 +1,5 @@
 :: variables required for OpenCV build ::\r
+:: Note: all pathes should be specified without tailing slashes!\r
 SET ANDROID_NDK=C:\full\path\to\your\copy\of\android\NDK\android-ndk-r5b\r
 SET CMAKE_EXE=C:\full\path\to\cmake\utility\cmake.exe\r
 SET MAKE_EXE=C:\full\path\to\native\port\of\make\utility\make.exe\r
@@ -23,4 +24,4 @@ SET BUILD_DIR=build
 ::SET BUILD_DIR=build_neon\r
 \r
 :::: other options\r
-::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\r
index 27ed6af..d216b60 100644 (file)
@@ -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