From 9c71134caf34dfd458e051298fb4e25ea0069624 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Mon, 20 Jun 2011 15:35:05 +0000 Subject: [PATCH] Added generation of OpenCV.mk file for Android development with ndk-build tool --- CMakeLists.txt | 43 ++++++++++++++++++++++++++++++++++ OpenCV.mk.in | 57 ++++++++++++++++++++++++++++++++++++++++++++++ OpenCVConfig.cmake.in | 2 +- android/README.android | 1 + android/README.android.txt | 1 - 5 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 OpenCV.mk.in create mode 100644 android/README.android delete mode 100644 android/README.android.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 79c527a..2b83129 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1230,6 +1230,49 @@ if(WIN32) install(FILES "${CMAKE_BINARY_DIR}/cvconfig.h" DESTINATION "${CMAKE_INSTALL_PREFIX}/include") endif() +# -------------------------------------------------------------------------------------------- +# Installation for Android ndk-build makefile: OpenCV.mk +# Part 1/2: ${BIN_DIR}/OpenCV.mk -> For use *without* "make install" +# Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install" +# ------------------------------------------------------------------------------------------- +if(ANDROID) + if(BUILD_SHARED_LIBS) + SET(OPENCV_LIBTYPE_CONFIGMAKE "SHARED") + else() + SET(OPENCV_LIBTYPE_CONFIGMAKE "STATIC") + endif() + if(BUILD_ANDROID_CAMERA_WRAPPER) + set(CMAKE_CAMERA_LIBS_CONFIGCMAKE "native_camera_r${ANDROID_VERSION}") + else() + SET(CMAKE_CAMERA_LIBS_CONFIGCMAKE "") + file(GLOB CMAKE_CAMERA_LIBS "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/lib/libnative_camera_r*.so") + foreach(cam_lib ${CMAKE_CAMERA_LIBS}) + get_filename_component(cam_lib "${cam_lib}" NAME) + string(REGEX REPLACE "lib(native_camera_r[0-9]+\\.[0-9]+\\.[0-9]+)\\.so" "\\1" cam_lib "${cam_lib}") + SET(CMAKE_CAMERA_LIBS_CONFIGCMAKE "${CMAKE_CAMERA_LIBS_CONFIGCMAKE} ${cam_lib}") + endforeach() + endif() +endif(ANDROID) +# ------------------------------------------------------------------------------------------- +# Part 1/2: ${BIN_DIR}/OpenCV.mk -> For use *without* "make install" +# ------------------------------------------------------------------------------------------- +if(ANDROID) + set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\"\$(RELATIVE_PREFIX)${OPENCV_CONFIG_FILE_INCLUDE_DIR}\" \"\$(RELATIVE_PREFIX)${CMAKE_CURRENT_SOURCE_DIR}/include\" \"\$(RELATIVE_PREFIX)${CMAKE_CURRENT_SOURCE_DIR}/include/opencv\"") + set(CMAKE_BASE_INCLUDE_DIRS_CONFIGCMAKE "\"\$(RELATIVE_PREFIX)${CMAKE_CURRENT_SOURCE_DIR}\"") + set(CMAKE_LIB_DIRS_CONFIGCMAKE "\$(RELATIVE_PREFIX)${LIBRARY_OUTPUT_PATH}") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/OpenCV.mk" IMMEDIATE @ONLY) +endif(ANDROID) + +# ------------------------------------------------------------------------------------------- +# Part 2/2: ${BIN_DIR}/unix-install/OpenCV.mk -> For use with "make install" +# ------------------------------------------------------------------------------------------- +if(ANDROID) + set(CMAKE_INCLUDE_DIRS_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../../include/opencv \$(OPENCV_THIS_DIR)/../../include") + set(CMAKE_BASE_INCLUDE_DIRS_CONFIGCMAKE "") + set(CMAKE_LIB_DIRS_CONFIGCMAKE "\$(OPENCV_THIS_DIR)/../../lib") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenCV.mk.in" "${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk" IMMEDIATE @ONLY) + install(FILES ${CMAKE_BINARY_DIR}/unix-install/OpenCV.mk DESTINATION share/opencv/) +endif(ANDROID) # -------------------------------------------------------------------------------------------- # Part 2/2: ${BIN_DIR}/unix-install/opencv.pc -> For use *with* "make install" diff --git a/OpenCV.mk.in b/OpenCV.mk.in new file mode 100644 index 0000000..f3ce25c --- /dev/null +++ b/OpenCV.mk.in @@ -0,0 +1,57 @@ +RELATIVE_PREFIX:=.$(shell echo $(abspath $(LOCAL_PATH))| sed -e "s/\/[^\/]*/\/../g" ) +OPENCV_THIS_DIR:=$(RELATIVE_PREFIX)$(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +OPENCV_LIBS_DIR:=@CMAKE_LIB_DIRS_CONFIGCMAKE@ +OPENCV_BASEDIR:=@CMAKE_BASE_INCLUDE_DIRS_CONFIGCMAKE@ +OPENCV_LOCAL_C_INCLUDES:=@CMAKE_INCLUDE_DIRS_CONFIGCMAKE@ + +OPENCV_MODULES := contrib calib3d objdetect features2d imgproc video highgui ml legacy flann core + +OPENCV_LIB_TYPE:=@OPENCV_LIBTYPE_CONFIGMAKE@ +ifeq ($(OPENCV_LIB_TYPE),SHARED) + OPENCV_LIB_SUFFIX:=so + OPENCV_EXTRA_COMPONENTS:= +else + OPENCV_LIB_SUFFIX:=a + OPENCV_MODULES+= androidcamera + OPENCV_EXTRA_COMPONENTS:=@JPEG_LIBRARIES@ @PNG_LIBRARIES@ @TIFF_LIBRARIES@ @JASPER_LIBRARIES@ zlib +endif + +OPENCV_CAMERA_MODULES := @CMAKE_CAMERA_LIBS_CONFIGCMAKE@ + +define add_opencv_module + include $(CLEAR_VARS) + LOCAL_MODULE:=opencv_$1 + LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/libopencv_$1.$(OPENCV_LIB_SUFFIX) + include $(PREBUILT_@OPENCV_LIBTYPE_CONFIGMAKE@_LIBRARY) +endef + +define add_opencv_extra_component + include $(CLEAR_VARS) + LOCAL_MODULE:=$1 + LOCAL_SRC_FILES:=$(OPENCV_THIS_DIR)/3rdparty/lib/lib$1.a + include $(PREBUILT_STATIC_LIBRARY) +endef + +define add_opencv_camera_module + include $(CLEAR_VARS) + LOCAL_MODULE:=$1 + LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/lib$1.so + include $(PREBUILT_SHARED_LIBRARY) +endef + +$(foreach module,$(OPENCV_MODULES),$(eval $(call add_opencv_module,$(module)))) +$(foreach module,$(OPENCV_EXTRA_COMPONENTS),$(eval $(call add_opencv_extra_component,$(module)))) +$(foreach module,$(OPENCV_CAMERA_MODULES),$(eval $(call add_opencv_camera_module,$(module)))) + +ifneq ($(OPENCV_BASEDIR),) + OPENCV_LOCAL_C_INCLUDES += $(foreach mod, $(OPENCV_MODULES), $(OPENCV_BASEDIR)/modules/$(mod)/include) +endif + +OPENCV_LOCAL_LIBRARIES += $(foreach mod, $(OPENCV_MODULES), opencv_$(mod)) +OPENCV_LOCAL_LIBRARIES += $(OPENCV_EXTRA_COMPONENTS) +OPENCV_LOCAL_CFLAGS := -fsigned-char -fPIC -DANDROID + +include $(CLEAR_VARS) +LOCAL_C_INCLUDES += $(OPENCV_LOCAL_C_INCLUDES) +LOCAL_STATIC_LIBRARIES += $(OPENCV_LOCAL_LIBRARIES) +LOCAL_CFLAGS += $(OPENCV_LOCAL_CFLAGS) diff --git a/OpenCVConfig.cmake.in b/OpenCVConfig.cmake.in index 10dceaa..8c6948e 100644 --- a/OpenCVConfig.cmake.in +++ b/OpenCVConfig.cmake.in @@ -59,7 +59,7 @@ else() #libraries order is very important because linker from Android NDK is one-pass linker set(OPENCV_LIB_COMPONENTS opencv_contrib opencv_calib3d opencv_objdetect opencv_features2d opencv_imgproc opencv_video opencv_highgui opencv_ml opencv_legacy opencv_flann opencv_core ) IF (NOT @BUILD_SHARED_LIBS@) - set(OPENCV_LIB_COMPONENTS opencv_androidcamera ${OPENCV_LIB_COMPONENTS}) + set(OPENCV_LIB_COMPONENTS ${OPENCV_LIB_COMPONENTS} opencv_androidcamera) ENDIF() endif() diff --git a/android/README.android b/android/README.android new file mode 100644 index 0000000..b9c6880 --- /dev/null +++ b/android/README.android @@ -0,0 +1 @@ +See http://opencv.willowgarage.com/wiki/Android diff --git a/android/README.android.txt b/android/README.android.txt deleted file mode 100644 index 4e8c9d5..0000000 --- a/android/README.android.txt +++ /dev/null @@ -1 +0,0 @@ -See http://opencv.willowgarage.com/wiki/AndroidTrunk \ No newline at end of file -- 2.7.4