#!/usr/bin/env python
"""
The script builds OpenCV . framework for OSX .
"""
from __future__ import print_function
import os , os . path , sys , argparse , traceback , multiprocessing
# import common code
sys . path . insert ( 0 , os . path . abspath ( os . path . abspath ( os . path . dirname ( __file__ ) ) + ' /../ios ' ) )
from build_framework import Builder
MACOSX_DEPLOYMENT_TARGET = ' 10.12 ' # default, can be changed via command line options or environment variable
class OSXBuilder ( Builder ) :
def getToolchain ( self , arch , target ) :
return None
def getBuildCommand ( self , arch , target ) :
buildcmd = [
" xcodebuild " ,
" MACOSX_DEPLOYMENT_TARGET= " + os . environ [ ' MACOSX_DEPLOYMENT_TARGET ' ] ,
" ARCHS= %s " % arch ,
" -sdk " , target . lower ( ) ,
" -configuration " , " Debug " if self . debug else " Release " ,
" -parallelizeTargets " ,
" -jobs " , str ( multiprocessing . cpu_count ( ) )
]
return buildcmd
def getInfoPlist ( self , builddirs ) :
return os . path . join ( builddirs [ 0 ] , " osx " , " Info.plist " )
if __name__ == " __main__ " :
folder = os . path . abspath ( os . path . join ( os . path . dirname ( sys . argv [ 0 ] ) , " ../.. " ) )
parser = argparse . ArgumentParser ( description = ' The script builds OpenCV.framework for OSX. ' )
parser . add_argument ( ' out ' , metavar = ' OUTDIR ' , help = ' folder to put built framework ' )
parser . add_argument ( ' --opencv ' , metavar = ' DIR ' , default = folder , help = ' folder with opencv repository (default is " ../.. " relative to script location) ' )
parser . add_argument ( ' --contrib ' , metavar = ' DIR ' , default = None , help = ' folder with opencv_contrib repository (default is " None " - build only main framework) ' )
parser . add_argument ( ' --without ' , metavar = ' MODULE ' , default = [ ] , action = ' append ' , help = ' OpenCV modules to exclude from the framework ' )
parser . add_argument ( ' --disable ' , metavar = ' FEATURE ' , default = [ ] , action = ' append ' , help = ' OpenCV features to disable (add WITH_*=OFF) ' )
parser . add_argument ( ' --enable_nonfree ' , default = False , dest = ' enablenonfree ' , action = ' store_true ' , help = ' enable non-free modules (disabled by default) ' )
parser . add_argument ( ' --macosx_deployment_target ' , default = os . environ . get ( ' MACOSX_DEPLOYMENT_TARGET ' , MACOSX_DEPLOYMENT_TARGET ) , help = ' specify MACOSX_DEPLOYMENT_TARGET ' )
parser . add_argument ( ' --archs ' , default = ' x86_64 ' , help = ' Select target ARCHS (set to " x86_64,arm64 " to build Universal Binary for Big Sur and later) ' )
parser . add_argument ( ' --debug ' , action = ' store_true ' , help = ' Build " Debug " binaries (CMAKE_BUILD_TYPE=Debug) ' )
parser . add_argument ( ' --debug_info ' , action = ' store_true ' , help = ' Build with debug information (useful for Release mode: BUILD_WITH_DEBUG_INFO=ON) ' )
parser . add_argument ( ' --framework_name ' , default = ' opencv2 ' , dest = ' framework_name ' , action = ' store_true ' , help = ' Name of OpenCV framework (default: opencv2, will change to OpenCV in future version) ' )
parser . add_argument ( ' --legacy_build ' , default = False , dest = ' legacy_build ' , action = ' store_true ' , help = ' Build legacy framework (default: False, equivalent to " --framework_name=opencv2 --without=objc " ) ' )
parser . add_argument ( ' --run_tests ' , default = False , dest = ' run_tests ' , action = ' store_true ' , help = ' Run tests ' )
parser . add_argument ( ' --build_docs ' , default = False , dest = ' build_docs ' , action = ' store_true ' , help = ' Build docs ' )
args = parser . parse_args ( )
os . environ [ ' MACOSX_DEPLOYMENT_TARGET ' ] = args . macosx_deployment_target
print ( ' Using MACOSX_DEPLOYMENT_TARGET= ' + os . environ [ ' MACOSX_DEPLOYMENT_TARGET ' ] )
archs = args . archs . split ( ' , ' )
print ( ' Using ARCHS= ' + str ( archs ) )
if args . legacy_build :
args . framework_name = " opencv2 "
if not " objc " in args . without :
args . without . append ( " objc " )
b = OSXBuilder ( args . opencv , args . contrib , False , False , args . without , args . disable , args . enablenonfree ,
[
( archs , " MacOSX " )
] , args . debug , args . debug_info , args . framework_name , args . run_tests , args . build_docs )
b . build ( args . out )