Skip to content
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
16 changes: 11 additions & 5 deletions docs/reference-manual/native-image/BuildOutput.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@ Below is the example output when building a native executable of the `HelloWorld
================================================================================
GraalVM Native Image: Generating 'helloworld' (executable)...
================================================================================
[1/8] Initializing... (2.0s @ 0.19GB)
Java version: 26+9, vendor version: GraalVM CE 26-dev+9.1
Graal compiler: optimization level: 2, target machine: x86-64-v3
C compiler: gcc (linux, x86_64, 15.2.1)
Garbage collector: Serial GC (max heap size: 80% of RAM)
[1/8] Initializing... (5.1s @ 0.23GB)
Builder configuration:
- Java version: 26+12, vendor version: Oracle GraalVM 26-dev+12.1
- Graal compiler: optimization level: 2, target machine: x86-64-v3
- C compiler: gcc (linux, x86_64, 13.3.0)
- Assertions: enabled, system assertions: enabled
- 1 user-specific feature(s):
- com.oracle.svm.thirdparty.gson.GsonFeature
Image configuration:
- Garbage collector: Serial GC (max heap size: 80% of RAM)
- Assertions: disabled (class-specific config may apply), system assertions: disabled
--------------------------------------------------------------------------------
Build resources:
- 14.69GiB of memory (47.0% of system memory, using all available memory)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,12 @@ private boolean desiredAssertionStatusImpl(String name, ClassLoader classLoader)
public boolean desiredAssertionStatus(Class<?> clazz) {
return desiredAssertionStatusImpl(clazz.getName(), clazz.getClassLoader());
}

public boolean getDefaultAssertionStatus() {
return defaultAssertionStatus;
}

public boolean getDefaultSystemAssertionStatus() {
return systemAssertionStatus;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.oracle.svm.core.RuntimeAssertionsSupport;
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.hosted.Feature;
import org.graalvm.nativeimage.impl.ImageSingletonsSupport;
Expand Down Expand Up @@ -242,35 +243,51 @@ public void printInitializeEnd(List<Feature> features, ImageClassLoader classLoa
recordJsonMetric(GeneralInfo.JAVA_VERSION, vm.version);
recordJsonMetric(GeneralInfo.VENDOR_VERSION, vm.vendorVersion);
recordJsonMetric(GeneralInfo.GRAALVM_VERSION, vm.vendorVersion); // deprecated
l().a(" ").doclink("Java version", "#glossary-java-info").a(": ").a(vm.version).a(", ").doclink("vendor version", "#glossary-java-info").a(": ").a(vm.vendorVersion).println();

// Builder Configuration section
l().a(" ").a("Builder configuration:").println();
l().a(" - ").doclink("Java version", "#glossary-java-info").a(": ").a(vm.version).a(", ").doclink("vendor version", "#glossary-java-info").a(": ").a(vm.vendorVersion).println();
String optimizationLevel = SubstrateOptions.Optimize.getValue();
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_OPTIMIZATION_LEVEL, optimizationLevel);
String march = CPUType.getSelectedOrDefaultMArch();
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_MARCH, march);
DirectPrinter graalLine = l().a(" ").doclink("Graal compiler", "#glossary-graal-compiler").a(": optimization level: %s, target machine: %s", optimizationLevel, march);
DirectPrinter graalLine = l().a(" - ").doclink("Graal compiler", "#glossary-graal-compiler").a(": optimization level: %s, target machine: %s", optimizationLevel, march);
ImageSingletons.lookup(ProgressReporterFeature.class).appendGraalSuffix(graalLine);
graalLine.println();
String cCompilerShort = null;
if (ImageSingletons.contains(CCompilerInvoker.class)) {
cCompilerShort = ImageSingletons.lookup(CCompilerInvoker.class).compilerInfo.getShortDescription();
l().a(" ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
l().a(" - ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
}
recordJsonMetric(GeneralInfo.CC, cCompilerShort);
String gcName = Heap.getHeap().getGC().getName();
recordJsonMetric(GeneralInfo.GC, gcName);
long maxHeapSize = SubstrateGCOptions.MaxHeapSize.getValue();
String maxHeapValue = maxHeapSize == 0 ? Heap.getHeap().getGC().getDefaultMaxHeapSize() : ByteFormattingUtil.bytesToHuman(maxHeapSize);
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();

l().a(" - ").a("Assertions: ").a(SubstrateUtil.assertionsEnabled() ? "enabled" : "disabled").a(", system assertions: ").a(getSystemAssertionStatus() ? "enabled" : "disabled")
.println();

printFeatures(features);

// Image Configuration section
l().a(" ").a("Image configuration:").println();
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();
l().a(" - ").a("Assertions: ").a(RuntimeAssertionsSupport.singleton().getDefaultAssertionStatus() ? "enabled" : "disabled").a(" (class-specific config may apply), system assertions: ")
.a(RuntimeAssertionsSupport.singleton().getDefaultSystemAssertionStatus() ? "enabled" : "disabled").println();

printExperimentalOptions(classLoader);
printResourceInfo();
}

private boolean getSystemAssertionStatus() {
return java.util.ArrayList.class.desiredAssertionStatus();
}

private void printFeatures(List<Feature> features) {
int numFeatures = features.size();
if (numFeatures > 0) {
l().a(" ").a(numFeatures).a(" ").doclink("user-specific feature(s)", "#glossary-user-specific-features").a(":").println();
l().a(" - ").a(numFeatures).a(" ").doclink("user-specific feature(s)", "#glossary-user-specific-features").a(":").println();
features.sort(Comparator.comparing(a -> a.getClass().getName()));
for (Feature feature : features) {
printFeature(l(), feature);
Expand All @@ -279,7 +296,7 @@ private void printFeatures(List<Feature> features) {
}

private static void printFeature(DirectPrinter printer, Feature feature) {
printer.a(" - ");
printer.a(" - ");
String name = feature.getClass().getName();
String url = feature.getURL();
if (url != null) {
Expand Down