Skip to content

Commit bdc250b

Browse files
Allow creating multiple espresso resource jars
* `EXTRA_ESPRESSO_JAVA_HOMES` can be set to create additional espresso runtime resource jars. Multiple entries can be separated with the path separator. * `EXTRA_ESPRESSO_LLVM_JAVA_HOMES` can also be set to provide LLVM bits. When it is set, it should have the same lentgh and order as `EXTRA_ESPRESSO_JAVA_HOMES`. * `espresso:JAVA_HOME` and `espresso:LLVM_JAVA_HOMES` are renamed with an `ESPRESSO_` prefix to avoid confusion.
1 parent c09364f commit bdc250b

File tree

3 files changed

+62
-23
lines changed

3 files changed

+62
-23
lines changed

espresso/mx.espresso/mx_espresso.py

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -476,14 +476,14 @@ def _espresso_input_jdk():
476476
def get_java_home_dep():
477477
global _java_home_dep
478478
if _java_home_dep is None:
479-
_java_home_dep = JavaHomeDependency(_suite, "JAVA_HOME", _espresso_input_jdk().home)
479+
_java_home_dep = JavaHomeDependency(_suite, "ESPRESSO_JAVA_HOME", _espresso_input_jdk().home)
480480
return _java_home_dep
481481

482482

483483
def get_llvm_java_home_dep():
484484
global _llvm_java_home_dep
485485
if _llvm_java_home_dep is None and jvm_standalone_with_llvm():
486-
_llvm_java_home_dep = JavaHomeDependency(_suite, "LLVM_JAVA_HOME", espresso_llvm_java_home)
486+
_llvm_java_home_dep = JavaHomeDependency(_suite, "ESPRESSO_LLVM_JAVA_HOME", espresso_llvm_java_home)
487487
return _llvm_java_home_dep
488488

489489
def jvm_standalone_with_llvm():
@@ -527,8 +527,8 @@ def mx_register_dynamic_suite_constituents(register_project, register_distributi
527527
register_distribution(llvm_java_home_dep)
528528
register_distribution(mx.LayoutTARDistribution(_suite, 'ESPRESSO_LLVM_SUPPORT', [], {
529529
"lib/llvm/default/": [
530-
f"dependency:LLVM_JAVA_HOME/{jdk_lib_dir}/{lib_prefix}*{lib_suffix}",
531-
"dependency:LLVM_JAVA_HOME/release"
530+
f"dependency:ESPRESSO_LLVM_JAVA_HOME/{jdk_lib_dir}/{lib_prefix}*{lib_suffix}",
531+
"dependency:ESPRESSO_LLVM_JAVA_HOME/release"
532532
],
533533
}, None, True, None))
534534
register_distribution(mx.LayoutDirDistribution(_suite, 'ESPRESSO_STANDALONE_LLVM_HOME', [], {
@@ -580,23 +580,56 @@ def mx_register_dynamic_suite_constituents(register_project, register_distributi
580580
enterprise_dist_name=f'GRAALVM_ESPRESSO_JAVA{java_home_dep.major_version}{dist_suffix}'))
581581

582582

583-
def espresso_resources_suite():
583+
def espresso_resources_suite(java_home_dep=None):
584584
# Espresso resources are in the CE/EE suite depending on espresso java home type
585585
# or in espresso if there is no EE suite
586-
java_home_dep = get_java_home_dep()
586+
java_home_dep = java_home_dep or get_java_home_dep()
587587
if java_home_dep.is_ee_implementor and mx.suite('espresso-tests', fatalIfMissing=False):
588588
return 'espresso-tests'
589589
else:
590590
return 'espresso'
591591

592592

593593
def register_espresso_runtime_resources(register_project, register_distribution, suite):
594-
java_home_dep = get_java_home_dep()
595-
llvm_java_home_dep = get_llvm_java_home_dep()
596-
is_ee_suite = suite != _suite
597594
if espresso_resources_suite() != suite.name:
598595
return
596+
register_espresso_runtime_resource(get_java_home_dep(), get_llvm_java_home_dep(), register_project, register_distribution, suite, True)
597+
extra_java_homes = mx.get_env('EXTRA_ESPRESSO_JAVA_HOMES')
598+
if extra_java_homes:
599+
extra_java_homes = extra_java_homes.split(os.pathsep)
600+
else:
601+
extra_java_homes = []
602+
extra_llvm_java_homes = mx.get_env('EXTRA_ESPRESSO_LLVM_JAVA_HOMES')
603+
if extra_llvm_java_homes:
604+
extra_llvm_java_homes = extra_llvm_java_homes.split(os.pathsep)
605+
else:
606+
extra_llvm_java_homes = []
607+
if extra_llvm_java_homes:
608+
if len(extra_llvm_java_homes) != len(extra_java_homes):
609+
raise mx.abort("EXTRA_ESPRESSO_LLVM_JAVA_HOMES must either be empty or contain as many elements as EXTRA_ESPRESSO_JAVA_HOMES")
610+
else:
611+
extra_llvm_java_homes = [None] * len(extra_java_homes)
612+
613+
versions = {get_java_home_dep().major_version}
614+
for extra_java_home, extra_llvm_java_home in zip(extra_java_homes, extra_llvm_java_homes):
615+
extra_java_home_dep = JavaHomeDependency(suite, "ESPRESSO_JAVA_HOME_<version>", extra_java_home)
616+
if extra_java_home_dep.major_version in versions:
617+
raise mx.abort("Each entry in EXTRA_ESPRESSO_JAVA_HOMES should have a different java version, and they should all be different from ESPRESSO_JAVA_HOME's version")
618+
versions.add(extra_java_home_dep.major_version)
619+
if extra_llvm_java_home:
620+
extra_llvm_java_home_dep = JavaHomeDependency(suite, "ESPRESSO_LLVM_JAVA_HOME_<version>", extra_llvm_java_home)
621+
else:
622+
extra_llvm_java_home_dep = None
623+
if espresso_resources_suite(extra_java_home_dep) != suite.name:
624+
continue
625+
register_distribution(extra_java_home_dep)
626+
if extra_llvm_java_home_dep:
627+
register_distribution(extra_llvm_java_home_dep)
628+
register_espresso_runtime_resource(extra_java_home_dep, extra_llvm_java_home_dep, register_project, register_distribution, suite, False)
629+
599630

631+
def register_espresso_runtime_resource(java_home_dep, llvm_java_home_dep, register_project, register_distribution, suite, is_main):
632+
is_ee_suite = suite != _suite
600633
if llvm_java_home_dep:
601634
lib_prefix = mx.add_lib_prefix('')
602635
lib_suffix = mx.add_lib_suffix('')
@@ -624,7 +657,7 @@ def register_espresso_runtime_resources(register_project, register_distribution,
624657
raise mx.abort("The implementors for ESPRESSO's JAVA_HOME and LLVM JAVA_HOME don't match")
625658
llvm_runtime_dir = {
626659
"source_type": "dependency",
627-
"dependency": "espresso:LLVM_JAVA_HOME",
660+
"dependency": llvm_java_home_dep.qualifiedName(),
628661
"path": f"{jdk_lib_dir}/<lib:*>",
629662
}
630663
else:
@@ -643,16 +676,17 @@ def register_espresso_runtime_resources(register_project, register_distribution,
643676
"man",
644677
]
645678
if java_home_dep.is_ee_implementor:
646-
espresso_runtime_resource_name = "jdk" + str(java_home_dep.major_version)
679+
espresso_runtime_resource_name = f"jdk{java_home_dep.major_version}"
647680
else:
648-
espresso_runtime_resource_name = "openjdk" + str(java_home_dep.major_version)
681+
espresso_runtime_resource_name = f"openjdk{java_home_dep.major_version}"
682+
runtime_dir_dist_name = f"ESPRESSO_RUNTIME_DIR_{java_home_dep.major_version}"
649683
register_distribution(mx.LayoutDirDistribution(
650-
suite, "ESPRESSO_RUNTIME_DIR",
684+
suite, runtime_dir_dist_name,
651685
deps=[],
652686
layout={
653687
f"META-INF/resources/java/espresso-runtime-{espresso_runtime_resource_name}/<os>/<arch>/": {
654688
"source_type": "dependency",
655-
"dependency": "espresso:JAVA_HOME",
689+
"dependency": java_home_dep.qualifiedName(),
656690
"path": "*",
657691
"exclude": [
658692
"include",
@@ -679,18 +713,23 @@ def register_espresso_runtime_resources(register_project, register_distribution,
679713
hashEntry=f"META-INF/resources/java/espresso-runtime-{espresso_runtime_resource_name}/<os>/<arch>/sha256",
680714
fileListEntry=f"META-INF/resources/java/espresso-runtime-{espresso_runtime_resource_name}/<os>/<arch>/files",
681715
maven=False))
716+
runtime_resources_project_name = f'com.oracle.truffle.espresso.resources.runtime.{espresso_runtime_resource_name}'
682717
if register_project:
683718
# com.oracle.truffle.espresso.resources.runtime
684-
register_project(EspressoRuntimeResourceProject(suite, 'src', espresso_runtime_resource_name, suite.defaultLicense))
719+
register_project(EspressoRuntimeResourceProject(suite, runtime_resources_project_name, 'src', espresso_runtime_resource_name, suite.defaultLicense))
685720

721+
if is_main:
722+
runtime_resources_dist_name = "ESPRESSO_RUNTIME_RESOURCES"
723+
else:
724+
runtime_resources_dist_name = f"ESPRESSO_RUNTIME_RESOURCES_{java_home_dep.major_version}"
686725
register_distribution(mx_jardistribution.JARDistribution(
687-
suite, "ESPRESSO_RUNTIME_RESOURCES", None, None, None,
726+
suite, runtime_resources_dist_name, None, None, None,
688727
moduleInfo={
689-
"name": "org.graalvm.espresso.resources.runtime",
728+
"name": f"org.graalvm.espresso.resources.runtime.{espresso_runtime_resource_name}",
690729
},
691730
deps=[
692-
"com.oracle.truffle.espresso.resources.runtime",
693-
"ESPRESSO_RUNTIME_DIR",
731+
runtime_resources_project_name,
732+
runtime_dir_dist_name,
694733
],
695734
mainClass=None,
696735
excludedLibs=[],
@@ -709,8 +748,7 @@ def register_espresso_runtime_resources(register_project, register_distribution,
709748

710749

711750
class EspressoRuntimeResourceProject(mx.JavaProject):
712-
def __init__(self, suite, subDir, runtime_name, theLicense):
713-
name = f'com.oracle.truffle.espresso.resources.runtime'
751+
def __init__(self, suite, name, subDir, runtime_name, theLicense):
714752
project_dir = join(suite.dir, subDir, name)
715753
deps = ['truffle:TRUFFLE_API']
716754
super().__init__(suite, name, subDir=subDir, srcDirs=[], deps=deps,

espresso/mx.espresso/suite.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@
548548
"layout": {
549549
"./": [{
550550
"source_type": "dependency",
551-
"dependency": "espresso:JAVA_HOME",
551+
"dependency": "espresso:ESPRESSO_JAVA_HOME",
552552
"path": "*",
553553
"exclude": [
554554
"lib/jfr",
@@ -610,7 +610,7 @@
610610
],
611611
"./": [{
612612
"source_type": "dependency",
613-
"dependency": "espresso:JAVA_HOME",
613+
"dependency": "espresso:ESPRESSO_JAVA_HOME",
614614
"path": "*",
615615
"exclude": [
616616
"bin", # those can't run without <jdk_lib_dir>/server

sdk/mx.sdk/mx_sdk_vm_ng.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,7 @@ def __init__(self, suite, name, java_home):
751751
self.is_ee_implementor = release_dict.get('IMPLEMENTOR') == 'Oracle Corporation'
752752
self.version = mx.VersionSpec(release_dict.get('JAVA_VERSION'))
753753
self.major_version = self.version.parts[1] if self.version.parts[0] == 1 else self.version.parts[0]
754+
name = name.replace('<version>', str(self.major_version))
754755
if self.is_ee_implementor:
755756
the_license = "Oracle Proprietary"
756757
else:

0 commit comments

Comments
 (0)