build_framework.py 3.7 KB
Newer Older
1 2
#!/usr/bin/env python
"""
3
The script builds OpenCV.framework for OSX.
4 5
"""

6
from __future__ import print_function
7
import os, os.path, sys, argparse, traceback, multiprocessing
8

9 10 11
# import common code
sys.path.insert(0, os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../ios'))
from build_framework import Builder
12

13 14
MACOSX_DEPLOYMENT_TARGET='10.12'  # default, can be changed via command line options or environment variable

15
class OSXBuilder(Builder):
16

17 18
    def getToolchain(self, arch, target):
        return None
19

20
    def getBuildCommand(self, archs, target):
21 22
        buildcmd = [
            "xcodebuild",
23
            "MACOSX_DEPLOYMENT_TARGET=" + os.environ['MACOSX_DEPLOYMENT_TARGET'],
24
            "ARCHS=%s" % archs[0],
25
            "-sdk", target.lower(),
26
            "-configuration", "Debug" if self.debug else "Release",
27
            "-parallelizeTargets",
Y
Yuriy Solovyov 已提交
28
            "-jobs", str(multiprocessing.cpu_count())
29 30
        ]
        return buildcmd
31

32 33
    def getInfoPlist(self, builddirs):
        return os.path.join(builddirs[0], "osx", "Info.plist")
34 35 36


if __name__ == "__main__":
37 38 39 40 41
    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)')
42
    parser.add_argument('--without', metavar='MODULE', default=[], action='append', help='OpenCV modules to exclude from the framework')
G
Giles Payne 已提交
43
    parser.add_argument('--disable', metavar='FEATURE', default=[], action='append', help='OpenCV features to disable (add WITH_*=OFF)')
44
    parser.add_argument('--enable_nonfree', default=False, dest='enablenonfree', action='store_true', help='enable non-free modules (disabled by default)')
45 46 47
    parser.add_argument('--macosx_deployment_target', default=os.environ.get('MACOSX_DEPLOYMENT_TARGET', MACOSX_DEPLOYMENT_TARGET), help='specify MACOSX_DEPLOYMENT_TARGET')
    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)')
48 49
    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")')
G
Giles Payne 已提交
50 51
    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')
52

53 54
    args = parser.parse_args()

55 56
    os.environ['MACOSX_DEPLOYMENT_TARGET'] = args.macosx_deployment_target
    print('Using MACOSX_DEPLOYMENT_TARGET=' + os.environ['MACOSX_DEPLOYMENT_TARGET'])
57 58 59 60
    if args.legacy_build:
        args.framework_name = "opencv2"
        if not "objc" in args.without:
            args.without.append("objc")
61

G
Giles Payne 已提交
62
    b = OSXBuilder(args.opencv, args.contrib, False, False, args.without, args.disable, args.enablenonfree,
63
        [
64
            (["x86_64"], "MacOSX")
G
Giles Payne 已提交
65
        ], args.debug, args.debug_info, args.framework_name, args.run_tests, args.build_docs)
66
    b.build(args.out)