mirror of
https://github.com/opencv/opencv.git
synced 2024-11-24 03:00:14 +08:00
Build separate world-like iOS framework for contrib
This commit is contained in:
parent
893deb4040
commit
c28fea32c7
@ -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")
|
||||
|
@ -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 "")
|
||||
|
@ -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\"
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
@ -3,9 +3,9 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>OpenCV</string>
|
||||
<string>${OPENCV_APPLE_BUNDLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.opencv</string>
|
||||
<string>${OPENCV_APPLE_BUNDLE_ID}</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${OPENCV_LIBVERSION}</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
@ -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 <outputdir>\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)
|
||||
|
@ -3,9 +3,9 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>OpenCV</string>
|
||||
<string>${OPENCV_APPLE_BUNDLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.opencv</string>
|
||||
<string>${OPENCV_APPLE_BUNDLE_ID}</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${OPENCV_LIBVERSION}</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
Loading…
Reference in New Issue
Block a user