mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 15:53:03 +04:00
Merge remote-tracking branch 'upstream/master' into merge-4.x
This commit is contained in:
@@ -31,36 +31,16 @@ However, {framework_name}.framework directory is erased and recreated on each ru
|
||||
Adding --dynamic parameter will build {framework_name}.framework as App Store dynamic framework. Only iOS 8+ versions are supported.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
import glob, re, os, os.path, shutil, string, sys, argparse, traceback, multiprocessing
|
||||
from __future__ import print_function, unicode_literals
|
||||
import glob, os, os.path, shutil, string, sys, argparse, traceback, multiprocessing
|
||||
from subprocess import check_call, check_output, CalledProcessError
|
||||
from distutils.dir_util import copy_tree
|
||||
|
||||
sys.path.insert(0, os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../apple'))
|
||||
from cv_build_utils import execute, print_error, get_xcode_major, get_xcode_setting
|
||||
|
||||
IPHONEOS_DEPLOYMENT_TARGET='9.0' # default, can be changed via command line options or environment variable
|
||||
|
||||
def execute(cmd, cwd = None):
|
||||
print("Executing: %s in %s" % (cmd, cwd), file=sys.stderr)
|
||||
print('Executing: ' + ' '.join(cmd))
|
||||
retcode = check_call(cmd, cwd = cwd)
|
||||
if retcode != 0:
|
||||
raise Exception("Child returned:", retcode)
|
||||
|
||||
def getXCodeMajor():
|
||||
ret = check_output(["xcodebuild", "-version"])
|
||||
m = re.match(r'Xcode\s+(\d+)\..*', ret, flags=re.IGNORECASE)
|
||||
if m:
|
||||
return int(m.group(1))
|
||||
else:
|
||||
raise Exception("Failed to parse Xcode version")
|
||||
|
||||
def getXCodeSetting(var, projectdir):
|
||||
ret = check_output(["xcodebuild", "-showBuildSettings"], cwd = projectdir)
|
||||
m = re.search("\s" + var + " = (.*)", ret)
|
||||
if m:
|
||||
return m.group(1)
|
||||
else:
|
||||
raise Exception("Failed to parse Xcode settings")
|
||||
|
||||
class Builder:
|
||||
def __init__(self, opencv, contrib, dynamic, bitcodedisabled, exclude, disable, enablenonfree, targets, debug, debug_info, framework_name, run_tests, build_docs):
|
||||
self.opencv = os.path.abspath(opencv)
|
||||
@@ -99,7 +79,7 @@ class Builder:
|
||||
main_working_dir = os.path.join(outdir, "build")
|
||||
dirs = []
|
||||
|
||||
xcode_ver = getXCodeMajor()
|
||||
xcode_ver = get_xcode_major()
|
||||
|
||||
# build each architecture separately
|
||||
alltargets = []
|
||||
@@ -119,6 +99,30 @@ class Builder:
|
||||
if xcode_ver >= 7 and target[1] == 'iPhoneOS' and self.bitcodedisabled == False:
|
||||
cmake_flags.append("-DCMAKE_C_FLAGS=-fembed-bitcode")
|
||||
cmake_flags.append("-DCMAKE_CXX_FLAGS=-fembed-bitcode")
|
||||
if xcode_ver >= 7 and target[1] == 'Catalyst':
|
||||
sdk_path = check_output(["xcodebuild", "-version", "-sdk", "macosx", "Path"]).decode('utf-8').rstrip()
|
||||
c_flags = [
|
||||
"-target %s-apple-ios13.0-macabi" % target[0], # e.g. x86_64-apple-ios13.2-macabi # -mmacosx-version-min=10.15
|
||||
"-isysroot %s" % sdk_path,
|
||||
"-iframework %s/System/iOSSupport/System/Library/Frameworks" % sdk_path,
|
||||
"-isystem %s/System/iOSSupport/usr/include" % sdk_path,
|
||||
]
|
||||
if self.bitcodedisabled == False:
|
||||
c_flags.append("-fembed-bitcode")
|
||||
cmake_flags.append("-DCMAKE_C_FLAGS=" + " ".join(c_flags))
|
||||
cmake_flags.append("-DCMAKE_CXX_FLAGS=" + " ".join(c_flags))
|
||||
cmake_flags.append("-DCMAKE_EXE_LINKER_FLAGS=" + " ".join(c_flags))
|
||||
|
||||
# CMake cannot compile Swift for Catalyst https://gitlab.kitware.com/cmake/cmake/-/issues/21436
|
||||
# cmake_flags.append("-DCMAKE_Swift_FLAGS=" + " " + target_flag)
|
||||
cmake_flags.append("-DSWIFT_DISABLED=1")
|
||||
|
||||
cmake_flags.append("-DIOS=1") # Build the iOS codebase
|
||||
cmake_flags.append("-DMAC_CATALYST=1") # Set a flag for Mac Catalyst, just in case we need it
|
||||
cmake_flags.append("-DWITH_OPENCL=OFF") # Disable OpenCL; it isn't compatible with iOS
|
||||
cmake_flags.append("-DCMAKE_OSX_SYSROOT=%s" % sdk_path)
|
||||
cmake_flags.append("-DCMAKE_CXX_COMPILER_WORKS=TRUE")
|
||||
cmake_flags.append("-DCMAKE_C_COMPILER_WORKS=TRUE")
|
||||
self.buildOne(target[0], target[1], main_build_dir, cmake_flags)
|
||||
|
||||
if not self.dynamic:
|
||||
@@ -128,10 +132,10 @@ class Builder:
|
||||
self.makeFramework(outdir, dirs)
|
||||
if self.build_objc_wrapper:
|
||||
if self.run_tests:
|
||||
check_call([sys.argv[0].replace("build_framework", "run_tests"), "--framework_dir=" + outdir, "--framework_name=" + self.framework_name, dirs[0] + "/modules/objc/test"])
|
||||
check_call([sys.argv[0].replace("build_framework", "run_tests"), "--framework_dir=" + outdir, "--framework_name=" + self.framework_name, dirs[0] + "/modules/objc_bindings_generator/{}/test".format(self.getObjcTarget(target[1]))])
|
||||
else:
|
||||
print("To run tests call:")
|
||||
print(sys.argv[0].replace("build_framework", "run_tests") + " --framework_dir=" + outdir + " --framework_name=" + self.framework_name + " " + dirs[0] + "/modules/objc/test")
|
||||
print(sys.argv[0].replace("build_framework", "run_tests") + " --framework_dir=" + outdir + " --framework_name=" + self.framework_name + " " + dirs[0] + "/modules/objc_bindings_generator/{}/test".format(self.getObjcTarget(target[1])))
|
||||
if self.build_docs:
|
||||
check_call([sys.argv[0].replace("build_framework", "build_docs"), dirs[0] + "/modules/objc/framework_build"])
|
||||
doc_path = os.path.join(dirs[0], "modules", "objc", "doc_build", "docs")
|
||||
@@ -147,9 +151,7 @@ class Builder:
|
||||
try:
|
||||
self._build(outdir)
|
||||
except Exception as e:
|
||||
print("="*60, file=sys.stderr)
|
||||
print("ERROR: %s" % e, file=sys.stderr)
|
||||
print("="*60, file=sys.stderr)
|
||||
print_error(e)
|
||||
traceback.print_exc(file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
@@ -170,17 +172,19 @@ class Builder:
|
||||
"-DOPENCV_INCLUDE_INSTALL_PATH=include",
|
||||
"-DOPENCV_3P_LIB_INSTALL_PATH=lib/3rdparty",
|
||||
"-DFRAMEWORK_NAME=%s" % self.framework_name,
|
||||
] + ([
|
||||
"-DBUILD_SHARED_LIBS=ON",
|
||||
"-DCMAKE_MACOSX_BUNDLE=ON",
|
||||
"-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=NO",
|
||||
] if self.dynamic and not self.build_objc_wrapper else []) + ([
|
||||
"-DDYNAMIC_PLIST=ON"
|
||||
] if self.dynamic else []) + ([
|
||||
"-DOPENCV_ENABLE_NONFREE=ON"
|
||||
] if self.enablenonfree else []) + ([
|
||||
"-DBUILD_WITH_DEBUG_INFO=ON"
|
||||
] if self.debug_info else [])
|
||||
]
|
||||
if self.dynamic:
|
||||
args += [
|
||||
"-DDYNAMIC_PLIST=ON"
|
||||
]
|
||||
if self.enablenonfree:
|
||||
args += [
|
||||
"-DOPENCV_ENABLE_NONFREE=ON"
|
||||
]
|
||||
if self.debug_info:
|
||||
args += [
|
||||
"-DBUILD_WITH_DEBUG_INFO=ON"
|
||||
]
|
||||
|
||||
if len(self.exclude) > 0:
|
||||
args += ["-DBUILD_opencv_%s=OFF" % m for m in self.exclude]
|
||||
@@ -202,29 +206,49 @@ class Builder:
|
||||
buildcmd += [
|
||||
"IPHONEOS_DEPLOYMENT_TARGET=" + os.environ['IPHONEOS_DEPLOYMENT_TARGET'],
|
||||
"ARCHS=%s" % arch,
|
||||
"-sdk", target.lower(),
|
||||
"-configuration", self.getConfiguration(),
|
||||
"-parallelizeTargets",
|
||||
"-jobs", str(multiprocessing.cpu_count()),
|
||||
]
|
||||
|
||||
buildcmd += [
|
||||
"-sdk", target.lower(),
|
||||
"-configuration", self.getConfiguration(),
|
||||
"-parallelizeTargets",
|
||||
"-jobs", str(multiprocessing.cpu_count()),
|
||||
]
|
||||
|
||||
return buildcmd
|
||||
|
||||
def getInfoPlist(self, builddirs):
|
||||
return os.path.join(builddirs[0], "ios", "Info.plist")
|
||||
|
||||
def getObjcTarget(self, target):
|
||||
# Obj-C generation target
|
||||
return 'ios'
|
||||
|
||||
def makeCMakeCmd(self, arch, target, dir, cmakeargs = []):
|
||||
toolchain = self.getToolchain(arch, target)
|
||||
cmakecmd = self.getCMakeArgs(arch, target) + \
|
||||
(["-DCMAKE_TOOLCHAIN_FILE=%s" % toolchain] if toolchain is not None else [])
|
||||
if target.lower().startswith("iphoneos"):
|
||||
cmakecmd.append("-DCPU_BASELINE=DETECT")
|
||||
if target.lower() == "macosx":
|
||||
build_arch = check_output(["uname", "-m"]).rstrip()
|
||||
if target.lower().startswith("iphonesimulator"):
|
||||
build_arch = check_output(["uname", "-m"]).decode('utf-8').rstrip()
|
||||
if build_arch != arch:
|
||||
print("build_arch (%s) != arch (%s)" % (build_arch, arch))
|
||||
cmakecmd.append("-DCMAKE_SYSTEM_PROCESSOR=" + arch)
|
||||
cmakecmd.append("-DCMAKE_OSX_ARCHITECTURES=" + arch)
|
||||
cmakecmd.append("-DCPU_BASELINE=DETECT")
|
||||
cmakecmd.append("-DCMAKE_CROSSCOMPILING=ON")
|
||||
cmakecmd.append("-DOPENCV_WORKAROUND_CMAKE_20989=ON")
|
||||
if target.lower() == "catalyst":
|
||||
build_arch = check_output(["uname", "-m"]).decode('utf-8').rstrip()
|
||||
if build_arch != arch:
|
||||
print("build_arch (%s) != arch (%s)" % (build_arch, arch))
|
||||
cmakecmd.append("-DCMAKE_SYSTEM_PROCESSOR=" + arch)
|
||||
cmakecmd.append("-DCMAKE_OSX_ARCHITECTURES=" + arch)
|
||||
cmakecmd.append("-DCPU_BASELINE=DETECT")
|
||||
cmakecmd.append("-DCMAKE_CROSSCOMPILING=ON")
|
||||
cmakecmd.append("-DOPENCV_WORKAROUND_CMAKE_20989=ON")
|
||||
if target.lower() == "macosx":
|
||||
build_arch = check_output(["uname", "-m"]).decode('utf-8').rstrip()
|
||||
if build_arch != arch:
|
||||
print("build_arch (%s) != arch (%s)" % (build_arch, arch))
|
||||
cmakecmd.append("-DCMAKE_SYSTEM_PROCESSOR=" + arch)
|
||||
cmakecmd.append("-DCMAKE_OSX_ARCHITECTURES=" + arch)
|
||||
cmakecmd.append("-DCPU_BASELINE=DETECT")
|
||||
@@ -245,7 +269,17 @@ class Builder:
|
||||
#cmakecmd.append(self.opencv)
|
||||
#cmakecmd.extend(cmakeargs)
|
||||
cmakecmd = self.makeCMakeCmd(arch, target, self.opencv, cmakeargs)
|
||||
print("")
|
||||
print("=================================")
|
||||
print("CMake")
|
||||
print("=================================")
|
||||
print("")
|
||||
execute(cmakecmd, cwd = builddir)
|
||||
print("")
|
||||
print("=================================")
|
||||
print("Xcodebuild")
|
||||
print("=================================")
|
||||
print("")
|
||||
|
||||
# Clean and build
|
||||
clean_dir = os.path.join(builddir, "install")
|
||||
@@ -255,7 +289,9 @@ class Builder:
|
||||
execute(buildcmd + ["-target", "ALL_BUILD", "build"], cwd = builddir)
|
||||
execute(["cmake", "-DBUILD_TYPE=%s" % self.getConfiguration(), "-P", "cmake_install.cmake"], cwd = builddir)
|
||||
if self.build_objc_wrapper:
|
||||
cmakecmd = self.makeCMakeCmd(arch, target, builddir + "/modules/objc/gen", cmakeargs)
|
||||
cmakecmd = self.makeCMakeCmd(arch, target, builddir + "/modules/objc_bindings_generator/{}/gen".format(self.getObjcTarget(target)), cmakeargs)
|
||||
# cmakecmd.append("-DCMAKE_Swift_FLAGS=" + "-target x86_64-apple-ios13.0-macabi")
|
||||
# cmakecmd.append("-DCMAKE_EXE_LINKER_FLAGS=" + "-target x86_64-apple-ios13.0-macabi")
|
||||
cmakecmd.append("-DBUILD_ROOT=%s" % builddir)
|
||||
cmakecmd.append("-DCMAKE_INSTALL_NAME_TOOL=install_name_tool")
|
||||
cmakecmd.append("--no-warn-unused-cli")
|
||||
@@ -276,24 +312,51 @@ class Builder:
|
||||
def makeDynamicLib(self, builddir):
|
||||
target = builddir[(builddir.rfind("build-") + 6):]
|
||||
target_platform = target[(target.rfind("-") + 1):]
|
||||
is_device = target_platform == "iphoneos"
|
||||
res = os.path.join(builddir, "install", "lib", self.framework_name + ".framework", self.framework_name)
|
||||
is_device = target_platform == "iphoneos" or target_platform == "catalyst"
|
||||
framework_dir = os.path.join(builddir, "install", "lib", self.framework_name + ".framework")
|
||||
if not os.path.exists(framework_dir):
|
||||
os.makedirs(framework_dir)
|
||||
res = os.path.join(framework_dir, self.framework_name)
|
||||
libs = glob.glob(os.path.join(builddir, "install", "lib", "*.a"))
|
||||
module = [os.path.join(builddir, "lib", self.getConfiguration(), self.framework_name + ".framework", self.framework_name)]
|
||||
if self.build_objc_wrapper:
|
||||
module = [os.path.join(builddir, "lib", self.getConfiguration(), self.framework_name + ".framework", self.framework_name)]
|
||||
else:
|
||||
module = []
|
||||
|
||||
libs3 = glob.glob(os.path.join(builddir, "install", "lib", "3rdparty", "*.a"))
|
||||
|
||||
link_target = target[:target.find("-")] + "-apple-ios" + os.environ['IPHONEOS_DEPLOYMENT_TARGET'] + ("-simulator" if target.endswith("simulator") else "")
|
||||
if os.environ.get('IPHONEOS_DEPLOYMENT_TARGET'):
|
||||
link_target = target[:target.find("-")] + "-apple-ios" + os.environ['IPHONEOS_DEPLOYMENT_TARGET'] + ("-simulator" if target.endswith("simulator") else "")
|
||||
else:
|
||||
if target_platform == "catalyst":
|
||||
link_target = "%s-apple-ios13.0-macabi" % target[:target.find("-")]
|
||||
else:
|
||||
link_target = "%s-apple-darwin" % target[:target.find("-")]
|
||||
bitcode_flags = ["-fembed-bitcode", "-Xlinker", "-bitcode_verify"] if is_device and not self.bitcodedisabled else []
|
||||
toolchain_dir = getXCodeSetting("TOOLCHAIN_DIR", builddir)
|
||||
toolchain_dir = get_xcode_setting("TOOLCHAIN_DIR", builddir)
|
||||
sdk_dir = get_xcode_setting("SDK_DIR", builddir)
|
||||
framework_options = []
|
||||
swift_link_dirs = ["-L" + toolchain_dir + "/usr/lib/swift/" + target_platform, "-L/usr/lib/swift"]
|
||||
sdk_dir = getXCodeSetting("SDK_DIR", builddir)
|
||||
if target_platform == "catalyst":
|
||||
swift_link_dirs = ["-L" + toolchain_dir + "/usr/lib/swift/" + "maccatalyst", "-L/usr/lib/swift"]
|
||||
framework_options = [
|
||||
"-iframework", "%s/System/iOSSupport/System/Library/Frameworks" % sdk_dir,
|
||||
"-framework", "AVFoundation", "-framework", "UIKit", "-framework", "CoreGraphics",
|
||||
"-framework", "CoreImage", "-framework", "CoreMedia", "-framework", "QuartzCore",
|
||||
]
|
||||
elif target_platform == "macosx":
|
||||
framework_options = [
|
||||
"-framework", "AVFoundation", "-framework", "AppKit", "-framework", "CoreGraphics",
|
||||
"-framework", "CoreImage", "-framework", "CoreMedia", "-framework", "QuartzCore",
|
||||
"-framework", "Accelerate", "-framework", "OpenCL",
|
||||
]
|
||||
execute([
|
||||
"clang++",
|
||||
"-Xlinker", "-rpath",
|
||||
"-Xlinker", "/usr/lib/swift",
|
||||
"-target", link_target,
|
||||
"-isysroot", sdk_dir,
|
||||
"-isysroot", sdk_dir,] +
|
||||
framework_options + [
|
||||
"-install_name", "@rpath/" + self.framework_name + ".framework/" + self.framework_name,
|
||||
"-dynamiclib", "-dead_strip", "-fobjc-link-runtime", "-all_load",
|
||||
"-o", res
|
||||
@@ -398,6 +461,8 @@ class iOSBuilder(Builder):
|
||||
def copy_samples(self, outdir):
|
||||
print('Copying samples to: ' + outdir)
|
||||
samples_dir = os.path.join(outdir, "samples")
|
||||
if os.path.exists(samples_dir):
|
||||
shutil.rmtree(samples_dir)
|
||||
shutil.copytree(os.path.join(self.opencv, "samples", "swift", "ios"), samples_dir)
|
||||
if self.framework_name != "OpenCV":
|
||||
for dirname, dirs, files in os.walk(samples_dir):
|
||||
@@ -426,8 +491,9 @@ if __name__ == "__main__":
|
||||
parser.add_argument('--dynamic', default=False, action='store_true', help='build dynamic framework (default is "False" - builds static framework)')
|
||||
parser.add_argument('--disable-bitcode', default=False, dest='bitcodedisabled', action='store_true', help='disable bitcode (enabled by default)')
|
||||
parser.add_argument('--iphoneos_deployment_target', default=os.environ.get('IPHONEOS_DEPLOYMENT_TARGET', IPHONEOS_DEPLOYMENT_TARGET), help='specify IPHONEOS_DEPLOYMENT_TARGET')
|
||||
parser.add_argument('--iphoneos_archs', default='armv7s,arm64', help='select iPhoneOS target ARCHS')
|
||||
parser.add_argument('--iphonesimulator_archs', default='x86_64', help='select iPhoneSimulator target ARCHS')
|
||||
parser.add_argument('--build_only_specified_archs', default=False, action='store_true', help='if enabled, only directly specified archs are built and defaults are ignored')
|
||||
parser.add_argument('--iphoneos_archs', default=None, help='select iPhoneOS target ARCHS. Default is "armv7s,arm64"')
|
||||
parser.add_argument('--iphonesimulator_archs', default=None, help='select iPhoneSimulator target ARCHS. Default is "x86_64"')
|
||||
parser.add_argument('--enable_nonfree', default=False, dest='enablenonfree', action='store_true', help='enable non-free modules (disabled by default)')
|
||||
parser.add_argument('--debug', default=False, dest='debug', action='store_true', help='Build "Debug" binaries (disabled by default)')
|
||||
parser.add_argument('--debug_info', default=False, dest='debug_info', action='store_true', help='Build with debug information (useful for Release mode: BUILD_WITH_DEBUG_INFO=ON)')
|
||||
@@ -436,26 +502,58 @@ if __name__ == "__main__":
|
||||
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()
|
||||
args, unknown_args = parser.parse_known_args()
|
||||
if unknown_args:
|
||||
print("The following args are not recognized and will not be used: %s" % unknown_args)
|
||||
|
||||
os.environ['IPHONEOS_DEPLOYMENT_TARGET'] = args.iphoneos_deployment_target
|
||||
print('Using IPHONEOS_DEPLOYMENT_TARGET=' + os.environ['IPHONEOS_DEPLOYMENT_TARGET'])
|
||||
iphoneos_archs = args.iphoneos_archs.split(',')
|
||||
|
||||
iphoneos_archs = None
|
||||
if args.iphoneos_archs:
|
||||
iphoneos_archs = args.iphoneos_archs.split(',')
|
||||
elif not args.build_only_specified_archs:
|
||||
# Supply defaults
|
||||
iphoneos_archs = ["armv7s", "arm64"]
|
||||
print('Using iPhoneOS ARCHS=' + str(iphoneos_archs))
|
||||
iphonesimulator_archs = args.iphonesimulator_archs.split(',')
|
||||
|
||||
iphonesimulator_archs = None
|
||||
if args.iphonesimulator_archs:
|
||||
iphonesimulator_archs = args.iphonesimulator_archs.split(',')
|
||||
elif not args.build_only_specified_archs:
|
||||
# Supply defaults
|
||||
iphonesimulator_archs = ["x86_64"]
|
||||
print('Using iPhoneSimulator ARCHS=' + str(iphonesimulator_archs))
|
||||
|
||||
# Prevent the build from happening if the same architecture is specified for multiple platforms.
|
||||
# When `lipo` is run to stitch the frameworks together into a fat framework, it'll fail, so it's
|
||||
# better to stop here while we're ahead.
|
||||
if iphoneos_archs and iphonesimulator_archs:
|
||||
duplicate_archs = set(iphoneos_archs).intersection(iphonesimulator_archs)
|
||||
if duplicate_archs:
|
||||
print_error("Cannot have the same architecture for multiple platforms in a fat framework! Consider using build_xcframework.py in the apple platform folder instead. Duplicate archs are %s" % duplicate_archs)
|
||||
exit(1)
|
||||
|
||||
if args.legacy_build:
|
||||
args.framework_name = "opencv2"
|
||||
if not "objc" in args.without:
|
||||
args.without.append("objc")
|
||||
|
||||
b = iOSBuilder(args.opencv, args.contrib, args.dynamic, args.bitcodedisabled, args.without, args.disable, args.enablenonfree,
|
||||
[
|
||||
(iphoneos_archs, "iPhoneOS"),
|
||||
] if os.environ.get('BUILD_PRECOMMIT', None) else
|
||||
[
|
||||
(iphoneos_archs, "iPhoneOS"),
|
||||
(iphonesimulator_archs, "iPhoneSimulator"),
|
||||
], args.debug, args.debug_info, args.framework_name, args.run_tests, args.build_docs)
|
||||
targets = []
|
||||
if os.environ.get('BUILD_PRECOMMIT', None):
|
||||
if not iphoneos_archs:
|
||||
print_error("--iphoneos_archs must have at least one value")
|
||||
sys.exit(1)
|
||||
targets.append((iphoneos_archs, "iPhoneOS"))
|
||||
else:
|
||||
if not iphoneos_archs and not iphonesimulator_archs:
|
||||
print_error("--iphoneos_archs and --iphonesimulator_archs are undefined; nothing will be built.")
|
||||
sys.exit(1)
|
||||
if iphoneos_archs:
|
||||
targets.append((iphoneos_archs, "iPhoneOS"))
|
||||
if iphonesimulator_archs:
|
||||
targets.append((iphonesimulator_archs, "iPhoneSimulator"))
|
||||
|
||||
b = iOSBuilder(args.opencv, args.contrib, args.dynamic, args.bitcodedisabled, args.without, args.disable, args.enablenonfree, targets, args.debug, args.debug_info, args.framework_name, args.run_tests, args.build_docs)
|
||||
|
||||
b.build(args.out)
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
set(MAC_CATALYST TRUE)
|
||||
message(STATUS "Setting up Catalyst toolchain for IOS_ARCH='${IOS_ARCH}'")
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/common-ios-toolchain.cmake)
|
||||
message(STATUS "Catalyst toolchain loaded")
|
||||
@@ -79,8 +79,11 @@ endif()
|
||||
if(NOT DEFINED CMAKE_OSX_SYSROOT)
|
||||
if(IPHONEOS)
|
||||
set(CMAKE_OSX_SYSROOT "iphoneos")
|
||||
else()
|
||||
elseif(IPHONESIMULATOR)
|
||||
set(CMAKE_OSX_SYSROOT "iphonesimulator")
|
||||
elseif(MAC_CATALYST)
|
||||
# Use MacOS SDK for Catalyst builds
|
||||
set(CMAKE_OSX_SYSROOT "macosx")
|
||||
endif()
|
||||
endif()
|
||||
set(CMAKE_MACOSX_BUNDLE YES)
|
||||
@@ -90,7 +93,7 @@ if(APPLE_FRAMEWORK AND NOT BUILD_SHARED_LIBS)
|
||||
set(CMAKE_OSX_ARCHITECTURES "${IOS_ARCH}" CACHE INTERNAL "Build architecture for iOS" FORCE)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED IPHONEOS_DEPLOYMENT_TARGET)
|
||||
if(NOT DEFINED IPHONEOS_DEPLOYMENT_TARGET AND NOT MAC_CATALYST)
|
||||
if(NOT DEFINED ENV{IPHONEOS_DEPLOYMENT_TARGET})
|
||||
message(FATAL_ERROR "IPHONEOS_DEPLOYMENT_TARGET is not specified")
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user