21
21
import fnmatch
22
22
import re
23
23
from datetime import datetime
24
+ from distutils .spawn import find_executable
24
25
try :
25
26
from urllib .request import FancyURLopener
26
27
except ImportError :
@@ -182,17 +183,17 @@ def get_env(self):
182
183
# env["LD"] = sh.xcrun("-find", "-sdk", self.sdk, "ld").strip()
183
184
184
185
# AND: Added flags manually, removed $OFLAG
185
- env ["OTHER_CFLAGS" ] = " " .join (
186
- include_dirs )
187
- # AND:
186
+ # env["OTHER_CFLAGS"] = " ".join(
187
+ # include_dirs)
188
+
189
+ # env["OTHER_LDFLAGS"] = " ".join([
190
+ # "-L{}/{}".format(self.ctx.dist_dir, "lib"),
191
+ # ])
188
192
189
- env ["OTHER_LDFLAGS" ] = " " .join ([
190
- "-L{}/{}" .format (self .ctx .dist_dir , "lib" ),
191
- ])
192
193
env ["CFLAGS" ] = " " .join ([
193
194
"-DANDROID" , "-mandroid" , "-fomit-frame-pointer" ,
194
- "--sysroot" , self .ctx .ndk_platform ] +
195
- include_dirs )
195
+ "--sysroot" , self .ctx .ndk_platform ])
196
+
196
197
env ["CXXFLAGS" ] = env ["CFLAGS" ]
197
198
198
199
env ["LDFLAGS" ] = " " .join (['-lm' ])
@@ -212,12 +213,28 @@ def get_env(self):
212
213
toolchain_version = '4.9'
213
214
else :
214
215
print ('Error: NDK not supported by these tools?' )
215
- exit ()
216
+ exit (1 )
216
217
217
218
env ['TOOLCHAIN_PREFIX' ] = toolchain_prefix
218
219
env ['TOOLCHAIN_VERSION' ] = toolchain_version
219
220
220
- env ['PATH' ] = "{sdk_dir}/toolchains/{toolchain_prefix}-{toolchain_version}/prebuilt/{py_platform}-x86/bin/:{ndk_dir}/toolchains/{toolchain_prefix}-{toolchain_version}/prebuilt/{py_platform}-x86_64/bin/:{ndk_dir}:{sdk_dir}/tools:{path}" .format (sdk_dir = self .ctx .sdk_dir , ndk_dir = self .ctx .ndk_dir , toolchain_prefix = toolchain_prefix , toolchain_version = toolchain_version , py_platform = py_platform , path = environ .get ('PATH' ))
221
+ env ['PATH' ] = ('{ndk_dir}/toolchains/{toolchain_prefix}-{toolchain_version}/'
222
+ 'prebuilt/{py_platform}-x86/bin/:{ndk_dir}/toolchains/'
223
+ '{toolchain_prefix}-{toolchain_version}/prebuilt/'
224
+ '{py_platform}-x86_64/bin/:{ndk_dir}:{sdk_dir}/'
225
+ 'tools:{path}' ).format (
226
+ sdk_dir = self .ctx .sdk_dir , ndk_dir = self .ctx .ndk_dir ,
227
+ toolchain_prefix = toolchain_prefix ,
228
+ toolchain_version = toolchain_version ,
229
+ py_platform = py_platform , path = environ .get ('PATH' ))
230
+
231
+ print ('path is' , env ['PATH' ])
232
+
233
+ cc = find_executable ('{toolchain_prefix}-gcc' .format (
234
+ toolchain_prefix = toolchain_prefix ), path = env ['PATH' ])
235
+ if cc is None :
236
+ print ('Couldn\' t find executable for CC. Exiting.' )
237
+ exit (1 )
221
238
222
239
env ['CC' ] = '{toolchain_prefix}-gcc {cflags}' .format (
223
240
toolchain_prefix = toolchain_prefix ,
@@ -234,8 +251,6 @@ def get_env(self):
234
251
env ['MAKE' ] = 'make -j5'
235
252
env ['READELF' ] = '{}-readelf' .format (toolchain_prefix )
236
253
237
- print ('path is' , env ['PATH' ])
238
-
239
254
return env
240
255
241
256
@@ -323,6 +338,7 @@ class Context(object):
323
338
root_dir = None # the filepath of toolchain.py
324
339
build_dir = None # in which bootstraps are copied for building and recipes are built
325
340
dist_dir = None # the Android project folder where everything ends up
341
+ libs_dir = None
326
342
ccache = None # whether to use ccache
327
343
cython = None # the cython interpreter name
328
344
@@ -392,6 +408,7 @@ def __init__(self):
392
408
self .root_dir = realpath (dirname (__file__ ))
393
409
self .build_dir = "{}/build" .format (self .root_dir )
394
410
self .cache_dir = "{}/.cache" .format (self .root_dir )
411
+ self .libs_dir = join (self .build_dir , 'libs' )
395
412
self .dist_dir = "{}/dist" .format (self .root_dir )
396
413
# AND: Are the install_dir and include_dir the same for Android?
397
414
self .install_dir = "{}/dist/root" .format (self .root_dir )
@@ -436,6 +453,7 @@ def __init__(self):
436
453
ensure_dir (self .cache_dir )
437
454
ensure_dir (self .dist_dir )
438
455
ensure_dir (self .install_dir )
456
+ ensure_dir (self .libs_dir )
439
457
440
458
ensure_dir (join (self .build_dir , 'bootstrap_builds' ))
441
459
ensure_dir (join (self .build_dir , 'other_builds' )) # where everything else is built
@@ -686,6 +704,10 @@ def name(self):
686
704
def get_build_dir (self , arch ):
687
705
return join (self .ctx .build_dir , 'other_builds' , self .name , arch )
688
706
707
+ def get_actual_build_dir (self , arch ):
708
+ return join (self .ctx .build_dir , 'other_builds' , self .name , arch ,
709
+ get_directory (self .versioned_url ))
710
+
689
711
def get_recipe_dir (self ):
690
712
# AND: Redundant, an equivalent property is already set by get_recipe
691
713
return join (self .ctx .root_dir , 'recipes' , self .name )
@@ -1401,6 +1423,13 @@ def create_android_project(self):
1401
1423
1402
1424
print ('Done building recipes, exiting for now.' )
1403
1425
return
1426
+
1427
+ def print_context_info (self ):
1428
+ ctx = Context ()
1429
+ for attribute in ('root_dir' , 'build_dir' , 'dist_dir' , 'libs_dir' ,
1430
+ 'ccache' , 'cython' , 'sdk_dir' , 'ndk_dir' , 'ndk_platform' ,
1431
+ 'ndk_ver' , 'android_api' ):
1432
+ print ('{} is {}' .format (attribute , getattr (ctx , attribute )))
1404
1433
1405
1434
1406
1435
# def create(self):
0 commit comments