Skip to content

Commit d517e59

Browse files
committed
Add macro to build Crema-based libjvm.so
1 parent 28ef218 commit d517e59

File tree

35 files changed

+720
-112
lines changed

35 files changed

+720
-112
lines changed

substratevm/mx.substratevm/mx_substratevm.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1813,6 +1813,47 @@ def prevent_build_path_in_libgraal():
18131813

18141814
mx_sdk_vm.register_graalvm_component(libsvmjdwp)
18151815

1816+
lib_jvm_preserved_packages = [
1817+
'java.util',
1818+
'java.util.stream',
1819+
'java.util.concurrent.locks',
1820+
'java.lang',
1821+
'java.lang.invoke',
1822+
'java.io'
1823+
]
1824+
1825+
mx_sdk_vm.register_graalvm_component(mx_sdk_vm.GraalVmJreComponent(
1826+
suite=suite,
1827+
name='SubstrateVM java',
1828+
short_name='svmjava',
1829+
dir_name='svm',
1830+
license_files=[],
1831+
third_party_license_files=[],
1832+
dependencies=[],
1833+
jar_distributions=[],
1834+
builder_jar_distributions=[],
1835+
support_distributions=[],
1836+
priority=0,
1837+
library_configs=[
1838+
mx_sdk_vm.LibraryConfig(
1839+
destination='<lib:jvm>',
1840+
jar_distributions=[],
1841+
build_args=[
1842+
'--features=com.oracle.svm.hosted.libjvm.LibJVMFeature'
1843+
] + svm_experimental_options([
1844+
'-H:+RuntimeClassLoading',
1845+
'-H:+InterpreterTraceSupport',
1846+
'-H:+AllowJRTFileSystem'
1847+
] + ['-H:Preserve=package=' + pkg for pkg in lib_jvm_preserved_packages]),
1848+
headers=False,
1849+
home_finder=False,
1850+
),
1851+
],
1852+
support_libraries_distributions=[],
1853+
stability="experimental",
1854+
jlink=False,
1855+
))
1856+
18161857
def _native_image_utils_extra_jvm_args():
18171858
packages = ['jdk.graal.compiler/jdk.graal.compiler.phases.common', 'jdk.internal.vm.ci/jdk.vm.ci.meta', 'jdk.internal.vm.ci/jdk.vm.ci.services', 'jdk.graal.compiler/jdk.graal.compiler.core.common.util']
18181859
args = ['--add-exports=' + packageName + '=ALL-UNNAMED' for packageName in packages]

substratevm/src/com.oracle.graal.pointsto.standalone/src/com/oracle/graal/pointsto/standalone/StandaloneHost.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,9 @@ public Optional<AnalysisMethod> handleForeignCall(ForeignCallDescriptor foreignC
125125
public boolean isClosedTypeWorld() {
126126
return isClosedTypeWorld;
127127
}
128+
129+
@Override
130+
public String loaderName(AnalysisType type) {
131+
return loaderName(typeToClass.get(type).getClassLoader());
132+
}
128133
}

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/HostVM.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,20 @@ public Set<Module> getSharedLayerForbiddenModules() {
476476
return Set.of();
477477
}
478478

479+
public abstract String loaderName(AnalysisType type);
480+
481+
public static String loaderName(ClassLoader loader) {
482+
if (loader == null) {
483+
return "null";
484+
}
485+
var loaderName = loader.getName();
486+
if (loaderName == null || loaderName.isBlank()) {
487+
return loader.getClass().getName();
488+
} else {
489+
return loaderName;
490+
}
491+
}
492+
479493
/**
480494
* Helpers to determine what analysis actions should be taken for a given Multi-Method version.
481495
*/

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/CallTreePrinter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ static class MethodNodeReference implements Node {
110110

111111
@Override
112112
public String format() {
113-
return ReportUtils.loaderName(methodNode.method.getDeclaringClass()) + ':' + methodNode.method.format(METHOD_FORMAT) + " id-ref=" + methodNode.id;
113+
var hostVM = methodNode.method.getUniverse().hostVM();
114+
return hostVM.loaderName(methodNode.method.getDeclaringClass()) + ':' + methodNode.method.format(METHOD_FORMAT) + " id-ref=" + methodNode.id;
114115
}
115116

116117
}
@@ -140,7 +141,7 @@ void addInvoke(InvokeNode invoke) {
140141

141142
@Override
142143
public String format() {
143-
return ReportUtils.loaderName(method.getDeclaringClass()) + ':' + method.format(METHOD_FORMAT) + " id=" + id;
144+
return method.getUniverse().hostVM().loaderName(method.getDeclaringClass()) + ':' + method.format(METHOD_FORMAT) + " id=" + id;
144145
}
145146
}
146147

@@ -307,7 +308,7 @@ private static void printCallTreeNode(PrintWriter out, String prefix, MethodNode
307308
private void printUsedMethods(PrintWriter out) {
308309
List<String> methodsList = new ArrayList<>();
309310
for (AnalysisMethod method : methodToNode.keySet()) {
310-
methodsList.add(ReportUtils.loaderName(method.getDeclaringClass()) + ':' + method.format(METHOD_FORMAT));
311+
methodsList.add(method.getUniverse().hostVM().loaderName(method.getDeclaringClass()) + ':' + method.format(METHOD_FORMAT));
311312
}
312313
methodsList.sort(null);
313314
for (String name : methodsList) {
@@ -334,7 +335,8 @@ public Set<String> classesSet(boolean packageNameOnly) {
334335
name = packagePrefix(name);
335336
}
336337
}
337-
classSet.add(ReportUtils.loaderName(type) + ':' + name);
338+
339+
classSet.add(type.getUniverse().hostVM().loaderName(type) + ':' + name);
338340
}
339341
return classSet;
340342
}

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ObjectTreePrinter.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.oracle.graal.pointsto.BigBang;
4545
import com.oracle.graal.pointsto.ObjectScanner;
4646
import com.oracle.graal.pointsto.ObjectScanningObserver;
47+
import com.oracle.graal.pointsto.api.HostVM;
4748
import com.oracle.graal.pointsto.meta.AnalysisField;
4849
import com.oracle.graal.pointsto.meta.AnalysisMethod;
4950
import com.oracle.graal.pointsto.meta.AnalysisType;
@@ -84,12 +85,16 @@ String format() {
8485

8586
private static String format(Object srcObj) {
8687
return switch (srcObj) {
87-
case AnalysisField field -> ReportUtils.loaderName(field.getDeclaringClass()) + ':' + field.format("%H.%n:%T");
88-
case AnalysisMethod method -> ReportUtils.loaderName(method.getDeclaringClass()) + ':' + method.format("%H.%n(%p)");
88+
case AnalysisField field -> loaderName(field.getDeclaringClass()) + ':' + field.format("%H.%n:%T");
89+
case AnalysisMethod method -> loaderName(method.getDeclaringClass()) + ':' + method.format("%H.%n(%p)");
8990
case BytecodePosition bcp -> "%s [bci: %d]".formatted(format(bcp.getMethod()), bcp.getBCI());
9091
default -> throw JVMCIError.shouldNotReachHere("unknown srcObj");
9192
};
9293
}
94+
95+
private static String loaderName(AnalysisType type) {
96+
return type.getUniverse().hostVM().loaderName(type);
97+
}
9398
}
9499

95100
static class ObjectNodeBase {
@@ -400,7 +405,7 @@ static String constantAsString(BigBang bb, JavaConstant constant) {
400405
Object object = constantAsObject(bb, constant);
401406
String loaderPrefix = "";
402407
if (object != null) {
403-
loaderPrefix = ReportUtils.loaderName(object.getClass().getClassLoader()) + ':';
408+
loaderPrefix = HostVM.loaderName(object.getClass().getClassLoader()) + ':';
404409
}
405410
if (object instanceof String) {
406411
String str = (String) object;

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ReportUtils.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -319,24 +319,4 @@ private static void followInput(PointsToAnalysis bb, TypeFlow<?> flow, AnalysisT
319319
}
320320
}
321321
}
322-
323-
public static String loaderName(AnalysisType type) {
324-
var declaringJavaClass = type.getJavaClass();
325-
if (declaringJavaClass == null) {
326-
return "err";
327-
}
328-
return loaderName(declaringJavaClass.getClassLoader());
329-
}
330-
331-
public static String loaderName(ClassLoader loader) {
332-
if (loader == null) {
333-
return "null";
334-
}
335-
var loaderName = loader.getName();
336-
if (loaderName == null || loaderName.isBlank()) {
337-
return loader.getClass().getName();
338-
} else {
339-
return loaderName;
340-
}
341-
}
342322
}

substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/PosixSystemPropertiesSupport.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
*/
2525
package com.oracle.svm.core.posix;
2626

27-
import jdk.graal.compiler.word.Word;
2827
import org.graalvm.nativeimage.c.type.CCharPointer;
2928
import org.graalvm.nativeimage.c.type.CTypeConversion;
3029

@@ -33,8 +32,17 @@
3332
import com.oracle.svm.core.posix.headers.Limits;
3433
import com.oracle.svm.core.posix.headers.Unistd;
3534

35+
import jdk.graal.compiler.word.Word;
36+
3637
public abstract class PosixSystemPropertiesSupport extends SystemPropertiesSupport {
3738

39+
@Override
40+
protected String jvmLibName() {
41+
return "libjvm" + jvmLibSuffix();
42+
}
43+
44+
protected abstract String jvmLibSuffix();
45+
3846
/*
3947
* Initialization code is adapted from the JDK native code that initializes the system
4048
* properties, as found in src/solaris/native/java/lang/java_props_md.c

substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/darwin/DarwinSystemPropertiesSupport.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ protected String osVersionValue() {
132132
}
133133
return osVersionValue = "Unknown";
134134
}
135+
136+
@Override
137+
protected String jvmLibSuffix() {
138+
return ".dylib";
139+
}
135140
}
136141

137142
@SingletonTraits(access = BuildtimeAccessOnly.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = Disallowed.class)

substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/linux/LinuxSystemPropertiesSupport.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ protected String osVersionValue() {
9494
}
9595
return "Unknown";
9696
}
97+
98+
@Override
99+
protected String jvmLibSuffix() {
100+
return ".so";
101+
}
97102
}
98103

99104
@SingletonTraits(access = BuildtimeAccessOnly.class, layeredCallbacks = SingleLayer.class, layeredInstallationKind = Independent.class)

substratevm/src/com.oracle.svm.core.windows/src/com/oracle/svm/core/windows/WindowsSystemPropertiesSupport.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ protected String osVersionValue() {
219219
return cachedOsVersion;
220220
}
221221

222+
@Override
223+
protected String jvmLibName() {
224+
return "jvm.dll";
225+
}
226+
222227
private void computeOsNameAndVersion() {
223228
/*
224229
* Reimplementation of code from java_props_md.c

0 commit comments

Comments
 (0)