From: Maksim Shabunin Date: Fri, 5 Dec 2014 14:48:28 +0000 (+0300) Subject: Build separate world-like iOS framework for contrib X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~2792^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c28fea32c77c56c8003f8e733ff1c730bb8a1a34;p=platform%2Fupstream%2Fopencv.git Build separate world-like iOS framework for contrib --- diff --git a/cmake/OpenCVGenInfoPlist.cmake b/cmake/OpenCVGenInfoPlist.cmake index db418d1..680afb2 100644 --- a/cmake/OpenCVGenInfoPlist.cmake +++ b/cmake/OpenCVGenInfoPlist.cmake @@ -1,3 +1,11 @@ +if(OPENCV_EXTRA_WORLD) + set(OPENCV_APPLE_BUNDLE_NAME "OpenCV_contrib") + set(OPENCV_APPLE_BUNDLE_ID "org.opencv_contrib") +else() + set(OPENCV_APPLE_BUNDLE_NAME "OpenCV") + set(OPENCV_APPLE_BUNDLE_ID "org.opencv") +endif() + if(IOS) configure_file("${OpenCV_SOURCE_DIR}/platforms/ios/Info.plist.in" "${CMAKE_BINARY_DIR}/ios/Info.plist") diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index 9db00de..c5325e2 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -159,8 +159,13 @@ macro(ocv_add_module _name) endif() # add self to the world dependencies + # add to world only extra modules (ON) or only main modules (OFF) + set(__expected_extra 0) + if (OPENCV_EXTRA_WORLD) + set(__expected_extra 1) + endif() if((NOT DEFINED OPENCV_MODULE_IS_PART_OF_WORLD AND NOT OPENCV_MODULE_${the_module}_CLASS STREQUAL "BINDINGS" - AND NOT OPENCV_PROCESSING_EXTRA_MODULES) + AND __expected_extra EQUAL OPENCV_PROCESSING_EXTRA_MODULES) OR OPENCV_MODULE_IS_PART_OF_WORLD ) set(OPENCV_MODULE_${the_module}_IS_PART_OF_WORLD ON CACHE INTERNAL "") diff --git a/cmake/cl2cpp.cmake b/cmake/cl2cpp.cmake index 09cac6c..700f12f 100644 --- a/cmake/cl2cpp.cmake +++ b/cmake/cl2cpp.cmake @@ -28,6 +28,7 @@ ${nested_namespace_start} set(STR_HPP "// This file is auto-generated. Do not edit! +#include \"opencv2/core/ocl.hpp\" #include \"opencv2/core/ocl_genbase.hpp\" #include \"opencv2/core/opencl/ocl_defs.hpp\" diff --git a/modules/world/CMakeLists.txt b/modules/world/CMakeLists.txt index d2f5cb1..ea0df5b 100644 --- a/modules/world/CMakeLists.txt +++ b/modules/world/CMakeLists.txt @@ -44,13 +44,13 @@ ocv_module_include_directories() #message(STATUS "${OPENCV_MODULE_${the_module}_SOURCES}") ocv_create_module(${link_deps}) -if(BUILD_opencv_imgcodecs) +if(BUILD_opencv_imgcodecs AND OPENCV_MODULE_opencv_imgcodecs_IS_PART_OF_WORLD) ocv_imgcodecs_configure_target() endif() -if(BUILD_opencv_videoio) +if(BUILD_opencv_videoio AND OPENCV_MODULE_opencv_videoio_IS_PART_OF_WORLD) ocv_videoio_configure_target() endif() -if(BUILD_opencv_highgui) +if(BUILD_opencv_highgui AND OPENCV_MODULE_opencv_highgui_IS_PART_OF_WORLD) ocv_highgui_configure_target() endif() diff --git a/platforms/ios/Info.plist.in b/platforms/ios/Info.plist.in index b2a3baf..a166934 100644 --- a/platforms/ios/Info.plist.in +++ b/platforms/ios/Info.plist.in @@ -3,9 +3,9 @@ CFBundleName - OpenCV + ${OPENCV_APPLE_BUNDLE_NAME} CFBundleIdentifier - org.opencv + ${OPENCV_APPLE_BUNDLE_ID} CFBundleVersion ${OPENCV_LIBVERSION} CFBundleShortVersionString diff --git a/platforms/ios/build_framework.py b/platforms/ios/build_framework.py index 28ce885..0846e0f 100755 --- a/platforms/ios/build_framework.py +++ b/platforms/ios/build_framework.py @@ -25,7 +25,9 @@ The script should handle minor OpenCV updates efficiently However, opencv2.framework directory is erased and recreated on each run. """ -import glob, re, os, os.path, shutil, string, sys, exceptions, subprocess +import glob, re, os, os.path, shutil, string, sys, exceptions, subprocess, argparse + +opencv_contrib_path = None def execute(cmd): try: @@ -57,6 +59,9 @@ def build_opencv(srcroot, buildroot, target, arch): if arch.startswith("armv"): cmakeargs += " -DENABLE_NEON=ON" + if opencv_contrib_path is not None: + cmakeargs += " -DOPENCV_EXTRA_MODULES_PATH=%s -DOPENCV_EXTRA_WORLD=ON" % opencv_contrib_path + # if cmake cache exists, just rerun cmake to update OpenCV.xcodeproj if necessary if os.path.isfile(os.path.join(builddir, "CMakeCache.txt")): execute("cmake %s ." % (cmakeargs,)) @@ -75,13 +80,15 @@ def build_opencv(srcroot, buildroot, target, arch): def put_framework_together(srcroot, dstroot): "constructs the framework directory after all the targets are built" + name = "opencv2" if opencv_contrib_path is None else "opencv2_contrib" + # find the list of targets (basically, ["iPhoneOS", "iPhoneSimulator"]) targetlist = glob.glob(os.path.join(dstroot, "build", "*")) targetlist = [os.path.basename(t) for t in targetlist] # set the current dir to the dst root currdir = os.getcwd() - framework_dir = dstroot + "/opencv2.framework" + framework_dir = dstroot + "/%s.framework" % name if os.path.isdir(framework_dir): shutil.rmtree(framework_dir) os.makedirs(framework_dir) @@ -97,7 +104,7 @@ def put_framework_together(srcroot, dstroot): # make universal static lib wlist = " ".join(["../build/" + t + "/lib/Release/libopencv_world.a" for t in targetlist]) - execute("lipo -create " + wlist + " -o " + dstdir + "/opencv2") + execute("lipo -create " + wlist + " -o " + dstdir + "/%s" % name) # copy Info.plist shutil.copyfile(tdir0 + "/ios/Info.plist", dstdir + "/Resources/Info.plist") @@ -106,7 +113,7 @@ def put_framework_together(srcroot, dstroot): os.symlink("A", "Versions/Current") os.symlink("Versions/Current/Headers", "Headers") os.symlink("Versions/Current/Resources", "Resources") - os.symlink("Versions/Current/opencv2", "opencv2") + os.symlink("Versions/Current/%s" % name, name) def build_framework(srcroot, dstroot): @@ -124,12 +131,29 @@ def build_framework(srcroot, dstroot): if __name__ == "__main__": - if len(sys.argv) != 2: - print "Usage:\n\t./build_framework.py \n\n" - sys.exit(0) + parser = argparse.ArgumentParser(description='The script builds OpenCV.framework for iOS.') + parser.add_argument('outputdir', nargs=1, help='folder to put built framework') + parser.add_argument('--contrib', help="folder with opencv_contrib repository") + args = parser.parse_args() + + # path to OpenCV main repository - hardcoded ../.. + opencv_path = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../..")) + print "OpenCV:", opencv_path + + # path to OpenCV_contrib repository, can be empty - global variable + if hasattr(args, "contrib") and args.contrib is not None: + if os.path.isdir(args.contrib + "/modules"): + opencv_contrib_path = os.path.abspath(args.contrib + "/modules") + print "Contrib:", opencv_contrib_path + else: + print "Note: contrib repository is bad: modules subfolder not found" + + # result path - folder where framework will be located + output_path = os.path.abspath(args.outputdir[0]) + print "Output:", output_path try: - build_framework(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../..")), os.path.abspath(sys.argv[1])) + build_framework(opencv_path, output_path) except Exception as e: print >>sys.stderr, e sys.exit(1) diff --git a/platforms/osx/Info.plist.in b/platforms/osx/Info.plist.in index b2a3baf..a166934 100644 --- a/platforms/osx/Info.plist.in +++ b/platforms/osx/Info.plist.in @@ -3,9 +3,9 @@ CFBundleName - OpenCV + ${OPENCV_APPLE_BUNDLE_NAME} CFBundleIdentifier - org.opencv + ${OPENCV_APPLE_BUNDLE_ID} CFBundleVersion ${OPENCV_LIBVERSION} CFBundleShortVersionString