However, opencv2.framework directory is erased and recreated on each run.
"""
-import glob, re, os, os.path, shutil, string, sys
+import glob, re, os, os.path, shutil, string, sys, exceptions, subprocess
+
+def execute(cmd):
+ try:
+ print >>sys.stderr, "Executing:", cmd
+ retcode = subprocess.call(cmd, shell=True)
+ if retcode < 0:
+ raise Exception("Child was terminated by signal:", -retcode)
+ elif retcode > 0:
+ raise Exception("Child returned:", retcode)
+ except OSError as e:
+ raise Exception("Execution failed:", e)
def build_opencv(srcroot, buildroot, target, arch):
"builds OpenCV for device or simulator"
# if cmake cache exists, just rerun cmake to update OpenCV.xcodeproj if necessary
if os.path.isfile(os.path.join(builddir, "CMakeCache.txt")):
- os.system("cmake %s ." % (cmakeargs,))
+ execute("cmake %s ." % (cmakeargs,))
else:
- os.system("cmake %s %s" % (cmakeargs, srcroot))
+ execute("cmake %s %s" % (cmakeargs, srcroot))
for wlib in [builddir + "/modules/world/UninstalledProducts/libopencv_world.a",
builddir + "/lib/Release/libopencv_world.a"]:
if os.path.isfile(wlib):
os.remove(wlib)
- os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
- os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))
+ execute("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
+ execute("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))
os.chdir(currdir)
def put_framework_together(srcroot, dstroot):
# make universal static lib
wlist = " ".join(["../build/" + t + "/lib/Release/libopencv_world.a" for t in targetlist])
- os.system("lipo -create " + wlist + " -o " + dstdir + "/opencv2")
+ execute("lipo -create " + wlist + " -o " + dstdir + "/opencv2")
# copy Info.plist
shutil.copyfile(tdir0 + "/ios/Info.plist", dstdir + "/Resources/Info.plist")
def build_framework(srcroot, dstroot):
"main function to do all the work"
- targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
- archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
- for i in range(len(targets)):
- build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])
+ targets = [("armv7", "iPhoneOS"),
+ ("armv7s", "iPhoneOS"),
+ ("arm64", "iPhoneOS"),
+ ("i386", "iPhoneSimulator"),
+ ("x86_64", "iPhoneSimulator")]
+ for t in targets:
+ build_opencv(srcroot, os.path.join(dstroot, "build"), t[1], t[0])
put_framework_together(srcroot, dstroot)
print "Usage:\n\t./build_framework.py <outputdir>\n\n"
sys.exit(0)
- build_framework(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../..")), os.path.abspath(sys.argv[1]))
+ try:
+ build_framework(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "../..")), os.path.abspath(sys.argv[1]))
+ except Exception as e:
+ print >>sys.stderr, e
+ sys.exit(1)
# Hidden visibilty is required for cxx on iOS
set (CMAKE_C_FLAGS "")
-set (CMAKE_CXX_FLAGS "-stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
-
+set (CMAKE_CXX_FLAGS "-stdlib=libc++ -fvisibility=hidden -fvisibility-inlines-hidden")
set (CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fomit-frame-pointer -ffast-math")
+# Silence some warnings
+set (no_warn "-Wno-unused-function -Wno-unused-parameter -Wno-strict-prototypes -Wno-missing-prototypes -Wno-missing-declarations -Wno-unused-const-variable -Wno-overloaded-virtual")
+set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${no_warn}")
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${no_warn}")
+# Additional linker flag
+set (CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names ${CMAKE_CXX_LINK_FLAGS}")
+
if (HAVE_FLAG_SEARCH_PATHS_FIRST)
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")