From 269467dbeed528a240ccca4060b0161da0bf1d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Tue, 29 Nov 2022 14:52:49 +0100 Subject: [PATCH 1/5] Move com.oracle.svm.configure.json from com.oracle.svm.configure to com.oracle.svm.core into com.oracle.svm.core.util.json --- .../ConditionalConfigurationPartialRunWriter.java | 2 +- .../src/com/oracle/svm/agent/tracing/TraceFileWriter.java | 2 +- .../test/conditionalconfig/ConfigurationVerifier.java | 2 +- .../configure/test/config/ResourceConfigurationTest.java | 2 +- .../src/com/oracle/svm/configure/ConfigurationBase.java | 2 +- .../src/com/oracle/svm/configure/ConfigurationTool.java | 2 +- .../configure/config/ConfigurationConditionPrintable.java | 2 +- .../oracle/svm/configure/config/ConfigurationMethod.java | 4 ++-- .../svm/configure/config/ConfigurationPredefinedClass.java | 4 ++-- .../com/oracle/svm/configure/config/ConfigurationSet.java | 4 ++-- .../com/oracle/svm/configure/config/ConfigurationType.java | 6 +++--- .../configure/config/PredefinedClassesConfiguration.java | 2 +- .../com/oracle/svm/configure/config/ProxyConfiguration.java | 2 +- .../oracle/svm/configure/config/ResourceConfiguration.java | 4 ++-- .../svm/configure/config/SerializationConfiguration.java | 4 ++-- .../SerializationConfigurationLambdaCapturingType.java | 4 ++-- .../configure/config/SerializationConfigurationType.java | 4 ++-- .../com/oracle/svm/configure/config/TypeConfiguration.java | 2 +- .../conditional/HumanReadableConfigurationWithOrigins.java | 4 ++-- .../config/conditional/PartialConfigurationWithOrigins.java | 4 ++-- .../src/com/oracle/svm/configure/filters/ComplexFilter.java | 2 +- .../oracle/svm/configure/filters/ConfigurationFilter.java | 2 +- .../svm/configure/filters/FilterConfigurationParser.java | 2 +- .../oracle/svm/configure/filters/HierarchyFilterNode.java | 2 +- .../src/com/oracle/svm/configure/filters/RegexFilter.java | 2 +- .../src/com/oracle/svm/core/util}/json/JsonPrintable.java | 2 +- .../src/com/oracle/svm/core/util}/json/JsonPrinter.java | 2 +- .../src/com/oracle/svm/core/util}/json/JsonWriter.java | 2 +- 28 files changed, 39 insertions(+), 39 deletions(-) rename substratevm/src/{com.oracle.svm.configure/src/com/oracle/svm/configure => com.oracle.svm.core/src/com/oracle/svm/core/util}/json/JsonPrintable.java (97%) rename substratevm/src/{com.oracle.svm.configure/src/com/oracle/svm/configure => com.oracle.svm.core/src/com/oracle/svm/core/util}/json/JsonPrinter.java (98%) rename substratevm/src/{com.oracle.svm.configure/src/com/oracle/svm/configure => com.oracle.svm.core/src/com/oracle/svm/core/util}/json/JsonWriter.java (98%) diff --git a/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/conditionalconfig/ConditionalConfigurationPartialRunWriter.java b/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/conditionalconfig/ConditionalConfigurationPartialRunWriter.java index a1da0ee6b1e5..89da44324b91 100644 --- a/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/conditionalconfig/ConditionalConfigurationPartialRunWriter.java +++ b/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/conditionalconfig/ConditionalConfigurationPartialRunWriter.java @@ -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.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; public class ConditionalConfigurationPartialRunWriter implements TracingResultWriter { diff --git a/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/TraceFileWriter.java b/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/TraceFileWriter.java index b582cb96d79f..8dc3bdf164fd 100644 --- a/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/TraceFileWriter.java +++ b/substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/TraceFileWriter.java @@ -36,7 +36,7 @@ import com.oracle.svm.agent.tracing.core.Tracer; import com.oracle.svm.agent.tracing.core.TracingResultWriter; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.util.VMError; public class TraceFileWriter extends Tracer implements TracingResultWriter { diff --git a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java index 50b78945a021..db142913ec84 100644 --- a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java +++ b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java @@ -34,7 +34,7 @@ import com.oracle.svm.configure.config.ConfigurationFileCollection; import com.oracle.svm.configure.config.ConfigurationSet; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; import com.oracle.svm.core.util.VMError; diff --git a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java index d949092c7ccb..600b21440bb4 100644 --- a/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java +++ b/substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/ResourceConfigurationTest.java @@ -38,7 +38,7 @@ import org.junit.Test; import com.oracle.svm.configure.config.ResourceConfiguration; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ResourceConfigurationParser; import com.oracle.svm.core.configure.ResourcesRegistry; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java index 99de5aa92c44..26a7c7a596da 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationBase.java @@ -26,7 +26,7 @@ import java.util.function.Consumer; -import com.oracle.svm.configure.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonPrintable; import com.oracle.svm.core.configure.ConfigurationParser; import org.graalvm.nativeimage.impl.ConfigurationCondition; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationTool.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationTool.java index a94b9401e174..996fce0bd776 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationTool.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/ConfigurationTool.java @@ -61,7 +61,7 @@ import com.oracle.svm.configure.filters.FilterConfigurationParser; import com.oracle.svm.configure.filters.ModuleFilterTools; import com.oracle.svm.configure.filters.HierarchyFilterNode; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.configure.trace.AccessAdvisor; import com.oracle.svm.configure.trace.TraceProcessor; import com.oracle.svm.core.configure.ConfigurationFile; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java index 651f8a363a52..8be1eefc6620 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationConditionPrintable.java @@ -31,7 +31,7 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; final class ConfigurationConditionPrintable { static void printConditionAttribute(ConfigurationCondition condition, JsonWriter writer) throws IOException { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationMethod.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationMethod.java index 7788a887e2af..ea2b7ec525d2 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationMethod.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationMethod.java @@ -28,8 +28,8 @@ import java.util.List; import java.util.Objects; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import jdk.vm.ci.meta.MetaUtil; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationPredefinedClass.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationPredefinedClass.java index 497be032a647..b9cd0d9893ca 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationPredefinedClass.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationPredefinedClass.java @@ -27,8 +27,8 @@ import java.io.IOException; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; public final class ConfigurationPredefinedClass implements JsonPrintable { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationSet.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationSet.java index a5895a415dfd..166eb5179747 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationSet.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationSet.java @@ -32,8 +32,8 @@ import com.oracle.svm.configure.ConfigurationBase; import com.oracle.svm.configure.config.conditional.ConditionalConfigurationPredicate; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; import com.oracle.svm.core.util.VMError; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java index 769eb7347ef2..87b874c339fa 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java @@ -39,9 +39,9 @@ import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberAccessibility; import com.oracle.svm.configure.config.ConfigurationMemberInfo.ConfigurationMemberDeclaration; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonPrinter; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonPrinter; +import com.oracle.svm.core.util.json.JsonWriter; /** * Type usage information, part of a {@link TypeConfiguration}. Unlike other configuration classes diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java index b8f7f7234f51..40229ed4648f 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/PredefinedClassesConfiguration.java @@ -38,7 +38,7 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; import com.oracle.svm.configure.ConfigurationBase; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; import com.oracle.svm.core.configure.PredefinedClassesConfigurationParser; import com.oracle.svm.core.hub.PredefinedClassesSupport; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java index 63ed84b17460..9859a20d9e55 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ProxyConfiguration.java @@ -36,7 +36,7 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; import com.oracle.svm.configure.ConfigurationBase; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConditionalElement; public final class ProxyConfiguration extends ConfigurationBase { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java index 0fd6d5e53301..803fbb86fa34 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ResourceConfiguration.java @@ -38,8 +38,8 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; import com.oracle.svm.configure.ConfigurationBase; -import com.oracle.svm.configure.json.JsonPrinter; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrinter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConditionalElement; import com.oracle.svm.core.configure.ConfigurationParser; import com.oracle.svm.core.configure.ResourceConfigurationParser; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java index 9fdc9edecef3..1ed2ed4d756b 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfiguration.java @@ -37,8 +37,8 @@ import org.graalvm.nativeimage.impl.RuntimeSerializationSupport; import com.oracle.svm.configure.ConfigurationBase; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConditionalElement; import com.oracle.svm.core.configure.ConfigurationParser; import com.oracle.svm.core.configure.SerializationConfigurationParser; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java index c5dca03af43b..4cf0e83b2a65 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationLambdaCapturingType.java @@ -28,10 +28,10 @@ import java.util.Comparator; import java.util.Objects; -import com.oracle.svm.configure.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonPrintable; import org.graalvm.nativeimage.impl.ConfigurationCondition; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.SerializationConfigurationParser; public class SerializationConfigurationLambdaCapturingType implements JsonPrintable { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java index 95c9f122c6c6..33744a735875 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/SerializationConfigurationType.java @@ -30,8 +30,8 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.SerializationConfigurationParser; public class SerializationConfigurationType implements JsonPrintable, Comparable { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java index 028fff2b5543..23e3ecbe7068 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/TypeConfiguration.java @@ -37,7 +37,7 @@ import org.graalvm.nativeimage.impl.ConfigurationCondition; import com.oracle.svm.configure.ConfigurationBase; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConditionalElement; import com.oracle.svm.core.util.VMError; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/HumanReadableConfigurationWithOrigins.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/HumanReadableConfigurationWithOrigins.java index 7d643c0f5515..165cbda159b2 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/HumanReadableConfigurationWithOrigins.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/HumanReadableConfigurationWithOrigins.java @@ -29,8 +29,8 @@ import java.util.List; import java.util.Set; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; public class HumanReadableConfigurationWithOrigins implements JsonPrintable { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/PartialConfigurationWithOrigins.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/PartialConfigurationWithOrigins.java index 0a8135b17a9b..e7ee09dd8ccb 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/PartialConfigurationWithOrigins.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/conditional/PartialConfigurationWithOrigins.java @@ -33,8 +33,8 @@ import org.graalvm.util.json.JSONParserException; import com.oracle.svm.configure.config.ConfigurationSet; -import com.oracle.svm.configure.json.JsonPrintable; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationFile; import com.oracle.svm.core.configure.ConfigurationParser; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ComplexFilter.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ComplexFilter.java index 1a8799497bdc..3e55ed237cf4 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ComplexFilter.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ComplexFilter.java @@ -28,7 +28,7 @@ import org.graalvm.collections.EconomicMap; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; public class ComplexFilter implements ConfigurationFilter { private HierarchyFilterNode hierarchyFilterNode; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ConfigurationFilter.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ConfigurationFilter.java index fc2cb5e5acf6..b3419c8542fb 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ConfigurationFilter.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/ConfigurationFilter.java @@ -26,7 +26,7 @@ import org.graalvm.collections.EconomicMap; -import com.oracle.svm.configure.json.JsonPrintable; +import com.oracle.svm.core.util.json.JsonPrintable; public interface ConfigurationFilter extends JsonPrintable { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/FilterConfigurationParser.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/FilterConfigurationParser.java index 1101af3dce17..4d50b7a4eb3c 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/FilterConfigurationParser.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/FilterConfigurationParser.java @@ -32,7 +32,7 @@ import org.graalvm.collections.MapCursor; import org.graalvm.util.json.JSONParserException; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; import com.oracle.svm.core.configure.ConfigurationParser; public class FilterConfigurationParser extends ConfigurationParser { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/HierarchyFilterNode.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/HierarchyFilterNode.java index 8021666cf1e4..f9f447f3ef2d 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/HierarchyFilterNode.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/HierarchyFilterNode.java @@ -36,7 +36,7 @@ import org.graalvm.collections.EconomicMap; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; /** Represents a rule that includes or excludes a set of Java classes. */ public final class HierarchyFilterNode implements ConfigurationFilter { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/RegexFilter.java b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/RegexFilter.java index 654248248f17..80e0aedef87b 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/RegexFilter.java +++ b/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/filters/RegexFilter.java @@ -34,7 +34,7 @@ import org.graalvm.collections.EconomicMap; -import com.oracle.svm.configure.json.JsonWriter; +import com.oracle.svm.core.util.json.JsonWriter; public class RegexFilter implements ConfigurationFilter { diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrintable.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrintable.java similarity index 97% rename from substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrintable.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrintable.java index 5792b299a325..0f2fec1e8b57 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrintable.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrintable.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.configure.json; +package com.oracle.svm.core.util.json; import java.io.IOException; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrinter.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrinter.java similarity index 98% rename from substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrinter.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrinter.java index 1d74d183696b..81d7024028d1 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonPrinter.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonPrinter.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.configure.json; +package com.oracle.svm.core.util.json; import java.io.IOException; import java.util.ArrayList; diff --git a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonWriter.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonWriter.java similarity index 98% rename from substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonWriter.java rename to substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonWriter.java index ae8d9f5a29f7..f3d73016336e 100644 --- a/substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/json/JsonWriter.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonWriter.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.oracle.svm.configure.json; +package com.oracle.svm.core.util.json; import java.io.IOException; import java.io.Writer; From 19a2dc9155b779e5664a9994c8bad37e49768d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20W=C3=B6gerer?= Date: Wed, 7 Dec 2022 15:20:21 +0100 Subject: [PATCH 2/5] OmitPreviousConfigTests need access to org.graalvm.nativeimage.builder/com.oracle.svm.core.util.json --- .../src/META-INF/native-image/native-image.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.configure.test/src/META-INF/native-image/native-image.properties b/substratevm/src/com.oracle.svm.configure.test/src/META-INF/native-image/native-image.properties index 58438cfd69af..061a0420a766 100644 --- a/substratevm/src/com.oracle.svm.configure.test/src/META-INF/native-image/native-image.properties +++ b/substratevm/src/com.oracle.svm.configure.test/src/META-INF/native-image/native-image.properties @@ -1 +1,4 @@ -Args = --add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED -H:IncludeResources=com/oracle/svm/configure/test/config/.*json +Args = \ + --add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED \ + --add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.util.json=ALL-UNNAMED \ + -H:IncludeResources=com/oracle/svm/configure/test/config/.*json From 43e79c270c2df92592dbc1b7b098fb08ac88fe15 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Fri, 11 Nov 2022 12:50:13 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Introduce=20`-H:=C2=B1GenerateBuildArtifact?= =?UTF-8?q?sFile`=20option.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit and deprecate `.build_artifacts.txt` files. --- .../assets/build-artifacts-schema-v0.9.0.json | 104 ++++++++++++++++++ substratevm/CHANGELOG.md | 1 + substratevm/mx.substratevm/mx_substratevm.py | 38 ++++--- .../com/oracle/svm/core/BuildArtifacts.java | 53 +++++++-- .../com/oracle/svm/core/SubstrateOptions.java | 7 +- .../svm/hosted/BuildArtifactsExporter.java | 93 ++++++++++++++++ .../oracle/svm/hosted/ProgressReporter.java | 41 +++---- .../oracle/svm/hosted/image/NativeImage.java | 2 +- .../svm/hosted/image/NativeImageViaCC.java | 4 +- .../hosted/jdk/JNIRegistrationSupport.java | 4 +- 10 files changed, 290 insertions(+), 57 deletions(-) create mode 100644 docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json create mode 100644 substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/BuildArtifactsExporter.java diff --git a/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json b/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json new file mode 100644 index 000000000000..36562e26bed8 --- /dev/null +++ b/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json @@ -0,0 +1,104 @@ +{ + "$id": "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "default": {}, + "examples": [ + { + "build_info": [ + "build-output.json" + ], + "debug_info": [ + "helloworld", + "sources" + ], + "executables": [ + "helloworld" + ] + } + ], + "properties": { + "build_info": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Build information generated by Native Image (not needed at run-time)", + "type": "array" + }, + "c_headers": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "C header files generated by Native Image (not needed at run-time)", + "type": "array" + }, + "debug_info": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Debug information generated by Native Image (not needed at run-time)", + "type": "array" + }, + "executables": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Executables generated by Native Image (needed at run-time)", + "type": "array" + }, + "import_libraries": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Import libraries generated by Native Image (not needed at run-time)", + "type": "array" + }, + "jdk_libraries": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "JDK libraries copied by Native Image (needed at run-time)", + "type": "array" + }, + "language_home": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Language home artifacts for Truffle languages (needed at run-time)", + "type": "array" + }, + "shared_libraries": { + "default": [], + "items": { + "format": "uri-reference", + "title": "Relative path to file or directory", + "type": "string" + }, + "title": "Shared libraries generated by Native Image (not needed at run-time)", + "type": "array" + } + }, + "required": [], + "title": "JSON schema for the build artifacts of GraalVM Native Image", + "type": "object" +} diff --git a/substratevm/CHANGELOG.md b/substratevm/CHANGELOG.md index 573cbe3ca392..98d893b3a0ac 100644 --- a/substratevm/CHANGELOG.md +++ b/substratevm/CHANGELOG.md @@ -9,6 +9,7 @@ This changelog summarizes major changes to GraalVM Native Image. * (GR-41674) Class instanceOf and isAssignableFrom checks do need to make the checked type reachable. * (GR-41100) Add support for `-XX:HeapDumpPath` to control where heap dumps are created. * (GR-42148) Adjust build output to report types (primitives, classes, interfaces, and arrays) instead of classes and revise the output schema of `-H:BuildOutputJSONFile`. +* (GR-42375) Add `-H:±GenerateBuildArtifactsFile` option, which generates a `build-artifacts.json` file with a list of all artifacts produced by Native Image. `.build_artifacts.txt` files are now deprecated, disabled (can be re-enabled with env setting `NATIVE_IMAGE_DEPRECATED_BUILD_ARTIFACTS_TXT=true`), and will be removed in a future release. ## Version 22.3.0 * (GR-35721) Remove old build output style and the `-H:±BuildOutputUseNewStyle` option. diff --git a/substratevm/mx.substratevm/mx_substratevm.py b/substratevm/mx.substratevm/mx_substratevm.py index 332bb24f32e0..7841bc0107ee 100644 --- a/substratevm/mx.substratevm/mx_substratevm.py +++ b/substratevm/mx.substratevm/mx_substratevm.py @@ -415,7 +415,7 @@ def help_stdout_check(output): if t: hellomodule(args.extra_image_builder_arguments) - with Task('Validate JSON build output', tasks, tags=[mx_gate.Tags.style]) as t: + with Task('Validate JSON build info', tasks, tags=[mx_gate.Tags.style]) as t: if t: import json try: @@ -423,20 +423,28 @@ def help_stdout_check(output): from jsonschema.exceptions import ValidationError, SchemaError except ImportError: mx.abort('Unable to import jsonschema') - with open(join(suite.dir, '..', 'docs', 'reference-manual', 'native-image', 'assets', 'build-output-schema-v0.9.1.json')) as f: - json_schema = json.load(f) - with tempfile.NamedTemporaryFile(prefix='build_json') as json_file: - helloworld(['--output-path', svmbuild_dir(), f'-H:BuildOutputJSONFile={json_file.name}']) - try: - with open(json_file.name) as f: - json_output = json.load(f) - json_validate(json_output, json_schema) - except IOError as e: - mx.abort(f'Unable to load JSON build output: {e}') - except ValidationError as e: - mx.abort(f'Unable to validate JSON build output against the schema: {e}') - except SchemaError as e: - mx.abort(f'JSON schema not valid: {e}') + + json_and_schema_file_pairs = [ + ('build-artifacts.json', 'build-artifacts-schema-v0.9.0.json'), + ('build-output.json', 'build-output-schema-v0.9.1.json'), + ] + + build_output_file = join(svmbuild_dir(), 'build-output.json') + helloworld(['--output-path', svmbuild_dir(), f'-H:BuildOutputJSONFile={build_output_file}', '-H:+GenerateBuildArtifactsFile']) + + try: + for json_file, schema_file in json_and_schema_file_pairs: + with open(join(svmbuild_dir(), json_file)) as f: + json_contents = json.load(f) + with open(join(suite.dir, '..', 'docs', 'reference-manual', 'native-image', 'assets', schema_file)) as f: + schema_contents = json.load(f) + json_validate(json_contents, schema_contents) + except IOError as e: + mx.abort(f'Unable to load JSON build info: {e}') + except ValidationError as e: + mx.abort(f'Unable to validate JSON build info against the schema: {e}') + except SchemaError as e: + mx.abort(f'JSON schema not valid: {e}') def native_unittests_task(extra_build_args=None): diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/BuildArtifacts.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/BuildArtifacts.java index de0ffe8ac21d..6c2f5c9c3a48 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/BuildArtifacts.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/BuildArtifacts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2022, 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 @@ -30,15 +30,50 @@ /** Interface for collecting artifacts produced during native image build. */ public interface BuildArtifacts { + + /** + * Artifact types generated by Native Image. Changing this enum requires updating the + * corresponding JSON schema (see {@code SubstrateOptions#GenerateBuildArtifactsFile}). + */ enum ArtifactType { - EXECUTABLE, - SHARED_LIB, - JDK_LIB, - JDK_LIB_SHIM, - HEADER, - IMPORT_LIB, - DEBUG_INFO, - LANGUAGE_HOME, + /* RUN-TIME-CRITICAL ARTIFACTS: */ + + /* For all executables needed at run-time. */ + EXECUTABLE("executables"), + /* For all shared libraries that are not JDK-related and needed at run-time. */ + SHARED_LIBRARY("shared_libraries"), + + /* For all shared libraries from the JDK needed at run-time. */ + JDK_LIBRARY("jdk_libraries"), + /* For all library shims for the JDK needed at run-time. */ + JDK_LIBRARY_SHIM(JDK_LIBRARY.getJsonKey()), // distinction should not be important to users. + + /* Language home artifacts for Truffle languages needed at run-time. */ + LANGUAGE_HOME("language_home"), + + /* ARTIFACTS NOT NEEDED AT RUN-TIME: */ + + /* + * For all artifacts from image generator (e.g., build statistics, lists, call trees, ...). + */ + BUILD_INFO("build_info"), + /* For all debugging-related artifacts. */ + DEBUG_INFO("debug_info"), + + /* For C header files. */ + C_HEADER("c_headers"), + /* For all import libraries. */ + IMPORT_LIBRARY("import_libraries"); + + private final String jsonKey; + + ArtifactType(String jsonKey) { + this.jsonKey = jsonKey; + } + + public String getJsonKey() { + return jsonKey; + } } static BuildArtifacts singleton() { diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java index 2ae67b2309ba..8e3605c43373 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java @@ -414,6 +414,11 @@ public Boolean getValue(OptionValues values) { @Option(help = "Alignment of AOT and JIT compiled code in bytes.")// public static final HostedOptionKey CodeAlignment = new HostedOptionKey<>(16); + public static final String BUILD_ARTIFACTS_FILE_NAME = "build-artifacts.json"; + @Option(help = "Create a " + BUILD_ARTIFACTS_FILE_NAME + " file in the build directory. The output conforms to the JSON schema located at: " + + "docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json", type = OptionType.User)// + public static final HostedOptionKey GenerateBuildArtifactsFile = new HostedOptionKey<>(false); + /* * Build output options. */ @@ -440,7 +445,7 @@ public Boolean getValue(OptionValues values) { public static final HostedOptionKey BuildOutputGCWarnings = new HostedOptionKey<>(true); @Option(help = "Print build output statistics as JSON to the specified file. " + - "The output is according to the JSON schema located at: " + + "The output conforms to the JSON schema located at: " + "docs/reference-manual/native-image/assets/build-output-schema-v0.9.1.json", type = OptionType.User)// public static final HostedOptionKey BuildOutputJSONFile = new HostedOptionKey<>(""); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/BuildArtifactsExporter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/BuildArtifactsExporter.java new file mode 100644 index 000000000000..829dedc9e8c3 --- /dev/null +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/BuildArtifactsExporter.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2022, 2022, 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.hosted; + +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.file.Path; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import com.oracle.graal.pointsto.reports.ReportUtils; +import com.oracle.svm.core.BuildArtifacts; +import com.oracle.svm.core.BuildArtifacts.ArtifactType; +import com.oracle.svm.core.SubstrateOptions; +import com.oracle.svm.core.option.HostedOptionValues; +import com.oracle.svm.core.util.VMError; +import com.oracle.svm.core.util.json.JsonPrinter; +import com.oracle.svm.core.util.json.JsonWriter; + +public class BuildArtifactsExporter { + private static final String ENV_VAR_REENABLE_DEPRECATED = "NATIVE_IMAGE_DEPRECATED_BUILD_ARTIFACTS_TXT"; + + public static void run(String imageName, BuildArtifacts buildArtifacts, Map> buildArtifactsMap) { + run(buildArtifacts, buildArtifactsMap); + if ("true".equalsIgnoreCase(System.getenv().get(ENV_VAR_REENABLE_DEPRECATED))) { + reportDeprecatedBuildArtifacts(imageName, buildArtifacts, buildArtifactsMap); + } + } + + private static void run(BuildArtifacts buildArtifacts, Map> buildArtifactsMap) { + if (buildArtifactsMap.isEmpty() || !SubstrateOptions.GenerateBuildArtifactsFile.getValue()) { + return; // nothing to do + } + Path buildPath = NativeImageGenerator.generatedFiles(HostedOptionValues.singleton()); + Path targetPath = buildPath.resolve(SubstrateOptions.BUILD_ARTIFACTS_FILE_NAME); + try (JsonWriter writer = new JsonWriter(targetPath)) { + writer.append('{'); + var iterator = buildArtifactsMap.entrySet().iterator(); + while (iterator.hasNext()) { + var entry = iterator.next(); + writer.quote(entry.getKey().getJsonKey()).append(":"); + JsonPrinter.printCollection(writer, (Collection) entry.getValue(), Comparator.naturalOrder(), (p, w) -> w.quote(buildPath.relativize(p.toAbsolutePath()).toString())); + if (iterator.hasNext()) { + writer.append(','); + } + } + writer.append('}'); + buildArtifacts.add(ArtifactType.BUILD_INFO, targetPath); + } catch (IOException e) { + throw VMError.shouldNotReachHere("Unable to create " + SubstrateOptions.BUILD_ARTIFACTS_FILE_NAME, e); + } + } + + private static void reportDeprecatedBuildArtifacts(String imageName, BuildArtifacts buildArtifacts, Map> buildArtifactsMap) { + Path buildDir = NativeImageGenerator.generatedFiles(HostedOptionValues.singleton()); + Consumer writerConsumer = writer -> buildArtifactsMap.forEach((artifactType, paths) -> { + writer.println("[" + artifactType + "]"); + if (artifactType == BuildArtifacts.ArtifactType.JDK_LIBRARY_SHIM) { + writer.println("# Note that shim JDK libraries depend on this"); + writer.println("# particular native image (including its name)"); + writer.println("# and therefore cannot be used with others."); + } + paths.stream().map(Path::toAbsolutePath).map(buildDir::relativize).forEach(writer::println); + writer.println(); + }); + buildArtifacts.add(ArtifactType.BUILD_INFO, ReportUtils.report("build artifacts", buildDir.resolve(imageName + ".build_artifacts.txt"), writerConsumer, false)); + } +} diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java index 79e2c9507e0a..6f060682087a 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java @@ -598,10 +598,11 @@ public void printEpilog(String imageName, NativeImageGenerator generator, boolea double totalSeconds = Utils.millisToSeconds(getTimer(TimerCollection.Registry.TOTAL).getTotalTime()); recordJsonMetric(ResourceUsageKey.TOTAL_SECS, totalSeconds); + createArtifacts(imageName, generator, parsedHostedOptions, wasSuccessfulBuild); Map> artifacts = generator.getBuildArtifacts(); if (!artifacts.isEmpty()) { l().printLineSeparator(); - printArtifacts(imageName, generator, parsedHostedOptions, artifacts, wasSuccessfulBuild); + printArtifacts(artifacts); } l().printHeadlineSeparator(); @@ -617,7 +618,18 @@ public void printEpilog(String imageName, NativeImageGenerator generator, boolea executor.shutdown(); } - private void printArtifacts(String imageName, NativeImageGenerator generator, OptionValues parsedHostedOptions, Map> artifacts, boolean wasSuccessfulBuild) { + private void createArtifacts(String imageName, NativeImageGenerator generator, OptionValues parsedHostedOptions, boolean wasSuccessfulBuild) { + BuildArtifacts artifacts = BuildArtifacts.singleton(); + if (jsonHelper != null && wasSuccessfulBuild) { + artifacts.add(ArtifactType.BUILD_INFO, jsonHelper.printToFile()); + } + if (generator.getBigbang() != null && ImageBuildStatistics.Options.CollectImageBuildStatistics.getValue(parsedHostedOptions)) { + artifacts.add(ArtifactType.BUILD_INFO, reportImageBuildStatistics(imageName, generator.getBigbang())); + } + BuildArtifactsExporter.run(imageName, artifacts, generator.getBuildArtifacts()); + } + + private void printArtifacts(Map> artifacts) { l().yellowBold().a("Produced artifacts:").reset().println(); // Use TreeMap to sort paths alphabetically. Map> pathToTypes = new TreeMap<>(); @@ -626,15 +638,6 @@ private void printArtifacts(String imageName, NativeImageGenerator generator, Op pathToTypes.computeIfAbsent(path, p -> new ArrayList<>()).add(artifactType.name().toLowerCase()); } }); - if (jsonHelper != null && wasSuccessfulBuild) { - Path jsonMetric = jsonHelper.printToFile(); - pathToTypes.computeIfAbsent(jsonMetric, p -> new ArrayList<>()).add("json"); - } - if (generator.getBigbang() != null && ImageBuildStatistics.Options.CollectImageBuildStatistics.getValue(parsedHostedOptions)) { - Path buildStatisticsPath = reportImageBuildStatistics(imageName, generator.getBigbang()); - pathToTypes.computeIfAbsent(buildStatisticsPath, p -> new ArrayList<>()).add("raw"); - } - pathToTypes.computeIfAbsent(reportBuildArtifacts(imageName, artifacts), p -> new ArrayList<>()).add("txt"); pathToTypes.forEach((path, typeNames) -> { l().a(" ").link(path).dim().a(" (").a(String.join(", ", typeNames)).a(")").reset().println(); }); @@ -653,22 +656,6 @@ private static Path reportImageBuildStatistics(String imageName, BigBang bb) { } } - private static Path reportBuildArtifacts(String imageName, Map> buildArtifacts) { - Path buildDir = NativeImageGenerator.generatedFiles(HostedOptionValues.singleton()); - - Consumer writerConsumer = writer -> buildArtifacts.forEach((artifactType, paths) -> { - writer.println("[" + artifactType + "]"); - if (artifactType == BuildArtifacts.ArtifactType.JDK_LIB_SHIM) { - writer.println("# Note that shim JDK libraries depend on this"); - writer.println("# particular native image (including its name)"); - writer.println("# and therefore cannot be used with others."); - } - paths.stream().map(Path::toAbsolutePath).map(buildDir::relativize).forEach(writer::println); - writer.println(); - }); - return ReportUtils.report("build artifacts", buildDir.resolve(imageName + ".build_artifacts.txt"), writerConsumer, false); - } - private void printResourceStatistics() { double totalProcessTimeSeconds = Utils.millisToSeconds(System.currentTimeMillis() - ManagementFactory.getRuntimeMXBean().getStartTime()); GCStats gcStats = GCStats.getCurrent(); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java index e75ce0bfbc79..145afb9a16db 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java @@ -245,7 +245,7 @@ private void writeHeaderFile(Path outDir, Header header, List meth writer.appendln("#endif"); Path headerFile = writer.writeFile(header.name() + dynamicSuffix); - BuildArtifacts.singleton().add(ArtifactType.HEADER, headerFile); + BuildArtifacts.singleton().add(ArtifactType.C_HEADER, headerFile); } /** diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageViaCC.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageViaCC.java index 498739165a7d..e387ffd88182 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageViaCC.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageViaCC.java @@ -153,14 +153,14 @@ private void runLinkerCommand(String imageName, LinkerInvocation inv, List 0) { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JNIRegistrationSupport.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JNIRegistrationSupport.java index f91074725eb2..1d9f2b69900a 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JNIRegistrationSupport.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jdk/JNIRegistrationSupport.java @@ -223,7 +223,7 @@ private void copyJDKLibraries(Path jdkLibDir) { try { Path libraryPath = accessImpl.getImagePath().resolveSibling(library); Files.copy(jdkLibDir.resolve(library), libraryPath, REPLACE_EXISTING); - BuildArtifacts.singleton().add(ArtifactType.JDK_LIB, libraryPath); + BuildArtifacts.singleton().add(ArtifactType.JDK_LIBRARY, libraryPath); debug.log("%s: OK", library); } catch (NoSuchFileException e) { /* Ignore libraries that are not present in the JDK. */ @@ -272,7 +272,7 @@ private void makeShimDLL(String shimName) { if (FileUtils.executeCommand(linkerCommand) != 0) { VMError.shouldNotReachHere(); } - BuildArtifacts.singleton().add(ArtifactType.JDK_LIB_SHIM, shimDLL); + BuildArtifacts.singleton().add(ArtifactType.JDK_LIBRARY_SHIM, shimDLL); debug.log("%s.dll: OK", shimName); } catch (InterruptedException e) { throw new InterruptImageBuilding(); From acdbf539d28ffb0008ef008b5f66465a5692db30 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Fri, 2 Dec 2022 15:30:12 +0100 Subject: [PATCH 4/5] Use `-H:+GenerateBuildArtifactsFile` in `build_tests_image()`. --- vm/mx.vm/mx_vm_gate.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/vm/mx.vm/mx_vm_gate.py b/vm/mx.vm/mx_vm_gate.py index 663c0b12bd41..35418942a1ae 100644 --- a/vm/mx.vm/mx_vm_gate.py +++ b/vm/mx.vm/mx_vm_gate.py @@ -576,8 +576,9 @@ def gate_svm_truffle_tck_python(tasks): def build_tests_image(image_dir, options, unit_tests=None, additional_deps=None, shared_lib=False): native_image_context, svm = graalvm_svm() with native_image_context(svm.IMAGE_ASSERTION_FLAGS) as native_image: + import json import mx_compiler - build_options = [] + options + build_options = ['-H:+GenerateBuildArtifactsFile'] + options if shared_lib: build_options = build_options + ['--shared'] build_deps = [] @@ -602,21 +603,18 @@ def build_tests_image(image_dir, options, unit_tests=None, additional_deps=None, if additional_deps: build_deps = build_deps + additional_deps extra_image_args = mx.get_runtime_jvm_args(build_deps, jdk=mx_compiler.jdk, exclude_names=mx_sdk_vm_impl.NativePropertiesBuildTask.implicit_excludes) - tests_image = native_image(build_options + extra_image_args) - import configparser - artifacts = configparser.RawConfigParser(allow_no_value=True) - artifacts_file_path = tests_image + '.build_artifacts.txt' + native_image(build_options + extra_image_args) + artifacts_file_path = join(image_dir, 'build-artifacts.json') if not exists(artifacts_file_path): - mx.abort('Tests image build artifacts not found.') - artifacts.read(artifacts_file_path) - if shared_lib: - if not any(s == 'SHARED_LIB' for s in artifacts.sections()): - mx.abort('Shared lib not found in image build artifacts.') - tests_image_path = join(image_dir, str(artifacts.items('SHARED_LIB')[0][0])) - else: - if not any(s == 'EXECUTABLE' for s in artifacts.sections()): - mx.abort('Executable not found in image build artifacts.') - tests_image_path = join(image_dir, str(artifacts.items('EXECUTABLE')[0][0])) + mx.abort(f'{artifacts_file_path} for tests image not found.') + with open(artifacts_file_path) as f: + artifacts = json.load(f) + kind = 'shared_libraries' if shared_lib else 'executables' + if kind not in artifacts: + mx.abort(f'{kind} not found in {artifacts_file_path}.') + if len(artifacts[kind]) != 1: + mx.abort(f"Expected {kind} list with one element, found {len(artifacts[kind])}: {', '.join(artifacts[kind])}.") + tests_image_path = join(image_dir, artifacts[kind][0]) mx.logv(f'Test image path: {tests_image_path}') return tests_image_path, unittests_file From 6f6ef0231b83f2132e719702e14c956791d2a7e4 Mon Sep 17 00:00:00 2001 From: Fabio Niephaus Date: Mon, 12 Dec 2022 11:38:08 +0100 Subject: [PATCH 5/5] Add a note. --- .../src/com/oracle/svm/hosted/ProgressReporter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java index 6f060682087a..9f63dc91ddf8 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java @@ -137,6 +137,10 @@ public class ProgressReporter { private boolean creationStageEndCompleted = false; private boolean reportStringBytes = true; + /** + * Build stages displayed as part of the Native Image build output. Changing this enum may + * require updating the doc entries for each stage in the BuildOutput.md. + */ private enum BuildStage { INITIALIZING("Initializing"), ANALYSIS("Performing analysis", true, false),