@@ -84,12 +84,9 @@ def __init__(self, opencv, contrib, dynamic, bitcodedisabled, exclude, disable,
84
84
self .run_tests = run_tests
85
85
self .build_docs = build_docs
86
86
87
- def getBD (self , parent , t ):
87
+ def getBuildDir (self , parent , target ):
88
88
89
- if len (t [0 ]) == 1 :
90
- res = os .path .join (parent , 'build-%s-%s' % (t [0 ][0 ].lower (), t [1 ].lower ()))
91
- else :
92
- res = os .path .join (parent , 'build-%s' % t [1 ].lower ())
89
+ res = os .path .join (parent , 'build-%s-%s' % (target [0 ].lower (), target [1 ].lower ()))
93
90
94
91
if not os .path .isdir (res ):
95
92
os .makedirs (res )
@@ -99,39 +96,35 @@ def _build(self, outdir):
99
96
outdir = os .path .abspath (outdir )
100
97
if not os .path .isdir (outdir ):
101
98
os .makedirs (outdir )
102
- mainWD = os .path .join (outdir , "build" )
99
+ main_working_dir = os .path .join (outdir , "build" )
103
100
dirs = []
104
101
105
102
xcode_ver = getXCodeMajor ()
106
103
107
- if self .dynamic and not self .build_objc_wrapper :
108
- alltargets = self .targets
109
- else :
110
- # if we are building a static library, we must build each architecture separately
111
- alltargets = []
112
-
113
- for t in self .targets :
114
- for at in t [0 ]:
115
- current = ( [at ], t [1 ] )
104
+ # build each architecture separately
105
+ alltargets = []
116
106
117
- alltargets .append (current )
107
+ for target_group in self .targets :
108
+ for arch in target_group [0 ]:
109
+ current = ( arch , target_group [1 ] )
110
+ alltargets .append (current )
118
111
119
- for t in alltargets :
120
- mainBD = self .getBD ( mainWD , t )
121
- dirs .append (mainBD )
112
+ for target in alltargets :
113
+ main_build_dir = self .getBuildDir ( main_working_dir , target )
114
+ dirs .append (main_build_dir )
122
115
123
116
cmake_flags = []
124
117
if self .contrib :
125
118
cmake_flags .append ("-DOPENCV_EXTRA_MODULES_PATH=%s" % self .contrib )
126
- if xcode_ver >= 7 and t [1 ] == 'iPhoneOS' and self .bitcodedisabled == False :
119
+ if xcode_ver >= 7 and target [1 ] == 'iPhoneOS' and self .bitcodedisabled == False :
127
120
cmake_flags .append ("-DCMAKE_C_FLAGS=-fembed-bitcode" )
128
121
cmake_flags .append ("-DCMAKE_CXX_FLAGS=-fembed-bitcode" )
129
- self .buildOne (t [0 ], t [1 ], mainBD , cmake_flags )
122
+ self .buildOne (target [0 ], target [1 ], main_build_dir , cmake_flags )
130
123
131
124
if not self .dynamic :
132
- self .mergeLibs (mainBD )
133
- elif self . dynamic and self . build_objc_wrapper :
134
- self .makeDynamicLib (mainBD )
125
+ self .mergeLibs (main_build_dir )
126
+ else :
127
+ self .makeDynamicLib (main_build_dir )
135
128
self .makeFramework (outdir , dirs )
136
129
if self .build_objc_wrapper :
137
130
if self .run_tests :
@@ -198,7 +191,7 @@ def getCMakeArgs(self, arch, target):
198
191
199
192
return args
200
193
201
- def getBuildCommand (self , archs , target ):
194
+ def getBuildCommand (self , arch , target ):
202
195
203
196
buildcmd = [
204
197
"xcodebuild" ,
@@ -207,28 +200,17 @@ def getBuildCommand(self, archs, target):
207
200
if (self .dynamic or self .build_objc_wrapper ) and not self .bitcodedisabled and target == "iPhoneOS" :
208
201
buildcmd .append ("BITCODE_GENERATION_MODE=bitcode" )
209
202
210
- if self .dynamic and not self .build_objc_wrapper :
211
- buildcmd += [
212
- "IPHONEOS_DEPLOYMENT_TARGET=" + os .environ ['IPHONEOS_DEPLOYMENT_TARGET' ],
213
- "ONLY_ACTIVE_ARCH=NO" ,
214
- ]
215
-
216
- for arch in archs :
217
- buildcmd .append ("-arch" )
218
- buildcmd .append (arch .lower ())
219
- else :
220
- arch = ";" .join (archs )
221
- buildcmd += [
222
- "IPHONEOS_DEPLOYMENT_TARGET=" + os .environ ['IPHONEOS_DEPLOYMENT_TARGET' ],
223
- "ARCHS=%s" % arch ,
224
- ]
203
+ buildcmd += [
204
+ "IPHONEOS_DEPLOYMENT_TARGET=" + os .environ ['IPHONEOS_DEPLOYMENT_TARGET' ],
205
+ "ARCHS=%s" % arch ,
206
+ ]
225
207
226
208
buildcmd += [
227
209
"-sdk" , target .lower (),
228
210
"-configuration" , self .getConfiguration (),
229
211
"-parallelizeTargets" ,
230
212
"-jobs" , str (multiprocessing .cpu_count ()),
231
- ] + ([ "-target" , "ALL_BUILD" ] if self . dynamic and not self . build_objc_wrapper else [])
213
+ ]
232
214
233
215
return buildcmd
234
216
@@ -241,6 +223,15 @@ def makeCMakeCmd(self, arch, target, dir, cmakeargs = []):
241
223
(["-DCMAKE_TOOLCHAIN_FILE=%s" % toolchain ] if toolchain is not None else [])
242
224
if target .lower ().startswith ("iphoneos" ):
243
225
cmakecmd .append ("-DCPU_BASELINE=DETECT" )
226
+ if target .lower () == "macosx" :
227
+ build_arch = check_output (["uname" , "-m" ]).rstrip ()
228
+ if build_arch != arch :
229
+ cmakecmd .append ("-DCMAKE_SYSTEM_PROCESSOR=" + arch )
230
+ cmakecmd .append ("-DCMAKE_OSX_ARCHITECTURES=" + arch )
231
+ cmakecmd .append ("-DCPU_BASELINE=DETECT" )
232
+ cmakecmd .append ("-DCMAKE_CROSSCOMPILING=ON" )
233
+ cmakecmd .append ("-DOPENCV_WORKAROUND_CMAKE_20989=ON" )
234
+
244
235
cmakecmd .append (dir )
245
236
cmakecmd .extend (cmakeargs )
246
237
return cmakecmd
@@ -344,6 +335,7 @@ def makeFramework(self, outdir, builddirs):
344
335
"x86_64" : "x86_64-apple-ios-simulator" ,
345
336
} if builddirs [0 ].find ("iphone" ) != - 1 else {
346
337
"x86_64" : "x86_64-apple-macos" ,
338
+ "arm64" : "arm64-apple-macos" ,
347
339
}
348
340
for d in builddirs :
349
341
copy_tree (os .path .join (d , "install" , "lib" , name + ".framework" , "Modules" ), os .path .join (dstdir , "Modules" ))
@@ -398,8 +390,6 @@ def getToolchain(self, arch, target):
398
390
return toolchain
399
391
400
392
def getCMakeArgs (self , arch , target ):
401
- arch = ";" .join (arch )
402
-
403
393
args = Builder .getCMakeArgs (self , arch , target )
404
394
args = args + [
405
395
'-DIOS_ARCH=%s' % arch
0 commit comments