Skip to content

Commit c331944

Browse files
committed
[GR-43610] Separate builder and image output, show assertion status.
PullRequest: graal/22002
2 parents a9820fd + 44f3f98 commit c331944

File tree

3 files changed

+42
-11
lines changed

3 files changed

+42
-11
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.core/src/com/oracle/svm/core/RuntimeAssertionsSupport.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,12 @@ private boolean desiredAssertionStatusImpl(String name, ClassLoader classLoader)
193193
public boolean desiredAssertionStatus(Class<?> clazz) {
194194
return desiredAssertionStatusImpl(clazz.getName(), clazz.getClassLoader());
195195
}
196+
197+
public boolean getDefaultAssertionStatus() {
198+
return defaultAssertionStatus;
199+
}
200+
201+
public boolean getDefaultSystemAssertionStatus() {
202+
return systemAssertionStatus;
203+
}
196204
}

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

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import java.util.stream.Collectors;
5454
import java.util.stream.Stream;
5555

56+
import com.oracle.svm.core.RuntimeAssertionsSupport;
5657
import org.graalvm.nativeimage.ImageSingletons;
5758
import org.graalvm.nativeimage.hosted.Feature;
5859
import org.graalvm.nativeimage.impl.ImageSingletonsSupport;
@@ -242,35 +243,51 @@ public void printInitializeEnd(List<Feature> features, ImageClassLoader classLoa
242243
recordJsonMetric(GeneralInfo.JAVA_VERSION, vm.version);
243244
recordJsonMetric(GeneralInfo.VENDOR_VERSION, vm.vendorVersion);
244245
recordJsonMetric(GeneralInfo.GRAALVM_VERSION, vm.vendorVersion); // deprecated
245-
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();
246250
String optimizationLevel = SubstrateOptions.Optimize.getValue();
247251
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_OPTIMIZATION_LEVEL, optimizationLevel);
248252
String march = CPUType.getSelectedOrDefaultMArch();
249253
recordJsonMetric(GeneralInfo.GRAAL_COMPILER_MARCH, march);
250-
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);
251255
ImageSingletons.lookup(ProgressReporterFeature.class).appendGraalSuffix(graalLine);
252256
graalLine.println();
253257
String cCompilerShort = null;
254258
if (ImageSingletons.contains(CCompilerInvoker.class)) {
255259
cCompilerShort = ImageSingletons.lookup(CCompilerInvoker.class).compilerInfo.getShortDescription();
256-
l().a(" ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
260+
l().a(" - ").doclink("C compiler", "#glossary-ccompiler").a(": ").a(cCompilerShort).println();
257261
}
258262
recordJsonMetric(GeneralInfo.CC, cCompilerShort);
259263
String gcName = Heap.getHeap().getGC().getName();
260264
recordJsonMetric(GeneralInfo.GC, gcName);
261265
long maxHeapSize = SubstrateGCOptions.MaxHeapSize.getValue();
262266
String maxHeapValue = maxHeapSize == 0 ? Heap.getHeap().getGC().getDefaultMaxHeapSize() : ByteFormattingUtil.bytesToHuman(maxHeapSize);
263-
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();
267+
268+
l().a(" - ").a("Assertions: ").a(SubstrateUtil.assertionsEnabled() ? "enabled" : "disabled").a(", system assertions: ").a(getSystemAssertionStatus() ? "enabled" : "disabled")
269+
.println();
264270

265271
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+
266279
printExperimentalOptions(classLoader);
267280
printResourceInfo();
268281
}
269282

283+
private boolean getSystemAssertionStatus() {
284+
return java.util.ArrayList.class.desiredAssertionStatus();
285+
}
286+
270287
private void printFeatures(List<Feature> features) {
271288
int numFeatures = features.size();
272289
if (numFeatures > 0) {
273-
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();
274291
features.sort(Comparator.comparing(a -> a.getClass().getName()));
275292
for (Feature feature : features) {
276293
printFeature(l(), feature);
@@ -279,7 +296,7 @@ private void printFeatures(List<Feature> features) {
279296
}
280297

281298
private static void printFeature(DirectPrinter printer, Feature feature) {
282-
printer.a(" - ");
299+
printer.a(" - ");
283300
String name = feature.getClass().getName();
284301
String url = feature.getURL();
285302
if (url != null) {

0 commit comments

Comments
 (0)