Skip to content

Commit 6713c56

Browse files
committed
[GR-62126] Reverse dependency between svm core and svm configure projects.
PullRequest: graal/20039
2 parents 12b7cb9 + 4a19667 commit 6713c56

File tree

96 files changed

+1107
-793
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1107
-793
lines changed

substratevm/mx.substratevm/mx_substratevm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,6 +1228,7 @@ def native_image_context_run(func, func_args=None, config=None, build_if_missing
12281228
jar_distributions=['substratevm:LIBRARY_SUPPORT'],
12291229
builder_jar_distributions=[
12301230
'substratevm:SVM',
1231+
'substratevm:SVM_CONFIGURE',
12311232
'substratevm:OBJECTFILE',
12321233
'substratevm:POINTSTO',
12331234
'substratevm:NATIVE_IMAGE_BASE',

substratevm/mx.substratevm/suite.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@
309309
"dependencies": [
310310
"com.oracle.svm.common",
311311
"com.oracle.svm.shaded.org.objectweb.asm",
312+
"SVM_CONFIGURE",
312313
],
313314
"requires" : [
314315
"java.compiler",
@@ -684,6 +685,7 @@
684685
"com.oracle.objectfile",
685686
"com.oracle.graal.reachability",
686687
"com.oracle.svm.core.graal.amd64",
688+
"SVM_CONFIGURE",
687689
],
688690
"requires" : [
689691
"jdk.jfr",
@@ -798,6 +800,9 @@
798800
"com.oracle.svm.hosted",
799801
"com.oracle.svm.core.foreign"
800802
],
803+
"distDependencies": [
804+
"SVM_CONFIGURE"
805+
],
801806
"requiresConcealed": {
802807
"java.base": [
803808
"jdk.internal.foreign",
@@ -1404,7 +1409,10 @@
14041409
"resources",
14051410
],
14061411
"dependencies": [
1407-
"com.oracle.svm.core",
1412+
"com.oracle.svm.util",
1413+
"compiler:GRAAL",
1414+
"sdk:NATIVEIMAGE",
1415+
"sdk:COLLECTIONS",
14081416
],
14091417
"requiresConcealed": {
14101418
"jdk.internal.vm.ci": [
@@ -1497,6 +1505,7 @@
14971505
"dependencies": [
14981506
"com.oracle.svm.hosted",
14991507
"truffle:TRUFFLE_RUNTIME",
1508+
"sdk:NATIVEIMAGE",
15001509
],
15011510
"requiresConcealed": {
15021511
"jdk.internal.vm.ci": [
@@ -1674,6 +1683,7 @@
16741683
"POINTSTO",
16751684
"compiler:GRAAL",
16761685
"NATIVE_IMAGE_BASE",
1686+
"SVM_CONFIGURE",
16771687
],
16781688
"moduleInfo" : {
16791689
"name" : "org.graalvm.nativeimage.builder",
@@ -1682,7 +1692,6 @@
16821692
"""* to org.graalvm.nativeimage.base,
16831693
jdk.graal.compiler,
16841694
org.graalvm.nativeimage.driver,
1685-
org.graalvm.nativeimage.configure,
16861695
org.graalvm.nativeimage.librarysupport,
16871696
org.graalvm.nativeimage.junitsupport,
16881697
org.graalvm.nativeimage.llvm,
@@ -1724,6 +1733,7 @@
17241733
"transitive org.graalvm.nativeimage.pointsto",
17251734
"org.graalvm.collections",
17261735
"org.graalvm.truffle.compiler",
1736+
"org.graalvm.nativeimage.configure",
17271737
"org.graalvm.nativeimage.libgraal"
17281738
],
17291739
"uses" : [
@@ -2068,13 +2078,16 @@
20682078
"description" : "SubstrateVM native-image-agent library",
20692079
"dependencies": [
20702080
"com.oracle.svm.agent",
2071-
"com.oracle.svm.configure",
20722081
],
20732082
"distDependencies": [
20742083
"JVMTI_AGENT_BASE",
20752084
"LIBRARY_SUPPORT",
20762085
"SVM_DRIVER",
2077-
"SVM_CONFIGURE"
2086+
"SVM_CONFIGURE",
2087+
"NATIVE_IMAGE_BASE",
2088+
"compiler:GRAAL",
2089+
"sdk:NATIVEIMAGE",
2090+
"sdk:COLLECTIONS",
20782091
],
20792092
"moduleInfo" : {
20802093
"name" : "org.graalvm.nativeimage.agent.tracing",
@@ -2090,6 +2103,7 @@
20902103
"jdk.graal.compiler",
20912104
"org.graalvm.collections",
20922105
"org.graalvm.nativeimage.builder",
2106+
"org.graalvm.nativeimage.configure",
20932107
],
20942108
},
20952109
# vm: included as binary, tool descriptor intentionally not copied
@@ -2126,22 +2140,25 @@
21262140
"com.oracle.svm.configure",
21272141
],
21282142
"distDependencies": [
2129-
"LIBRARY_SUPPORT",
2143+
"NATIVE_IMAGE_BASE"
21302144
],
21312145
"moduleInfo" : {
21322146
"name" : "org.graalvm.nativeimage.configure",
21332147
"exports" : [
21342148
"* to org.graalvm.nativeimage.agent.tracing",
21352149
"com.oracle.svm.configure",
2150+
"com.oracle.svm.configure.config",
2151+
"com.oracle.svm.configure.config.conditional",
21362152
"com.oracle.svm.configure.command",
21372153
],
21382154
"requires": [
21392155
"jdk.graal.compiler",
21402156
"org.graalvm.collections",
2141-
"org.graalvm.nativeimage.builder",
21422157
],
21432158
},
2144-
"maven": False,
2159+
"maven": {
2160+
"tag": ["default", "public"],
2161+
},
21452162
},
21462163

21472164
"NATIVE_IMAGE_BASE": {
@@ -2167,7 +2184,7 @@
21672184
"org.graalvm.collections",
21682185
],
21692186
"exports" : [
2170-
"com.oracle.svm.util to org.graalvm.nativeimage.pointsto,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.librarysupport,org.graalvm.nativeimage.driver,org.graalvm.nativeimage.llvm,org.graalvm.nativeimage.agent.jvmtibase,org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.agent.diagnostics,org.graalvm.nativeimage.junitsupport,com.oracle.svm.svm_enterprise,com.oracle.svm_enterprise.ml_dataset,org.graalvm.extraimage.builder,com.oracle.svm.extraimage_enterprise,org.graalvm.extraimage.librarysupport,org.graalvm.nativeimage.foreign,org.graalvm.truffle.runtime.svm,com.oracle.truffle.enterprise.svm",
2187+
"com.oracle.svm.util to org.graalvm.nativeimage.pointsto,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.configure,org.graalvm.nativeimage.librarysupport,org.graalvm.nativeimage.driver,org.graalvm.nativeimage.llvm,org.graalvm.nativeimage.agent.jvmtibase,org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.agent.diagnostics,org.graalvm.nativeimage.junitsupport,com.oracle.svm.svm_enterprise,com.oracle.svm_enterprise.ml_dataset,org.graalvm.extraimage.builder,com.oracle.svm.extraimage_enterprise,org.graalvm.extraimage.librarysupport,org.graalvm.nativeimage.foreign,org.graalvm.truffle.runtime.svm,com.oracle.truffle.enterprise.svm",
21712188
"com.oracle.svm.common.meta to org.graalvm.nativeimage.pointsto,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.llvm,org.graalvm.extraimage.builder,org.graalvm.nativeimage.foreign,org.graalvm.truffle.runtime.svm,com.oracle.truffle.enterprise.svm",
21722189
"com.oracle.svm.common.option to org.graalvm.nativeimage.pointsto,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.driver,org.graalvm.nativeimage.foreign,org.graalvm.truffle.runtime.svm,com.oracle.truffle.enterprise.svm",
21732190
],

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/NativeImageAgent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@
7474
import com.oracle.svm.agent.tracing.TraceFileWriter;
7575
import com.oracle.svm.agent.tracing.core.Tracer;
7676
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
77+
import com.oracle.svm.configure.ConfigurationFile;
78+
import com.oracle.svm.configure.PredefinedClassesConfigurationParser;
7779
import com.oracle.svm.configure.config.ConfigurationFileCollection;
7880
import com.oracle.svm.configure.config.ConfigurationSet;
7981
import com.oracle.svm.configure.config.conditional.ConditionalConfigurationPredicate;
@@ -82,8 +84,6 @@
8284
import com.oracle.svm.configure.filters.HierarchyFilterNode;
8385
import com.oracle.svm.configure.trace.AccessAdvisor;
8486
import com.oracle.svm.configure.trace.TraceProcessor;
85-
import com.oracle.svm.core.configure.ConfigurationFile;
86-
import com.oracle.svm.core.configure.PredefinedClassesConfigurationParser;
8787
import com.oracle.svm.core.jni.headers.JNIEnvironment;
8888
import com.oracle.svm.core.jni.headers.JNIJavaVM;
8989
import com.oracle.svm.core.jni.headers.JNIObjectHandle;

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/conditionalconfig/ConditionalConfigurationPartialRunWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import com.oracle.svm.agent.configwithorigins.ConfigurationWithOriginsTracer;
3333
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
3434
import com.oracle.svm.configure.config.conditional.PartialConfigurationWithOrigins;
35-
import com.oracle.svm.core.configure.ConfigurationFile;
35+
import com.oracle.svm.configure.ConfigurationFile;
3636

3737
import jdk.graal.compiler.util.json.JsonWriter;
3838

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,10 @@
3535
import org.junit.Test;
3636

3737
import com.oracle.svm.configure.ConfigurationBase;
38+
import com.oracle.svm.configure.ConfigurationFile;
3839
import com.oracle.svm.configure.config.ConfigurationFileCollection;
3940
import com.oracle.svm.configure.config.ConfigurationSet;
4041
import com.oracle.svm.configure.test.AddExports;
41-
import com.oracle.svm.core.configure.ConfigurationFile;
42-
import com.oracle.svm.core.util.VMError;
4342

4443
import jdk.graal.compiler.util.json.JsonWriter;
4544

@@ -105,7 +104,7 @@ private static ConfigurationSet loadExpectedConfig() throws Exception {
105104
URL resourceURL = ConfigurationVerifier.class.getResource(resourceName);
106105
return resourceURL == null ? null : resourceURL.toURI();
107106
} catch (Exception e) {
108-
throw VMError.shouldNotReachHere("Unexpected error while locating the configuration files.", e);
107+
throw new AssertionError("Unexpected error while locating the configuration files.", e);
109108
}
110109
});
111110
return configurationFileCollection.loadConfigurationSet(e -> e, null, null);

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import org.junit.Assert;
4040
import org.junit.Test;
4141

42+
import com.oracle.svm.configure.ConfigurationTypeDescriptor;
43+
import com.oracle.svm.configure.NamedConfigurationTypeDescriptor;
4244
import com.oracle.svm.configure.config.ConfigurationFileCollection;
4345
import com.oracle.svm.configure.config.ConfigurationMemberInfo;
4446
import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberAccessibility;
@@ -53,9 +55,6 @@
5355
import com.oracle.svm.configure.config.SerializationConfiguration;
5456
import com.oracle.svm.configure.config.TypeConfiguration;
5557
import com.oracle.svm.configure.test.AddExports;
56-
import com.oracle.svm.core.configure.ConfigurationTypeDescriptor;
57-
import com.oracle.svm.core.configure.NamedConfigurationTypeDescriptor;
58-
import com.oracle.svm.core.util.VMError;
5958

6059
@AddExports({"org.graalvm.nativeimage/org.graalvm.nativeimage.impl", "jdk.graal.compiler/jdk.graal.compiler.util", "jdk.graal.compiler/jdk.graal.compiler.util.json"})
6160
public class OmitPreviousConfigTests {
@@ -72,7 +71,7 @@ private static ConfigurationSet loadTraceProcessorFromResourceDirectory(String r
7271
URL resourceURL = OmitPreviousConfigTests.class.getResource(resourceName);
7372
return (resourceURL != null) ? resourceURL.toURI() : null;
7473
} catch (Exception e) {
75-
throw VMError.shouldNotReachHere("Unexpected error while locating the configuration files.", e);
74+
throw new AssertionError("Unexpected error while locating the configuration files.", e);
7675
}
7776
});
7877

@@ -88,7 +87,7 @@ private static ConfigurationSet loadTraceProcessorFromResourceDirectory(String r
8887
}
8988
return configurationFileCollection.loadConfigurationSet(handler, null, shouldExcludeClassesWithHash);
9089
} catch (Exception e) {
91-
throw VMError.shouldNotReachHere("Unexpected error while loading the configuration files.", e);
90+
throw new AssertionError("Unexpected error while loading the configuration files.", e);
9291
}
9392
}
9493

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.io.PipedReader;
3030
import java.io.PipedWriter;
3131
import java.util.Collection;
32+
import java.util.EnumSet;
3233
import java.util.LinkedList;
3334
import java.util.List;
3435
import java.util.Locale;
@@ -38,11 +39,11 @@
3839
import org.junit.Assert;
3940
import org.junit.Test;
4041

42+
import com.oracle.svm.configure.ConfigurationParserOption;
43+
import com.oracle.svm.configure.ResourceConfigurationParser;
44+
import com.oracle.svm.configure.ResourcesRegistry;
4145
import com.oracle.svm.configure.config.ResourceConfiguration;
42-
import com.oracle.svm.core.configure.ConfigurationConditionResolver;
43-
import com.oracle.svm.core.configure.ResourceConfigurationParser;
44-
import com.oracle.svm.core.configure.ResourcesRegistry;
45-
import com.oracle.svm.core.util.VMError;
46+
import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver;
4647

4748
import jdk.graal.compiler.util.json.JsonWriter;
4849

@@ -99,12 +100,12 @@ public void addResources(UnresolvedConfigurationCondition condition, String patt
99100

100101
@Override
101102
public void addGlob(UnresolvedConfigurationCondition condition, String module, String glob, Object origin) {
102-
throw VMError.shouldNotReachHere("Unused function.");
103+
throw new AssertionError("Unused function.");
103104
}
104105

105106
@Override
106107
public void addResourceEntry(Module module, String resourcePath, Object origin) {
107-
throw VMError.shouldNotReachHere("Unused function.");
108+
throw new AssertionError("Unused function.");
108109
}
109110

110111
@Override
@@ -136,7 +137,8 @@ public void addClassBasedResourceBundle(UnresolvedConfigurationCondition conditi
136137
}
137138
};
138139

139-
ResourceConfigurationParser<UnresolvedConfigurationCondition> rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry, true);
140+
ResourceConfigurationParser<UnresolvedConfigurationCondition> rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry,
141+
EnumSet.of(ConfigurationParserOption.STRICT_CONFIGURATION));
140142
writerThread.start();
141143
rcp.parseAndRegister(pr);
142144

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
package com.oracle.svm.configure;
26+
27+
import static org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition.TYPE_REACHABLE_KEY;
28+
import static org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition.TYPE_REACHED_KEY;
29+
30+
import java.util.EnumSet;
31+
32+
import org.graalvm.collections.EconomicMap;
33+
import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;
34+
35+
public abstract class ConditionalConfigurationParser extends ConfigurationParser {
36+
public static final String CONDITIONAL_KEY = "condition";
37+
38+
protected ConditionalConfigurationParser(EnumSet<ConfigurationParserOption> parserOptions) {
39+
super(parserOptions);
40+
}
41+
42+
@Override
43+
protected EnumSet<ConfigurationParserOption> supportedOptions() {
44+
EnumSet<ConfigurationParserOption> base = super.supportedOptions();
45+
base.add(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED);
46+
return base;
47+
}
48+
49+
protected UnresolvedConfigurationCondition parseCondition(EconomicMap<String, Object> data, boolean runtimeCondition) {
50+
Object conditionData = data.get(CONDITIONAL_KEY);
51+
if (conditionData != null) {
52+
EconomicMap<String, Object> conditionObject = asMap(conditionData, "Attribute '" + CONDITIONAL_KEY + "' must be an object");
53+
if (conditionObject.containsKey(TYPE_REACHABLE_KEY) && conditionObject.containsKey(TYPE_REACHED_KEY)) {
54+
failOnSchemaError("condition can not have both '" + TYPE_REACHED_KEY + "' and '" + TYPE_REACHABLE_KEY + "' set.");
55+
}
56+
57+
if (conditionObject.containsKey(TYPE_REACHED_KEY)) {
58+
if (!runtimeCondition) {
59+
failOnSchemaError("'" + TYPE_REACHED_KEY + "' condition cannot be used in older schemas. Please migrate the file to the latest schema.");
60+
}
61+
Object object = conditionObject.get(TYPE_REACHED_KEY);
62+
var condition = parseTypeContents(object);
63+
if (condition.isPresent()) {
64+
String className = ((NamedConfigurationTypeDescriptor) condition.get()).name();
65+
return UnresolvedConfigurationCondition.create(className);
66+
}
67+
} else if (conditionObject.containsKey(TYPE_REACHABLE_KEY)) {
68+
if (runtimeCondition && !checkOption(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED)) {
69+
failOnSchemaError("'" + TYPE_REACHABLE_KEY + "' condition can not be used with the latest schema. Please use '" + TYPE_REACHED_KEY + "'.");
70+
}
71+
Object object = conditionObject.get(TYPE_REACHABLE_KEY);
72+
var condition = parseTypeContents(object);
73+
if (condition.isPresent()) {
74+
String className = ((NamedConfigurationTypeDescriptor) condition.get()).name();
75+
return UnresolvedConfigurationCondition.create(className, checkOption(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED));
76+
}
77+
}
78+
}
79+
return UnresolvedConfigurationCondition.alwaysTrue();
80+
}
81+
82+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* questions.
2424
*/
2525

26-
package com.oracle.svm.core.configure;
26+
package com.oracle.svm.configure;
2727

2828
import java.util.Comparator;
2929
import java.util.function.Function;

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@
2525
package com.oracle.svm.configure;
2626

2727
import java.io.IOException;
28+
import java.util.EnumSet;
2829
import java.util.function.Consumer;
2930

3031
import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;
3132

32-
import com.oracle.svm.core.configure.ConfigurationParser;
33-
3433
import jdk.graal.compiler.util.json.JsonPrintable;
3534
import jdk.graal.compiler.util.json.JsonWriter;
3635

@@ -72,7 +71,14 @@ public T copyAndFilter(P predicate) {
7271
return copyAnd(copy -> copy.removeIf(predicate));
7372
}
7473

75-
public abstract ConfigurationParser createParser(boolean strictMetadata);
74+
/**
75+
* Creates a JSON parser used to parse and register configuration.
76+
*
77+
* @param combinedFileSchema whether the parser should support the combined
78+
* reachability-metadata.json schema (if false, uses the legacy schema).
79+
* @param parserOptions parser-specific options to enable different parsing features.
80+
*/
81+
public abstract ConfigurationParser createParser(boolean combinedFileSchema, EnumSet<ConfigurationParserOption> parserOptions);
7682

7783
public abstract boolean supportsCombinedFile();
7884

0 commit comments

Comments
 (0)