@@ -138,6 +138,8 @@ def add_dependencies(dependencies, excludes=True):
138138 components = dependencies [:]
139139 while components :
140140 component = components .pop (0 )
141+ if component .stage1_only and not stage1 :
142+ continue
141143 if component .final_stage_only and stage1 :
142144 continue
143145 if component not in components_to_build and not (excludes and is_excluded (component )):
@@ -240,18 +242,6 @@ def _get_main_component(components):
240242 return main_component
241243
242244
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-
255245""":type: dict[str, (str, str)]"""
256246_parent_info_cache = {}
257247
@@ -282,6 +272,15 @@ def __init__(self, suite, name, deps, components, is_graalvm, exclLibs, platform
282272 self .stage1 = stage1
283273 self .skip_archive = stage1 or graalvm_skip_archive () # *.tar archives for stage1 distributions are never built
284274
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+
285284 layout = {}
286285 src_jdk_base = _src_jdk_base if add_jdk_base else '.'
287286 assert src_jdk_base
@@ -442,7 +441,7 @@ def _add_link(_dest, _target, _component=None, _dest_base_name=None):
442441 if stage1 :
443442 # 1. we do not want a GraalVM to be used as base-JDK
444443 # 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 )
446445
447446 # Add base JDK
448447 if mx .get_os () == 'darwin' :
@@ -679,7 +678,7 @@ def _add_link(_dest, _target, _component=None, _dest_base_name=None):
679678 _add (layout , '<jre_base>/lib/graalvm/' , ['dependency:' + d for d in sorted (graalvm_dists )], with_sources = True )
680679
681680 for _base , _suites in component_suites .items ():
682- _metadata = self ._get_metadata (_suites )
681+ _metadata = self ._get_metadata (_suites , stage1 = stage1 )
683682 _add (layout , _base + 'release' , "string:{}" .format (_metadata ))
684683
685684 if "archive_factory" not in kw_args and self .skip_archive :
@@ -712,7 +711,7 @@ def needsUpdate(self, newestInput):
712711 return super (BaseGraalVmLayoutDistribution , self ).needsUpdate (newestInput )
713712
714713 @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 ):
716715 """
717716 :type suites: list[mx.Suite]
718717 :type parent_release_file: str | None
@@ -735,7 +734,7 @@ def _get_metadata(suites, parent_release_file=None, java_version=None):
735734 else :
736735 _metadata_dict = OrderedDict ()
737736
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 )
739738 _metadata_dict .setdefault ('OS_NAME' , get_graalvm_os ())
740739 _metadata_dict .setdefault ('OS_ARCH' , mx .get_arch ())
741740 if mx .get_os_variant ():
@@ -919,7 +918,7 @@ def _get_graalvm_configuration(base_name, components=None, stage1=False):
919918 name_prefix = '{base_name}{vm_dist_name}_java{jdk_version}' .format (
920919 base_name = base_name ,
921920 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 )
923922 )
924923 name = '{name_prefix}{stage_suffix}' .format (name_prefix = name_prefix , stage_suffix = '_stage1' if stage1 else '' )
925924 else :
@@ -934,7 +933,7 @@ def _get_graalvm_configuration(base_name, components=None, stage1=False):
934933 else :
935934 m .update ("not-jlinked" .encode ())
936935 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 ) )
938937 name = '{base_dir}{stage_suffix}' .format (base_dir = base_dir , stage_suffix = '_stage1' if stage1 else '' )
939938 base_dir += '_' + _suite .release_version ()
940939 name = name .upper ()
@@ -1590,11 +1589,12 @@ def with_source(dep):
15901589 return not isinstance (dep , mx .Dependency ) or (_include_sources (dep .qualifiedName ()) and dep .isJARDistribution () and not dep .is_stripped ())
15911590 vendor_info = {'vendor-version' : graalvm_vendor_version ()}
15921591 out_dir = self .subject .output_directory ()
1592+ stage1 = 'stage1' in self .subject .name
15931593
15941594 if _jlink_libraries ():
15951595 use_upgrade_module_path = mx .get_env ('MX_BUILD_EXPLODED' ) == 'true'
15961596
1597- built = mx_sdk .jlink_new_jdk (_src_jdk ,
1597+ built = mx_sdk .jlink_new_jdk (mx_sdk_vm . base_jdk ( stage1 = stage1 ) ,
15981598 out_dir ,
15991599 self .subject .deps ,
16001600 self .subject .jimage_ignore_jars ,
@@ -1607,12 +1607,12 @@ def with_source(dep):
16071607 mx .warn ("--no-jlinking flag used. The resulting VM will be HotSpot, not GraalVM" )
16081608 if exists (out_dir ):
16091609 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 )
16111611 built = True
16121612
16131613 release_file = join (out_dir , 'release' )
16141614 _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 )
16161616 with open (release_file , 'w' ) as f :
16171617 f .write (_metadata )
16181618
@@ -1656,7 +1656,7 @@ def _config(self):
16561656 # Save the path and timestamp of the JDK image so that graalvm-jimage
16571657 # is rebuilt if the JDK at JAVA_HOME is rebuilt. The JDK image file is
16581658 # 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' ))
16601660 return [
16611661 f'include sources: { _include_sources_str ()} ' ,
16621662 f'strip jars: { mx .get_opts ().strip_jars } ' ,
@@ -2109,7 +2109,7 @@ def graalvm_home_relative_classpath(dependencies, start=None, with_boot_jars=Fal
21092109 if jimage_deps and _jlink_libraries () and _cp_entry in jimage_deps :
21102110 continue
21112111 if _cp_entry .isJdkLibrary () or _cp_entry .isJreLibrary ():
2112- jdk = _src_jdk
2112+ jdk = mx_sdk_vm . base_jdk ( stage1 = graal_vm . stage1 )
21132113 if hasattr (_cp_entry , 'jdkStandardizedSince' ) and jdk .javaCompliance >= _cp_entry .jdkStandardizedSince :
21142114 continue
21152115 jdk_location = relpath (_cp_entry .classpath_repr (jdk ), jdk .home )
@@ -2294,12 +2294,6 @@ def __str__(self):
22942294 return 'Building {}' .format (self .subject .name )
22952295
22962296
2297- def _get_component_stability (component ):
2298- if _src_jdk_version not in (17 , 20 ):
2299- return "experimental"
2300- return component .stability
2301-
2302-
23032297def default_jvm_components ():
23042298 """
23052299 Components that, for now, must be included in the JVM.
@@ -2312,7 +2306,7 @@ def _get_jvm_cfg():
23122306 candidates = (['lib' , 'jvm.cfg' ], ['jre' , 'lib' , 'jvm.cfg' ], ['jre' , 'lib' , mx .get_arch (), 'jvm.cfg' ])
23132307 probed = []
23142308 for candidate in candidates :
2315- jvm_cfg = join (_src_jdk .home , * candidate )
2309+ jvm_cfg = join (mx_sdk_vm . base_jdk () .home , * candidate )
23162310 if exists (jvm_cfg ):
23172311 return jvm_cfg
23182312 probed .append (jvm_cfg )
@@ -2761,6 +2755,7 @@ def register_main_dist(dist, label):
27612755 defaultBuild = False ,
27622756 missing_export_target_action = 'warn' ,
27632757 default_to_jvmci = 'lib' if has_lib_graal else False ,
2758+ stage1 = False ,
27642759 )
27652760 register_project (java_standalone_jimage )
27662761
@@ -2831,6 +2826,11 @@ def register_main_dist(dist, label):
28312826
28322827def _needs_stage1_jimage (stage1_dist , final_dist ):
28332828 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+
28342834 return stage1_dist .jimage_jars != final_dist .jimage_jars
28352835
28362836
@@ -3239,7 +3239,7 @@ def graalvm_show(args, forced_graalvm_dist=None):
32393239 print ("Config name: {}" .format (graalvm_dist .vm_config_name ))
32403240 print ("Components:" )
32413241 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 ))
32433243
32443244 if forced_graalvm_dist is None :
32453245 # 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):
33883388 """Print the VM name of GraalVM"""
33893389 parser = ArgumentParser (prog = 'mx graalvm-vm-name' , description = 'Print the VM name of GraalVM' )
33903390 _ = 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 ) ))
33923392
33933393def graalvm_vm_name (graalvm_dist , jdk ):
33943394 """
0 commit comments