Skip to content

Commit fe1e946

Browse files
committed
[GR-71714] Make espresso-ni-jvm usable on Darwin
PullRequest: graal/22744
2 parents 3ef18bb + 93b956d commit fe1e946

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

espresso-compiler-stub/mx.espresso-compiler-stub/mx_espresso_compiler_stub.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
stability=_espresso_stability,
4848
))
4949

50+
def _nfi_llvm_required():
51+
# Linux needs nfi-llvm in JVM mode. Darwin uses nfi-staticlib in JVM mode.
52+
return not mx.is_darwin()
53+
5054
def create_ni_standalone(base_standalone_name, register_distribution):
5155
espresso_suite = mx.suite('espresso')
5256
base_standalone = espresso_suite.dependency(base_standalone_name, fatalIfMissing=False)
@@ -66,7 +70,8 @@ def create_ni_standalone(base_standalone_name, register_distribution):
6670
else:
6771
idx = layout['languages/java/lib/'].index('dependency:espresso:ESPRESSO_JVM_STANDALONE_MOKAPOT_SUPPORT/*')
6872
if mx.is_darwin():
69-
layout['languages/java/lib/'][idx] = f'dependency:espresso:{base_standalone_name}/languages/java/lib/fatpot/<lib:jvm>'
73+
del layout['languages/java/lib/'][idx]
74+
layout['languages/java/lib/fatpot/'] = [f'dependency:espresso:{base_standalone_name}/languages/java/lib/fatpot/<lib:jvm>']
7075
else:
7176
layout['languages/java/lib/'][idx] = f'dependency:espresso:{base_standalone_name}/languages/java/lib/<lib:jvm>'
7277

@@ -76,7 +81,7 @@ def create_ni_standalone(base_standalone_name, register_distribution):
7681
layout['bin/<exe:espresso>'] = f'dependency:espresso:{base_standalone}/bin/<exe:espresso>'
7782
layout['bin/<exe:java>'] = 'link:<exe:espresso>'
7883
layout['./'][0]['exclude'].append("bin/<exe:java>")
79-
if not jvm_standalone_with_llvm():
84+
if not jvm_standalone_with_llvm() and _nfi_llvm_required():
8085
mx.warn(f"{ni_standalone_name} requires using nfi-llvm but it looks like ESPRESSO_LLVM_JAVA_HOME wasn't set.")
8186
layout['languages/java/lib/'].append("dependency:espresso-compiler-stub:ESPRESSO_GRAAL/*")
8287
layout['./'][0]['exclude'].remove('lib/static')
@@ -134,9 +139,12 @@ def _run_espresso_native_image_launcher(args, cwd=None, nonZeroIsFatal=True, out
134139
extra_args += [
135140
'--vm.Dcom.oracle.svm.driver.java.executable.override=' + espresso_launcher,
136141
'-J--java.GuestFieldOffsetStrategy=graal',
137-
'-J--java.NativeBackend=nfi-llvm',
138-
'--vm.-java.NativeBackend=nfi-llvm'
139142
]
143+
if _nfi_llvm_required():
144+
extra_args += [
145+
'-J--java.NativeBackend=nfi-llvm',
146+
'--vm.-java.NativeBackend=nfi-llvm'
147+
]
140148
standalone_output = mx.distribution(standalone).get_output()
141149
if not exists(standalone_output):
142150
raise mx.abort(f"{standalone} doesn't seem to be built, please run `mx build --targets={standalone}`")

espresso/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Espresso is a complete Java implementation which is kept up to date with the lat
2121

2222
It features complete meta-circularity: it can run itself any amount of layers deep, preserving all the capabilities (Unsafe, JNI, Reflection...) of the base layer. Running HelloWorld on three nested layers of Espresso takes **~15 minutes**.
2323

24-
The development of Espresso happens mostly on HotSpot, but this configuration (Espresso on HotSpot) is only supported on Linux, see [Limitations](docs/hacking.md#limitations).
24+
The development of Espresso happens mostly on HotSpot, but this configuration (Espresso on HotSpot) is not equally supported on all platforms, see [Limitations](docs/hacking.md#limitations).
2525

2626
## Working on Espresso
2727

espresso/ci/ci_common/common.jsonnet

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ local benchmark_suites = ['dacapo', 'renaissance', 'scala-dacapo'];
137137

138138
linux_amd64_latest: graal_common.labsjdkLatest + self.espresso_jdkLatest_llvm + self.linux_amd64,
139139
linux_aarch64_latest: graal_common.labsjdkLatest + self.linux_aarch64,
140+
darwin_aarch64_latest: graal_common.labsjdkLatest + self.darwin_aarch64,
140141

141142
linux_amd64_graalvm21: self.espresso_jdk_21 + graal_common.graalvmee21 + self.espresso_jdk_21_llvm + self.linux_amd64,
142143

@@ -198,13 +199,14 @@ local benchmark_suites = ['dacapo', 'renaissance', 'scala-dacapo'];
198199
jdk25_monthly_darwin_aarch64 : self.monthly + self.darwin_aarch64_25,
199200
jdk25_monthly_windows_amd64 : self.monthly + self.windows_25,
200201

201-
jdkLatest_tier1_linux_amd64 : self.tier1 + self.linux_amd64_latest,
202-
jdkLatest_tier2_linux_amd64 : self.tier2 + self.linux_amd64_latest,
203-
jdkLatest_tier3_linux_amd64 : self.tier3 + self.linux_amd64_latest,
204-
jdkLatest_daily_linux_amd64 : self.daily + self.linux_amd64_latest,
205-
jdkLatest_daily_linux_aarch64 : self.daily + self.linux_aarch64_latest,
206-
jdkLatest_weekly_linux_amd64 : self.weekly + self.linux_amd64_latest,
207-
jdkLatest_weekly_linux_aarch64: self.weekly + self.linux_aarch64_latest,
202+
jdkLatest_tier1_linux_amd64 : self.tier1 + self.linux_amd64_latest,
203+
jdkLatest_tier2_linux_amd64 : self.tier2 + self.linux_amd64_latest,
204+
jdkLatest_tier3_linux_amd64 : self.tier3 + self.linux_amd64_latest,
205+
jdkLatest_daily_linux_amd64 : self.daily + self.linux_amd64_latest,
206+
jdkLatest_daily_linux_aarch64 : self.daily + self.linux_aarch64_latest,
207+
jdkLatest_daily_darwin_aarch64 : self.daily + self.darwin_aarch64_latest,
208+
jdkLatest_weekly_linux_amd64 : self.weekly + self.linux_amd64_latest,
209+
jdkLatest_weekly_linux_aarch64 : self.weekly + self.linux_aarch64_latest,
208210

209211
// shared snippets
210212
eclipse: graal_common.deps.eclipse,

espresso/mx.espresso/mx_espresso.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,10 @@ def ldflags(self):
694694
assert not missing_libs, "missing libraries expected by the VM: " + str(missing_libs)
695695

696696
static_lib_dir = os.path.join(get_java_home_dep().java_home, "lib", "static", platform)
697-
ldf = []
697+
# Allow graal-builder-jdk (built with `make graal-builder-image` in labsjdk repo) to work
698+
if not exists(static_lib_dir):
699+
static_lib_dir = os.path.join(get_java_home_dep().java_home, "lib")
700+
flags = []
698701

699702
for jdk_static_lib in os.listdir(static_lib_dir):
700703
if not jdk_static_lib.endswith('.a'):
@@ -703,9 +706,9 @@ def ldflags(self):
703706
if jdk_static_lib[3:-2] not in darwin_linked_in_libs:
704707
continue
705708

706-
ldf.append(f'-Wl,-force_load,{os.path.join(static_lib_dir, jdk_static_lib)}')
709+
flags.append(f'-Wl,-force_load,{os.path.join(static_lib_dir, jdk_static_lib)}')
707710

708-
return ldf + super(CustomLibJVMLinking, self).ldflags
711+
return flags + super(CustomLibJVMLinking, self).ldflags
709712

710713

711714
def register_espresso_runtime_resource(java_home_dep, llvm_java_home_dep, register_project, register_distribution, suite, is_main):

0 commit comments

Comments
 (0)