@@ -138,6 +138,8 @@ def add_dependencies(dependencies, excludes=True):
138
138
components = dependencies [:]
139
139
while components :
140
140
component = components .pop (0 )
141
+ if component .stage1_only and not stage1 :
142
+ continue
141
143
if component .final_stage_only and stage1 :
142
144
continue
143
145
if component not in components_to_build and not (excludes and is_excluded (component )):
@@ -240,18 +242,6 @@ def _get_main_component(components):
240
242
return main_component
241
243
242
244
243
- _src_jdk = mx_sdk_vm .base_jdk ()
244
- _src_jdk_version = mx_sdk_vm .base_jdk_version ()
245
-
246
- # Example:
247
- # macOS:
248
- # _src_jdk_dir = /Library/Java/JavaVirtualMachines/oraclejdk1.8.0_221-jvmci-19.2-b02
249
- # _src_jdk_base = Contents/Home
250
- # Others:
251
- # _src_jdk_dir = $JAVA_HOME (e.g. /usr/lib/jvm/oraclejdk1.8.0_212-jvmci-19.2-b01)
252
- # _src_jdk_base = .
253
- _src_jdk_dir , _src_jdk_base = _get_jdk_base (_src_jdk )
254
-
255
245
""":type: dict[str, (str, str)]"""
256
246
_parent_info_cache = {}
257
247
@@ -282,6 +272,15 @@ def __init__(self, suite, name, deps, components, is_graalvm, exclLibs, platform
282
272
self .stage1 = stage1
283
273
self .skip_archive = stage1 or graalvm_skip_archive () # *.tar archives for stage1 distributions are never built
284
274
275
+ # Example:
276
+ # macOS:
277
+ # _src_jdk_dir = /Library/Java/JavaVirtualMachines/oraclejdk1.8.0_221-jvmci-19.2-b02
278
+ # _src_jdk_base = Contents/Home
279
+ # Others:
280
+ # _src_jdk_dir = $JAVA_HOME (e.g. /usr/lib/jvm/oraclejdk1.8.0_212-jvmci-19.2-b01)
281
+ # _src_jdk_base = .
282
+ _src_jdk_dir , _src_jdk_base = _get_jdk_base (mx_sdk_vm .base_jdk (stage1 = stage1 ))
283
+
285
284
layout = {}
286
285
src_jdk_base = _src_jdk_base if add_jdk_base else '.'
287
286
assert src_jdk_base
@@ -442,7 +441,7 @@ def _add_link(_dest, _target, _component=None, _dest_base_name=None):
442
441
if stage1 :
443
442
# 1. we do not want a GraalVM to be used as base-JDK
444
443
# 2. we don't need to check if the base JDK is JVMCI-enabled, since JVMCIVersionCheck takes care of that when the GraalVM compiler is a registered component
445
- check_versions (_src_jdk , expect_graalvm = False , check_jvmci = False )
444
+ check_versions (mx_sdk_vm . base_jdk ( stage1 = stage1 ) , expect_graalvm = False , check_jvmci = False )
446
445
447
446
# Add base JDK
448
447
if mx .get_os () == 'darwin' :
@@ -679,7 +678,7 @@ def _add_link(_dest, _target, _component=None, _dest_base_name=None):
679
678
_add (layout , '<jre_base>/lib/graalvm/' , ['dependency:' + d for d in sorted (graalvm_dists )], with_sources = True )
680
679
681
680
for _base , _suites in component_suites .items ():
682
- _metadata = self ._get_metadata (_suites )
681
+ _metadata = self ._get_metadata (_suites , stage1 = stage1 )
683
682
_add (layout , _base + 'release' , "string:{}" .format (_metadata ))
684
683
685
684
if "archive_factory" not in kw_args and self .skip_archive :
@@ -712,7 +711,7 @@ def needsUpdate(self, newestInput):
712
711
return super (BaseGraalVmLayoutDistribution , self ).needsUpdate (newestInput )
713
712
714
713
@staticmethod
715
- def _get_metadata (suites , parent_release_file = None , java_version = None ):
714
+ def _get_metadata (suites , parent_release_file = None , java_version = None , stage1 = True ):
716
715
"""
717
716
:type suites: list[mx.Suite]
718
717
:type parent_release_file: str | None
@@ -735,7 +734,7 @@ def _get_metadata(suites, parent_release_file=None, java_version=None):
735
734
else :
736
735
_metadata_dict = OrderedDict ()
737
736
738
- _metadata_dict .setdefault ('JAVA_VERSION' , java_version or _src_jdk .version )
737
+ _metadata_dict .setdefault ('JAVA_VERSION' , java_version or mx_sdk_vm . base_jdk ( stage1 = stage1 ) .version )
739
738
_metadata_dict .setdefault ('OS_NAME' , get_graalvm_os ())
740
739
_metadata_dict .setdefault ('OS_ARCH' , mx .get_arch ())
741
740
if mx .get_os_variant ():
@@ -919,7 +918,7 @@ def _get_graalvm_configuration(base_name, components=None, stage1=False):
919
918
name_prefix = '{base_name}{vm_dist_name}_java{jdk_version}' .format (
920
919
base_name = base_name ,
921
920
vm_dist_name = ('_' + vm_dist_name ) if vm_dist_name else '' ,
922
- jdk_version = _src_jdk_version
921
+ jdk_version = mx_sdk_vm . base_jdk_version ( stage1 = stage1 )
923
922
)
924
923
name = '{name_prefix}{stage_suffix}' .format (name_prefix = name_prefix , stage_suffix = '_stage1' if stage1 else '' )
925
924
else :
@@ -934,7 +933,7 @@ def _get_graalvm_configuration(base_name, components=None, stage1=False):
934
933
else :
935
934
m .update ("not-jlinked" .encode ())
936
935
short_sha1_digest = m .hexdigest ()[:10 ] # to keep paths short
937
- base_dir = '{base_name}_{hash}_java{jdk_version}' .format (base_name = base_name , hash = short_sha1_digest , jdk_version = _src_jdk_version )
936
+ base_dir = '{base_name}_{hash}_java{jdk_version}' .format (base_name = base_name , hash = short_sha1_digest , jdk_version = mx_sdk_vm . base_jdk_version ( stage1 = stage1 ) )
938
937
name = '{base_dir}{stage_suffix}' .format (base_dir = base_dir , stage_suffix = '_stage1' if stage1 else '' )
939
938
base_dir += '_' + _suite .release_version ()
940
939
name = name .upper ()
@@ -1590,11 +1589,12 @@ def with_source(dep):
1590
1589
return not isinstance (dep , mx .Dependency ) or (_include_sources (dep .qualifiedName ()) and dep .isJARDistribution () and not dep .is_stripped ())
1591
1590
vendor_info = {'vendor-version' : graalvm_vendor_version ()}
1592
1591
out_dir = self .subject .output_directory ()
1592
+ stage1 = 'stage1' in self .subject .name
1593
1593
1594
1594
if _jlink_libraries ():
1595
1595
use_upgrade_module_path = mx .get_env ('MX_BUILD_EXPLODED' ) == 'true'
1596
1596
1597
- built = mx_sdk .jlink_new_jdk (_src_jdk ,
1597
+ built = mx_sdk .jlink_new_jdk (mx_sdk_vm . base_jdk ( stage1 = stage1 ) ,
1598
1598
out_dir ,
1599
1599
self .subject .deps ,
1600
1600
self .subject .jimage_ignore_jars ,
@@ -1607,12 +1607,12 @@ def with_source(dep):
1607
1607
mx .warn ("--no-jlinking flag used. The resulting VM will be HotSpot, not GraalVM" )
1608
1608
if exists (out_dir ):
1609
1609
mx .rmtree (out_dir )
1610
- shutil .copytree (_src_jdk .home , out_dir , symlinks = True )
1610
+ shutil .copytree (mx_sdk_vm . base_jdk ( stage1 = stage1 ) .home , out_dir , symlinks = True )
1611
1611
built = True
1612
1612
1613
1613
release_file = join (out_dir , 'release' )
1614
1614
_sorted_suites = sorted (mx .suites (), key = lambda s : s .name )
1615
- _metadata = BaseGraalVmLayoutDistribution ._get_metadata (_sorted_suites , release_file )
1615
+ _metadata = BaseGraalVmLayoutDistribution ._get_metadata (_sorted_suites , release_file , stage1 = stage1 )
1616
1616
with open (release_file , 'w' ) as f :
1617
1617
f .write (_metadata )
1618
1618
@@ -1656,7 +1656,7 @@ def _config(self):
1656
1656
# Save the path and timestamp of the JDK image so that graalvm-jimage
1657
1657
# is rebuilt if the JDK at JAVA_HOME is rebuilt. The JDK image file is
1658
1658
# always updated when the JDK is rebuilt.
1659
- src_jimage = mx .TimeStampFile (join (_src_jdk .home , 'lib' , 'modules' ))
1659
+ src_jimage = mx .TimeStampFile (join (mx_sdk_vm . base_jdk () .home , 'lib' , 'modules' ))
1660
1660
return [
1661
1661
f'include sources: { _include_sources_str ()} ' ,
1662
1662
f'strip jars: { mx .get_opts ().strip_jars } ' ,
@@ -2109,7 +2109,7 @@ def graalvm_home_relative_classpath(dependencies, start=None, with_boot_jars=Fal
2109
2109
if jimage_deps and _jlink_libraries () and _cp_entry in jimage_deps :
2110
2110
continue
2111
2111
if _cp_entry .isJdkLibrary () or _cp_entry .isJreLibrary ():
2112
- jdk = _src_jdk
2112
+ jdk = mx_sdk_vm . base_jdk ( stage1 = graal_vm . stage1 )
2113
2113
if hasattr (_cp_entry , 'jdkStandardizedSince' ) and jdk .javaCompliance >= _cp_entry .jdkStandardizedSince :
2114
2114
continue
2115
2115
jdk_location = relpath (_cp_entry .classpath_repr (jdk ), jdk .home )
@@ -2294,12 +2294,6 @@ def __str__(self):
2294
2294
return 'Building {}' .format (self .subject .name )
2295
2295
2296
2296
2297
- def _get_component_stability (component ):
2298
- if _src_jdk_version not in (17 , 20 ):
2299
- return "experimental"
2300
- return component .stability
2301
-
2302
-
2303
2297
def default_jvm_components ():
2304
2298
"""
2305
2299
Components that, for now, must be included in the JVM.
@@ -2312,7 +2306,7 @@ def _get_jvm_cfg():
2312
2306
candidates = (['lib' , 'jvm.cfg' ], ['jre' , 'lib' , 'jvm.cfg' ], ['jre' , 'lib' , mx .get_arch (), 'jvm.cfg' ])
2313
2307
probed = []
2314
2308
for candidate in candidates :
2315
- jvm_cfg = join (_src_jdk .home , * candidate )
2309
+ jvm_cfg = join (mx_sdk_vm . base_jdk () .home , * candidate )
2316
2310
if exists (jvm_cfg ):
2317
2311
return jvm_cfg
2318
2312
probed .append (jvm_cfg )
@@ -2761,6 +2755,7 @@ def register_main_dist(dist, label):
2761
2755
defaultBuild = False ,
2762
2756
missing_export_target_action = 'warn' ,
2763
2757
default_to_jvmci = 'lib' if has_lib_graal else False ,
2758
+ stage1 = False ,
2764
2759
)
2765
2760
register_project (java_standalone_jimage )
2766
2761
@@ -2831,6 +2826,11 @@ def register_main_dist(dist, label):
2831
2826
2832
2827
def _needs_stage1_jimage (stage1_dist , final_dist ):
2833
2828
assert isinstance (stage1_dist .jimage_jars , set ) and isinstance (final_dist .jimage_jars , set )
2829
+
2830
+ if mx_sdk_vm .base_jdk (stage1 = True ) != mx_sdk_vm .base_jdk (stage1 = False ):
2831
+ # cross-build, always need a stage1_jimage
2832
+ return True
2833
+
2834
2834
return stage1_dist .jimage_jars != final_dist .jimage_jars
2835
2835
2836
2836
@@ -3239,7 +3239,7 @@ def graalvm_show(args, forced_graalvm_dist=None):
3239
3239
print ("Config name: {}" .format (graalvm_dist .vm_config_name ))
3240
3240
print ("Components:" )
3241
3241
for component in sorted (graalvm_dist .components , key = lambda c : c .name ):
3242
- print (" - {} ('{}', /{}, {} )" .format (component .name , component .short_name , component .dir_name , _get_component_stability ( component ) ))
3242
+ print (" - {} ('{}', /{})" .format (component .name , component .short_name , component .dir_name ))
3243
3243
3244
3244
if forced_graalvm_dist is None :
3245
3245
# Custom GraalVM distributions with a forced component list do not yet support launchers and libraries.
@@ -3388,7 +3388,7 @@ def print_graalvm_vm_name(args):
3388
3388
"""Print the VM name of GraalVM"""
3389
3389
parser = ArgumentParser (prog = 'mx graalvm-vm-name' , description = 'Print the VM name of GraalVM' )
3390
3390
_ = parser .parse_args (args )
3391
- print (graalvm_vm_name (get_final_graalvm_distribution (), _src_jdk ))
3391
+ print (graalvm_vm_name (get_final_graalvm_distribution (), mx_sdk_vm . base_jdk ( stage1 = False ) ))
3392
3392
3393
3393
def graalvm_vm_name (graalvm_dist , jdk ):
3394
3394
"""
0 commit comments