Skip to content

[GR-62126] Reverse dependency between svm core and svm configure projects. #10905

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions substratevm/mx.substratevm/mx_substratevm.py
Original file line number Diff line number Diff line change
Expand Up @@ -1228,6 +1228,7 @@ def native_image_context_run(func, func_args=None, config=None, build_if_missing
jar_distributions=['substratevm:LIBRARY_SUPPORT'],
builder_jar_distributions=[
'substratevm:SVM',
'substratevm:SVM_CONFIGURE',
'substratevm:OBJECTFILE',
'substratevm:POINTSTO',
'substratevm:NATIVE_IMAGE_BASE',
Expand Down
33 changes: 25 additions & 8 deletions substratevm/mx.substratevm/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@
"dependencies": [
"com.oracle.svm.common",
"com.oracle.svm.shaded.org.objectweb.asm",
"SVM_CONFIGURE",
],
"requires" : [
"java.compiler",
Expand Down Expand Up @@ -684,6 +685,7 @@
"com.oracle.objectfile",
"com.oracle.graal.reachability",
"com.oracle.svm.core.graal.amd64",
"SVM_CONFIGURE",
],
"requires" : [
"jdk.jfr",
Expand Down Expand Up @@ -798,6 +800,9 @@
"com.oracle.svm.hosted",
"com.oracle.svm.core.foreign"
],
"distDependencies": [
"SVM_CONFIGURE"
],
"requiresConcealed": {
"java.base": [
"jdk.internal.foreign",
Expand Down Expand Up @@ -1404,7 +1409,10 @@
"resources",
],
"dependencies": [
"com.oracle.svm.core",
"com.oracle.svm.util",
"compiler:GRAAL",
"sdk:NATIVEIMAGE",
"sdk:COLLECTIONS",
],
"requiresConcealed": {
"jdk.internal.vm.ci": [
Expand Down Expand Up @@ -1497,6 +1505,7 @@
"dependencies": [
"com.oracle.svm.hosted",
"truffle:TRUFFLE_RUNTIME",
"sdk:NATIVEIMAGE",
],
"requiresConcealed": {
"jdk.internal.vm.ci": [
Expand Down Expand Up @@ -1674,6 +1683,7 @@
"POINTSTO",
"compiler:GRAAL",
"NATIVE_IMAGE_BASE",
"SVM_CONFIGURE",
],
"moduleInfo" : {
"name" : "org.graalvm.nativeimage.builder",
Expand All @@ -1682,7 +1692,6 @@
"""* to org.graalvm.nativeimage.base,
jdk.graal.compiler,
org.graalvm.nativeimage.driver,
org.graalvm.nativeimage.configure,
org.graalvm.nativeimage.librarysupport,
org.graalvm.nativeimage.junitsupport,
org.graalvm.nativeimage.llvm,
Expand Down Expand Up @@ -1724,6 +1733,7 @@
"transitive org.graalvm.nativeimage.pointsto",
"org.graalvm.collections",
"org.graalvm.truffle.compiler",
"org.graalvm.nativeimage.configure",
"org.graalvm.nativeimage.libgraal"
],
"uses" : [
Expand Down Expand Up @@ -2068,13 +2078,16 @@
"description" : "SubstrateVM native-image-agent library",
"dependencies": [
"com.oracle.svm.agent",
"com.oracle.svm.configure",
],
"distDependencies": [
"JVMTI_AGENT_BASE",
"LIBRARY_SUPPORT",
"SVM_DRIVER",
"SVM_CONFIGURE"
"SVM_CONFIGURE",
"NATIVE_IMAGE_BASE",
"compiler:GRAAL",
"sdk:NATIVEIMAGE",
"sdk:COLLECTIONS",
],
"moduleInfo" : {
"name" : "org.graalvm.nativeimage.agent.tracing",
Expand All @@ -2090,6 +2103,7 @@
"jdk.graal.compiler",
"org.graalvm.collections",
"org.graalvm.nativeimage.builder",
"org.graalvm.nativeimage.configure",
],
},
# vm: included as binary, tool descriptor intentionally not copied
Expand Down Expand Up @@ -2126,22 +2140,25 @@
"com.oracle.svm.configure",
],
"distDependencies": [
"LIBRARY_SUPPORT",
"NATIVE_IMAGE_BASE"
],
"moduleInfo" : {
"name" : "org.graalvm.nativeimage.configure",
"exports" : [
"* to org.graalvm.nativeimage.agent.tracing",
"com.oracle.svm.configure",
"com.oracle.svm.configure.config",
"com.oracle.svm.configure.config.conditional",
"com.oracle.svm.configure.command",
],
"requires": [
"jdk.graal.compiler",
"org.graalvm.collections",
"org.graalvm.nativeimage.builder",
],
},
"maven": False,
"maven": {
"tag": ["default", "public"],
},
},

"NATIVE_IMAGE_BASE": {
Expand All @@ -2167,7 +2184,7 @@
"org.graalvm.collections",
],
"exports" : [
"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",
"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",
"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",
"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",
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
import com.oracle.svm.agent.tracing.TraceFileWriter;
import com.oracle.svm.agent.tracing.core.Tracer;
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
import com.oracle.svm.configure.ConfigurationFile;
import com.oracle.svm.configure.PredefinedClassesConfigurationParser;
import com.oracle.svm.configure.config.ConfigurationFileCollection;
import com.oracle.svm.configure.config.ConfigurationSet;
import com.oracle.svm.configure.config.conditional.ConditionalConfigurationPredicate;
Expand All @@ -82,8 +84,6 @@
import com.oracle.svm.configure.filters.HierarchyFilterNode;
import com.oracle.svm.configure.trace.AccessAdvisor;
import com.oracle.svm.configure.trace.TraceProcessor;
import com.oracle.svm.core.configure.ConfigurationFile;
import com.oracle.svm.core.configure.PredefinedClassesConfigurationParser;
import com.oracle.svm.core.jni.headers.JNIEnvironment;
import com.oracle.svm.core.jni.headers.JNIJavaVM;
import com.oracle.svm.core.jni.headers.JNIObjectHandle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import com.oracle.svm.agent.configwithorigins.ConfigurationWithOriginsTracer;
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
import com.oracle.svm.configure.config.conditional.PartialConfigurationWithOrigins;
import com.oracle.svm.core.configure.ConfigurationFile;
import com.oracle.svm.configure.ConfigurationFile;

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@
import org.junit.Test;

import com.oracle.svm.configure.ConfigurationBase;
import com.oracle.svm.configure.ConfigurationFile;
import com.oracle.svm.configure.config.ConfigurationFileCollection;
import com.oracle.svm.configure.config.ConfigurationSet;
import com.oracle.svm.configure.test.AddExports;
import com.oracle.svm.core.configure.ConfigurationFile;
import com.oracle.svm.core.util.VMError;

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

Expand Down Expand Up @@ -105,7 +104,7 @@ private static ConfigurationSet loadExpectedConfig() throws Exception {
URL resourceURL = ConfigurationVerifier.class.getResource(resourceName);
return resourceURL == null ? null : resourceURL.toURI();
} catch (Exception e) {
throw VMError.shouldNotReachHere("Unexpected error while locating the configuration files.", e);
throw new AssertionError("Unexpected error while locating the configuration files.", e);
}
});
return configurationFileCollection.loadConfigurationSet(e -> e, null, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
import org.junit.Assert;
import org.junit.Test;

import com.oracle.svm.configure.ConfigurationTypeDescriptor;
import com.oracle.svm.configure.NamedConfigurationTypeDescriptor;
import com.oracle.svm.configure.config.ConfigurationFileCollection;
import com.oracle.svm.configure.config.ConfigurationMemberInfo;
import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberAccessibility;
Expand All @@ -53,9 +55,6 @@
import com.oracle.svm.configure.config.SerializationConfiguration;
import com.oracle.svm.configure.config.TypeConfiguration;
import com.oracle.svm.configure.test.AddExports;
import com.oracle.svm.core.configure.ConfigurationTypeDescriptor;
import com.oracle.svm.core.configure.NamedConfigurationTypeDescriptor;
import com.oracle.svm.core.util.VMError;

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.io.PipedReader;
import java.io.PipedWriter;
import java.util.Collection;
import java.util.EnumSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
Expand All @@ -38,11 +39,11 @@
import org.junit.Assert;
import org.junit.Test;

import com.oracle.svm.configure.ConfigurationParserOption;
import com.oracle.svm.configure.ResourceConfigurationParser;
import com.oracle.svm.configure.ResourcesRegistry;
import com.oracle.svm.configure.config.ResourceConfiguration;
import com.oracle.svm.core.configure.ConfigurationConditionResolver;
import com.oracle.svm.core.configure.ResourceConfigurationParser;
import com.oracle.svm.core.configure.ResourcesRegistry;
import com.oracle.svm.core.util.VMError;
import com.oracle.svm.configure.config.conditional.ConfigurationConditionResolver;

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

Expand Down Expand Up @@ -99,12 +100,12 @@ public void addResources(UnresolvedConfigurationCondition condition, String patt

@Override
public void addGlob(UnresolvedConfigurationCondition condition, String module, String glob, Object origin) {
throw VMError.shouldNotReachHere("Unused function.");
throw new AssertionError("Unused function.");
}

@Override
public void addResourceEntry(Module module, String resourcePath, Object origin) {
throw VMError.shouldNotReachHere("Unused function.");
throw new AssertionError("Unused function.");
}

@Override
Expand Down Expand Up @@ -136,7 +137,8 @@ public void addClassBasedResourceBundle(UnresolvedConfigurationCondition conditi
}
};

ResourceConfigurationParser<UnresolvedConfigurationCondition> rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry, true);
ResourceConfigurationParser<UnresolvedConfigurationCondition> rcp = ResourceConfigurationParser.create(false, ConfigurationConditionResolver.identityResolver(), registry,
EnumSet.of(ConfigurationParserOption.STRICT_CONFIGURATION));
writerThread.start();
rcp.parseAndRegister(pr);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* Copyright (c) 2025, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.oracle.svm.configure;

import static org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition.TYPE_REACHABLE_KEY;
import static org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition.TYPE_REACHED_KEY;

import java.util.EnumSet;

import org.graalvm.collections.EconomicMap;
import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;

public abstract class ConditionalConfigurationParser extends ConfigurationParser {
public static final String CONDITIONAL_KEY = "condition";

protected ConditionalConfigurationParser(EnumSet<ConfigurationParserOption> parserOptions) {
super(parserOptions);
}

@Override
protected EnumSet<ConfigurationParserOption> supportedOptions() {
EnumSet<ConfigurationParserOption> base = super.supportedOptions();
base.add(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED);
return base;
}

protected UnresolvedConfigurationCondition parseCondition(EconomicMap<String, Object> data, boolean runtimeCondition) {
Object conditionData = data.get(CONDITIONAL_KEY);
if (conditionData != null) {
EconomicMap<String, Object> conditionObject = asMap(conditionData, "Attribute '" + CONDITIONAL_KEY + "' must be an object");
if (conditionObject.containsKey(TYPE_REACHABLE_KEY) && conditionObject.containsKey(TYPE_REACHED_KEY)) {
failOnSchemaError("condition can not have both '" + TYPE_REACHED_KEY + "' and '" + TYPE_REACHABLE_KEY + "' set.");
}

if (conditionObject.containsKey(TYPE_REACHED_KEY)) {
if (!runtimeCondition) {
failOnSchemaError("'" + TYPE_REACHED_KEY + "' condition cannot be used in older schemas. Please migrate the file to the latest schema.");
}
Object object = conditionObject.get(TYPE_REACHED_KEY);
var condition = parseTypeContents(object);
if (condition.isPresent()) {
String className = ((NamedConfigurationTypeDescriptor) condition.get()).name();
return UnresolvedConfigurationCondition.create(className);
}
} else if (conditionObject.containsKey(TYPE_REACHABLE_KEY)) {
if (runtimeCondition && !checkOption(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED)) {
failOnSchemaError("'" + TYPE_REACHABLE_KEY + "' condition can not be used with the latest schema. Please use '" + TYPE_REACHED_KEY + "'.");
}
Object object = conditionObject.get(TYPE_REACHABLE_KEY);
var condition = parseTypeContents(object);
if (condition.isPresent()) {
String className = ((NamedConfigurationTypeDescriptor) condition.get()).name();
return UnresolvedConfigurationCondition.create(className, checkOption(ConfigurationParserOption.TREAT_ALL_TYPE_REACHABLE_CONDITIONS_AS_TYPE_REACHED));
}
}
}
return UnresolvedConfigurationCondition.alwaysTrue();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* questions.
*/

package com.oracle.svm.core.configure;
package com.oracle.svm.configure;

import java.util.Comparator;
import java.util.function.Function;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@
package com.oracle.svm.configure;

import java.io.IOException;
import java.util.EnumSet;
import java.util.function.Consumer;

import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;

import com.oracle.svm.core.configure.ConfigurationParser;

import jdk.graal.compiler.util.json.JsonPrintable;
import jdk.graal.compiler.util.json.JsonWriter;

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

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

public abstract boolean supportsCombinedFile();

Expand Down
Loading
Loading