@@ -281,6 +281,7 @@ def _parse_args(args):
281
281
parser .add_argument ('--jdk-binaries' , action = 'store' , metavar = '<path>' , help = '{} separated JSON files specifying location of JDK binaries (default: {})' .format (os .pathsep , default_jdk_binaries_location ))
282
282
parser .add_argument ('--to' , action = 'store' , metavar = '<dir>' , help = 'location where JDK will be installed. Specify <system> to use the system default location. (default: {})' .format (settings ["jdks-dir" ]))
283
283
parser .add_argument ('--alias' , action = 'store' , metavar = '<path>' , help = 'name under which the extracted JDK should be made available (e.g. via a symlink). A relative path will be resolved against the value of the --to option.' )
284
+ parser .add_argument ('--arch' , action = 'store' , metavar = '<name>' , help = f'arch of binary to be retrieved (default: { mx .get_arch ()} )' , default = mx .get_arch ())
284
285
parser .add_argument ('--keep-archive' , action = 'store_true' , help = 'keep downloaded JDK archive' )
285
286
parser .add_argument ('--strip-contents-home' , action = 'store_true' , help = 'strip Contents/Home if it exists from installed JDK' )
286
287
args = parser .parse_args (args )
@@ -289,6 +290,8 @@ def _parse_args(args):
289
290
if args .to == '<system>' :
290
291
args .to = _default_system_jdks_dir ()
291
292
settings ["jdks-dir" ] = args .to
293
+ elif args .arch != mx .get_arch ():
294
+ settings ["jdks-dir" ] = join (settings ["jdks-dir" ], args .arch )
292
295
293
296
if not _check_write_access (settings ["jdks-dir" ]):
294
297
mx .abort ("JDK installation directory {} is not writeable." .format (settings ["jdks-dir" ]) + os .linesep +
@@ -298,7 +301,7 @@ def _parse_args(args):
298
301
jdk_binaries_locations = (args .jdk_binaries or default_jdk_binaries_location ).split (os .pathsep )
299
302
300
303
jdk_versions = _parse_jdk_versions (jdk_versions_location )
301
- jdk_binaries = _parse_jdk_binaries (jdk_binaries_locations , jdk_versions )
304
+ jdk_binaries = _parse_jdk_binaries (jdk_binaries_locations , jdk_versions , args . arch )
302
305
303
306
if args .jdk_id is not None :
304
307
settings ["jdk-binary" ] = _get_jdk_binary_or_abort (jdk_binaries , args .jdk_id )
@@ -338,7 +341,7 @@ def _parse_jdk_versions(path):
338
341
obj = _parse_json (path )
339
342
return {jdk_id : _get_json_attr (jdk_obj , 'version' , str , '{} -> "jdks" -> "{}"' .format (path , jdk_id )) for jdk_id , jdk_obj in _get_json_attr (obj , 'jdks' , dict , path ).items ()}
340
343
341
- def _parse_jdk_binaries (paths , jdk_versions ):
344
+ def _parse_jdk_binaries (paths , jdk_versions , arch ):
342
345
jdk_binaries = {}
343
346
for path in paths :
344
347
if not exists (path ):
@@ -359,7 +362,7 @@ def get_entry(name):
359
362
version = jdk_versions .get (jdk_id )
360
363
jdk_binary_id = jdk_id + qualifier
361
364
if version and not jdk_binary_id in jdk_binaries :
362
- jdk_binary = _JdkBinary (jdk_binary_id , version , get_entry ('filename' ), get_entry ('url' ), source )
365
+ jdk_binary = _JdkBinary (jdk_binary_id , version , get_entry ('filename' ), get_entry ('url' ), source , arch )
363
366
jdk_binaries [jdk_binary_id ] = jdk_binary
364
367
return jdk_binaries
365
368
@@ -439,13 +442,14 @@ def _choose_jdk_binary(jdk_binaries, quiet=False):
439
442
440
443
class _JdkBinary (object ):
441
444
442
- def __init__ (self , jdk_id , version , filename , url , source ):
445
+ def __init__ (self , jdk_id , version , filename , url , source , arch ):
443
446
self ._jdk_id = jdk_id
444
447
self ._version = version
445
448
self ._filename_template = filename
446
449
self ._url_template = url
447
450
self ._source = source
448
- platform = mx .get_os () + '-' + mx .get_arch ()
451
+ self ._arch = arch
452
+ platform = mx .get_os () + '-' + arch
449
453
keywords = {'version' : version , 'platform' : platform }
450
454
self ._filename = _instantiate (filename , keywords , source )
451
455
keywords ['filename' ] = self ._filename
@@ -457,7 +461,7 @@ def __repr__(self):
457
461
return '{}: file={}, url={}' .format (self ._jdk_id , self ._filename , self ._url )
458
462
459
463
def with_version (self , version ):
460
- return _JdkBinary (self ._jdk_id , version , self ._filename_template , self ._url_template , self ._source )
464
+ return _JdkBinary (self ._jdk_id , version , self ._filename_template , self ._url_template , self ._source , self . _arch )
461
465
462
466
def get_final_path (self , jdk_path ):
463
467
return join (jdk_path , self ._folder_name )
0 commit comments