Skip to content

Commit 44f3f98

Browse files
committed
structure output in Initializing phase of builder
1 parent b717a75 commit 44f3f98

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

docs/reference-manual/native-image/BuildOutput.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,17 @@ Below is the example output when building a native executable of the `HelloWorld
2323
================================================================================
2424
GraalVM Native Image: Generating 'helloworld' (executable)...
2525
================================================================================
26-
[1/8] Initializing... (2.0s @ 0.19GB)
27-
Java version: 26+9, vendor version: GraalVM CE 26-dev+9.1
28-
Graal compiler: optimization level: 2, target machine: x86-64-v3
29-
C compiler: gcc (linux, x86_64, 15.2.1)
30-
Garbage collector: Serial GC (max heap size: 80% of RAM)
26+
[1/8] Initializing... (5.1s @ 0.23GB)
27+
Builder configuration:
28+
- Java version: 26+12, vendor version: Oracle GraalVM 26-dev+12.1
29+
- Graal compiler: optimization level: 2, target machine: x86-64-v3
30+
- C compiler: gcc (linux, x86_64, 13.3.0)
31+
- Assertions: enabled, system assertions: enabled
32+
- 1 user-specific feature(s):
33+
- com.oracle.svm.thirdparty.gson.GsonFeature
34+
Image configuration:
35+
- Garbage collector: Serial GC (max heap size: 80% of RAM)
36+
- Assertions: disabled (class-specific config may apply), system assertions: disabled
3137
--------------------------------------------------------------------------------
3238
Build resources:
3339
- 14.69GiB of memory (47.0% of system memory, using all available memory)

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,30 +243,39 @@ public void printInitializeEnd(List<Feature> features, ImageClassLoader classLoa
243243
recordJsonMetric(GeneralInfo.JAVA_VERSION, vm.version);
244244
recordJsonMetric(GeneralInfo.VENDOR_VERSION, vm.vendorVersion);
245245
recordJsonMetric(GeneralInfo.GRAALVM_VERSION, vm.vendorVersion); // deprecated
246-
l().a(" ").doclink("Java version", "#glossary-java-info").a(": ").a(vm.version).a(", ").doclink("vendor version", "#glossary-java-info").a(": ").a(vm.vendorVersion).println();
246+
247+
// Builder Configuration section
248+
l().a(" ").a("Builder configuration:").println();
249+
l().a(" - ").doclink("Java version", "#glossary-java-info").a(": ").a(vm.version).a(", ").doclink("vendor version", "#glossary-java-info").a(": ").a(vm.vendorVersion).println();
247250
String optimizationLevel = SubstrateOptions.Optimize.getValue();
248251
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_OPTIMIZATION_LEVEL, optimizationLevel);
249252
String march = CPUType.getSelectedOrDefaultMArch();
250253
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_MARCH, march);
251-
DirectPrinter graalLine = l().a(" ").doclink("Graal compiler", "#glossary-graal-compiler").a(": optimization level: %s, target machine: %s", optimizationLevel, march);
254+
DirectPrinter graalLine = l().a(" - ").doclink("Graal compiler", "#glossary-graal-compiler").a(": optimization level: %s, target machine: %s", optimizationLevel, march);
252255
ImageSingletons.lookup(ProgressReporterFeature.class).appendGraalSuffix(graalLine);
253256
graalLine.println();
254257
String cCompilerShort = null;
255258
if (ImageSingletons.contains(CCompilerInvoker.class)) {
256259
cCompilerShort = ImageSingletons.lookup(CCompilerInvoker.class).compilerInfo.getShortDescription();
257-
l().a(" ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
260+
l().a(" - ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
258261
}
259262
recordJsonMetric(GeneralInfo.CC, cCompilerShort);
260263
String gcName = Heap.getHeap().getGC().getName();
261264
recordJsonMetric(GeneralInfo.GC, gcName);
262265
long maxHeapSize = SubstrateGCOptions.MaxHeapSize.getValue();
263266
String maxHeapValue = maxHeapSize == 0 ? Heap.getHeap().getGC().getDefaultMaxHeapSize() : ByteFormattingUtil.bytesToHuman(maxHeapSize);
264267

265-
l().a(" ").a("Builder assertions: ").a(SubstrateUtil.assertionsEnabled() ? "enabled" : "disabled").a(", builder system assertions: ").a(getSystemAssertionStatus() ? "enabled" : "disabled").println();
266-
l().a(" ").doclink("Image Garbage collector", "#glossary-gc").a(": ").a(gcName).a(" (").doclink("max heap size", "#glossary-gc-max-heap-size").a(": ").a(maxHeapValue).a(")").println();
267-
l().a(" ").a("Image assertions: by default ").a(RuntimeAssertionsSupport.singleton().getDefaultAssertionStatus() ? "enabled" : "disabled").a(", system assertions: by default ").a(RuntimeAssertionsSupport.singleton().getDefaultSystemAssertionStatus() ? "enabled" : "disabled").a(" (class-specific config may apply)").println();
268+
l().a(" - ").a("Assertions: ").a(SubstrateUtil.assertionsEnabled() ? "enabled" : "disabled").a(", system assertions: ").a(getSystemAssertionStatus() ? "enabled" : "disabled")
269+
.println();
268270

269271
printFeatures(features);
272+
273+
// Image Configuration section
274+
l().a(" ").a("Image configuration:").println();
275+
l().a(" - ").doclink("Garbage collector", "#glossary-gc").a(": ").a(gcName).a(" (").doclink("max heap size", "#glossary-gc-max-heap-size").a(": ").a(maxHeapValue).a(")").println();
276+
l().a(" - ").a("Assertions: ").a(RuntimeAssertionsSupport.singleton().getDefaultAssertionStatus() ? "enabled" : "disabled").a(" (class-specific config may apply), system assertions: ")
277+
.a(RuntimeAssertionsSupport.singleton().getDefaultSystemAssertionStatus() ? "enabled" : "disabled").println();
278+
270279
printExperimentalOptions(classLoader);
271280
printResourceInfo();
272281
}
@@ -278,7 +287,7 @@ private boolean getSystemAssertionStatus() {
278287
private void printFeatures(List<Feature> features) {
279288
int numFeatures = features.size();
280289
if (numFeatures > 0) {
281-
l().a(" ").a(numFeatures).a(" ").doclink("user-specific feature(s)", "#glossary-user-specific-features").a(":").println();
290+
l().a(" - ").a(numFeatures).a(" ").doclink("user-specific feature(s)", "#glossary-user-specific-features").a(":").println();
282291
features.sort(Comparator.comparing(a -> a.getClass().getName()));
283292
for (Feature feature : features) {
284293
printFeature(l(), feature);
@@ -287,7 +296,7 @@ private void printFeatures(List<Feature> features) {
287296
}
288297

289298
private static void printFeature(DirectPrinter printer, Feature feature) {
290-
printer.a(" - ");
299+
printer.a(" - ");
291300
String name = feature.getClass().getName();
292301
String url = feature.getURL();
293302
if (url != null) {

0 commit comments

Comments
 (0)