Skip to content

Commit

Permalink
[GR-53980] Include file extension in build output.
Browse files Browse the repository at this point in the history
PullRequest: graal/19867
  • Loading branch information
fniephaus committed Jan 30, 2025
2 parents 058d639 + 0eaf16b commit 338a426
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"name": {
"type": "string",
"default": "",
"title": "The name of the native executable"
"title": "The file name of the native executable (including file extension if any)"
},
"graalvm_version": {
"type": "string",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -744,6 +744,10 @@ public AbstractImage getImage() {
return image;
}

public String getOutputFilename() {
return image.getImageKind().getOutputFilename(imageName);
}

public RuntimeConfiguration getRuntimeConfiguration() {
return runtimeConfig;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,10 +208,11 @@ public void setForeignFunctionsInfo(int numDowncallStubs, int numUpcallStubs) {

public void printStart(String imageName, NativeImageKind imageKind) {
l().printHeadlineSeparator();
recordJsonMetric(GeneralInfo.IMAGE_NAME, imageName);
String outputFilename = imageKind.getOutputFilename(imageName);
recordJsonMetric(GeneralInfo.NAME, outputFilename);
String imageKindName = imageKind.name().toLowerCase(Locale.ROOT).replace('_', ' ');
l().blueBold().link("GraalVM Native Image", "https://www.graalvm.org/native-image/").reset()
.a(": Generating '").bold().a(imageName).reset().a("' (").doclink(imageKindName, "#glossary-imagekind").a(")...").println();
.a(": Generating '").bold().a(outputFilename).reset().a("' (").doclink(imageKindName, "#glossary-imagekind").a(")...").println();
l().printHeadlineSeparator();
if (!linkStrategy.isTerminalSupported()) {
l().a("For detailed information and explanations on the build output, visit:").println();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ public void record(ProgressReporterJsonHelper helper, Object value) {
}

public enum GeneralInfo implements JsonMetric {
IMAGE_NAME("name", null),
NAME("name", null),
JAVA_VERSION("java_version", null),
VENDOR_VERSION("vendor_version", null),
GRAALVM_VERSION("graalvm_version", null),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ public enum NativeImageKind {
/* IMAGE_LAYER mimics a SHARED_LIBRARY. */
IMAGE_LAYER(false, true) {
@Override
public String getFilenameSuffix() {
protected String getFilenameSuffix() {
return ".so";
}
},
SHARED_LIBRARY(false) {
@Override
public String getFilenameSuffix() {
protected String getFilenameSuffix() {
return switch (ObjectFile.getNativeFormat()) {
case ELF -> ".so";
case MACH_O -> ".dylib";
Expand All @@ -85,7 +85,11 @@ public String getFilenameSuffix() {
mainEntryPointName = executable ? "main" : "run_main";
}

public String getFilenameSuffix() {
public final String getOutputFilename(String imageName) {
return imageName + getFilenameSuffix();
}

protected String getFilenameSuffix() {
return ObjectFile.getNativeFormat() == ObjectFile.Format.PECOFF ? ".exe" : "";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ static LinkerInvocation getLinkerInvocation(AbstractImage.NativeImageKind imageK
break;
}

Path outputFile = outputDirectory.resolve(imageName + imageKind.getFilenameSuffix());
Path outputFile = outputDirectory.resolve(imageKind.getOutputFilename(imageName));
UserError.guarantee(!Files.isDirectory(outputFile), "Cannot write image to %s. Path exists as directory (use '-o /path/to/image').", outputFile);
inv.setOutputFile(outputFile);
inv.setTempDirectory(tempDirectory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@
*/
package com.oracle.svm.interpreter;

import static com.oracle.svm.hosted.pltgot.GOTEntryAllocator.GOT_NO_ENTRY;
import static com.oracle.svm.interpreter.metadata.Bytecodes.INVOKEDYNAMIC;
import static com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod.EST_NO_ENTRY;
import static com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod.VTBL_NO_ENTRY;
import static com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod.VTBL_ONE_IMPL;
import static com.oracle.svm.interpreter.metadata.InterpreterUniverseImpl.toHexString;
import static com.oracle.svm.hosted.pltgot.GOTEntryAllocator.GOT_NO_ENTRY;

import java.io.IOException;
import java.lang.reflect.Constructor;
Expand Down Expand Up @@ -73,18 +73,6 @@
import com.oracle.svm.core.meta.MethodPointer;
import com.oracle.svm.core.option.HostedOptionValues;
import com.oracle.svm.core.util.VMError;
import com.oracle.svm.interpreter.classfile.ClassFile;
import com.oracle.svm.interpreter.metadata.BytecodeStream;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaField;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaType;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedObjectType;
import com.oracle.svm.interpreter.metadata.InterpreterUniverse;
import com.oracle.svm.interpreter.metadata.InterpreterUniverseImpl;
import com.oracle.svm.interpreter.metadata.MetadataUtil;
import com.oracle.svm.interpreter.metadata.ReferenceConstant;
import com.oracle.svm.interpreter.metadata.serialization.SerializationContext;
import com.oracle.svm.interpreter.metadata.serialization.Serializers;
import com.oracle.svm.hosted.FeatureImpl;
import com.oracle.svm.hosted.NativeImageGenerator;
import com.oracle.svm.hosted.code.CompileQueue;
Expand All @@ -101,6 +89,18 @@
import com.oracle.svm.hosted.pltgot.PLTGOTOptions;
import com.oracle.svm.hosted.snippets.SubstrateGraphBuilderPlugins;
import com.oracle.svm.hosted.substitute.SubstitutionMethod;
import com.oracle.svm.interpreter.classfile.ClassFile;
import com.oracle.svm.interpreter.metadata.BytecodeStream;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaField;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaMethod;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedJavaType;
import com.oracle.svm.interpreter.metadata.InterpreterResolvedObjectType;
import com.oracle.svm.interpreter.metadata.InterpreterUniverse;
import com.oracle.svm.interpreter.metadata.InterpreterUniverseImpl;
import com.oracle.svm.interpreter.metadata.MetadataUtil;
import com.oracle.svm.interpreter.metadata.ReferenceConstant;
import com.oracle.svm.interpreter.metadata.serialization.SerializationContext;
import com.oracle.svm.interpreter.metadata.serialization.Serializers;
import com.oracle.svm.util.ModuleSupport;

import jdk.graal.compiler.api.replacements.SnippetReflectionProvider;
Expand Down Expand Up @@ -697,13 +697,7 @@ public void beforeImageWrite(BeforeImageWriteAccess access) {

// Be explicit here: .metadata file is derived from <final binary name (including
// extension)>
String imageFileName = accessImpl.getImageName();
String extension = accessImpl.getImage().getImageKind().getFilenameSuffix();
if (!imageFileName.endsWith(extension)) {
imageFileName += extension;
}

String metadataFileName = MetadataUtil.metadataFileName(imageFileName);
String metadataFileName = MetadataUtil.metadataFileName(accessImpl.getOutputFilename());
Path metadataPath = destDir.resolve(metadataFileName);

int crc32;
Expand Down

0 comments on commit 338a426

Please sign in to comment.