Skip to content

Commit ba84641

Browse files
committed
[GR-65282] Remove bogus main class detection for NATIVE_IMAGE_OPTIONS.
PullRequest: graal/20949
2 parents d8b2c34 + d7f94be commit ba84641

File tree

4 files changed

+25
-85
lines changed

4 files changed

+25
-85
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -804,9 +804,6 @@ public static boolean hasColorsEnabled(OptionValues values) {
804804

805805
public static final String NATIVE_IMAGE_OPTIONS_ENV_VAR = "NATIVE_IMAGE_OPTIONS";
806806

807-
@Option(help = "Internal option to forward the value of " + NATIVE_IMAGE_OPTIONS_ENV_VAR)//
808-
public static final HostedOptionKey<String> BuildOutputNativeImageOptionsEnvVarValue = new HostedOptionKey<>(null);
809-
810807
public static final String BUILD_MEMORY_USAGE_REASON_TEXT_PROPERTY = "svm.build.memoryUsageReasonText";
811808

812809
/*

substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImage.java

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ private static <T> String oR(OptionKey<T> option) {
290290
final String oHCLibraryPath = oH(SubstrateOptions.CLibraryPath);
291291
final String oHFallbackThreshold = oH(SubstrateOptions.FallbackThreshold);
292292
final String oHFallbackExecutorJavaArg = oH(FallbackExecutor.Options.FallbackExecutorJavaArg);
293-
final String oHNativeImageOptionsEnvVar = oH(SubstrateOptions.BuildOutputNativeImageOptionsEnvVarValue, OptionOrigin.originDriver);
294293
final String oRRuntimeJavaArg = oR(Options.FallbackExecutorRuntimeJavaArg);
295294
final String oHTraceClassInitialization = oH(SubstrateOptions.TraceClassInitialization);
296295
final String oHTraceObjectInstantiation = oH(SubstrateOptions.TraceObjectInstantiation);
@@ -948,29 +947,35 @@ protected void registerOptionHandler(OptionHandler<? extends NativeImage> handle
948947
optionHandlers.add(handler);
949948
}
950949

950+
private List<String> defaultNativeImageArgs = null;
951+
951952
private List<String> getDefaultNativeImageArgs() {
952-
List<String> defaultNativeImageArgs = new ArrayList<>();
953-
String propertyOptions = userConfigProperties.get("NativeImageArgs");
954-
if (propertyOptions != null) {
955-
Collections.addAll(defaultNativeImageArgs, propertyOptions.split(" +"));
956-
}
957-
final String envVarName = SubstrateOptions.NATIVE_IMAGE_OPTIONS_ENV_VAR;
958-
String nativeImageOptionsValue = System.getenv(envVarName);
959-
if (nativeImageOptionsValue != null) {
960-
defaultNativeImageArgs.addAll(JDKArgsUtils.parseArgsFromEnvVar(nativeImageOptionsValue, envVarName, msg -> showError(msg)));
961-
}
962-
if (!defaultNativeImageArgs.isEmpty()) {
963-
String buildApplyOptionName = BundleSupport.BundleOptionVariants.apply.optionName();
964-
if (config.getBuildArgs().stream().noneMatch(arg -> arg.startsWith(buildApplyOptionName + "="))) {
965-
if (nativeImageOptionsValue != null) {
966-
addPlainImageBuilderArg(oHNativeImageOptionsEnvVar + nativeImageOptionsValue);
953+
if (defaultNativeImageArgs == null) {
954+
List<String> args = new ArrayList<>();
955+
String propertyOptions = userConfigProperties.get("NativeImageArgs");
956+
if (propertyOptions != null) {
957+
Collections.addAll(args, propertyOptions.split(" +"));
958+
}
959+
final String envVarName = SubstrateOptions.NATIVE_IMAGE_OPTIONS_ENV_VAR;
960+
String nativeImageOptionsValue = System.getenv(envVarName);
961+
if (nativeImageOptionsValue != null) {
962+
args.addAll(JDKArgsUtils.parseArgsFromEnvVar(nativeImageOptionsValue, envVarName, msg -> showError(msg)));
963+
}
964+
if (!args.isEmpty()) {
965+
String buildApplyOptionName = BundleSupport.BundleOptionVariants.apply.optionName();
966+
if (config.getBuildArgs().stream().noneMatch(arg -> arg.startsWith(buildApplyOptionName + "="))) {
967+
if (nativeImageOptionsValue != null) {
968+
LogUtils.info("Picked up " + envVarName, nativeImageOptionsValue);
969+
}
970+
defaultNativeImageArgs = List.copyOf(args);
971+
} else {
972+
LogUtils.warning("Option '" + buildApplyOptionName + "' in use. Ignoring environment variables " + envVarName + " and " + NativeImage.CONFIG_FILE_ENV_VAR_KEY + ".");
967973
}
968-
return List.copyOf(defaultNativeImageArgs);
969974
} else {
970-
LogUtils.warning("Option '" + buildApplyOptionName + "' in use. Ignoring environment variables " + envVarName + " and " + NativeImage.CONFIG_FILE_ENV_VAR_KEY + ".");
975+
defaultNativeImageArgs = List.of();
971976
}
972977
}
973-
return List.of();
978+
return defaultNativeImageArgs;
974979
}
975980

976981
static void ensureDirectoryExists(Path dir) {

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

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@
5252
import java.util.stream.Collectors;
5353
import java.util.stream.Stream;
5454

55-
import com.oracle.graal.pointsto.meta.AnalysisElement;
5655
import org.graalvm.nativeimage.ImageSingletons;
5756
import org.graalvm.nativeimage.hosted.Feature;
5857
import org.graalvm.nativeimage.impl.ImageSingletonsSupport;
5958

59+
import com.oracle.graal.pointsto.meta.AnalysisElement;
6060
import com.oracle.graal.pointsto.meta.AnalysisField;
6161
import com.oracle.graal.pointsto.meta.AnalysisMethod;
6262
import com.oracle.graal.pointsto.meta.AnalysisType;
@@ -85,7 +85,6 @@
8585
import com.oracle.svm.core.option.RuntimeOptionKey;
8686
import com.oracle.svm.core.option.SubstrateOptionsParser;
8787
import com.oracle.svm.core.util.TimeUtils;
88-
import com.oracle.svm.core.util.UserError;
8988
import com.oracle.svm.core.util.VMError;
9089
import com.oracle.svm.hosted.ProgressReporterFeature.UserRecommendation;
9190
import com.oracle.svm.hosted.ProgressReporterJsonHelper.AnalysisResults;
@@ -99,7 +98,6 @@
9998
import com.oracle.svm.hosted.reflect.ReflectionHostedSupport;
10099
import com.oracle.svm.hosted.util.CPUType;
101100
import com.oracle.svm.hosted.util.DiagnosticUtils;
102-
import com.oracle.svm.hosted.util.JDKArgsUtils;
103101
import com.oracle.svm.hosted.util.VMErrorReporter;
104102
import com.oracle.svm.util.ImageBuildStatistics;
105103
import com.sun.management.OperatingSystemMXBean;
@@ -260,7 +258,6 @@ public void printInitializeEnd(List<Feature> features, ImageClassLoader classLoa
260258

261259
printFeatures(features);
262260
printExperimentalOptions(classLoader);
263-
printEnvironmentVariableOptions();
264261
printResourceInfo();
265262
}
266263

@@ -409,17 +406,6 @@ private static boolean isStableOrInternalOrigin(OptionOrigin origin) {
409406
return origin.isStable() || origin.isInternal();
410407
}
411408

412-
private void printEnvironmentVariableOptions() {
413-
String envVarValue = SubstrateOptions.BuildOutputNativeImageOptionsEnvVarValue.getValue();
414-
if (envVarValue != null && !envVarValue.isEmpty()) {
415-
l().printLineSeparator();
416-
l().yellowBold().a(" ").doclink("Picked up " + SubstrateOptions.NATIVE_IMAGE_OPTIONS_ENV_VAR, "#glossary-picked-up-ni-options").reset().a(":").println();
417-
for (String arg : JDKArgsUtils.parseArgsFromEnvVar(envVarValue, SubstrateOptions.NATIVE_IMAGE_OPTIONS_ENV_VAR, UserError::abort)) {
418-
l().a(" - '%s'", arg).println();
419-
}
420-
}
421-
}
422-
423409
private void printResourceInfo() {
424410
Runtime runtime = Runtime.getRuntime();
425411
long maxMemory = runtime.maxMemory();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/JDKArgsUtils.java

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -67,32 +67,13 @@ public static List<String> parseArgsFromEnvVar(String envVarValue, String envVar
6767
boolean isArgFileOption = argument.startsWith("@") && !argument.startsWith("@@");
6868
if (isArgFileOption || isTerminalOpt(argument)) {
6969
throw errorFunction.apply("Option '" + argument + "' is not allowed in environment variable " + envVarName);
70-
} else if (!isExpectingNoDashArg(argument, result)) {
71-
throw errorFunction.apply("Cannot specify main class in environment variable " + envVarName);
7270
}
7371
result.add(argument);
7472
assert i >= envVarValueLength || isspace(envVarValue.charAt(i));
7573
}
7674
return result;
7775
}
7876

79-
private static boolean isExpectingNoDashArg(String argument, List<String> previousArgs) {
80-
if (argument.startsWith("-")) {
81-
return true; // Ignore dash args
82-
}
83-
if (previousArgs.isEmpty()) {
84-
return false; // No previous arg means the no-dash arg is unexpected
85-
}
86-
String previousArg = previousArgs.getLast();
87-
// Derivation from port: unpack any flags for JVM running the image generator
88-
previousArg = previousArg.startsWith("-J") ? previousArg.substring(2) : previousArg;
89-
boolean expectingNoDashArg = isWhiteSpaceOption(previousArg);
90-
if ("-jar".equals(previousArg) || "--module".equals(previousArg) || "-m".equals(previousArg)) {
91-
expectingNoDashArg = false;
92-
}
93-
return expectingNoDashArg;
94-
}
95-
9677
public static boolean isspace(char value) {
9778
// \v not supported in Java
9879
return value == ' ' || value == '\f' || value == '\n' || value == '\r' || value == '\t';
@@ -109,33 +90,4 @@ private static boolean isTerminalOpt(String arg) {
10990
default -> arg.startsWith("--module=");
11091
};
11192
}
112-
113-
private static boolean isWhiteSpaceOption(String name) {
114-
return isModuleOption(name) || isLauncherOption(name);
115-
}
116-
117-
private static boolean isModuleOption(String name) {
118-
return switch (name) {
119-
case "--module-path", "-p", "--upgrade-module-path", "--add-modules", "--enable-native-access", "--limit-modules", "--add-exports", "--add-opens", "--add-reads", "--patch-module" -> true;
120-
default -> false;
121-
};
122-
}
123-
124-
private static boolean isLauncherOption(String name) {
125-
return isClassPathOption(name) ||
126-
isLauncherMainOption(name) ||
127-
"--describe-module".equals(name) ||
128-
"-d".equals(name) ||
129-
"--source".equals(name);
130-
}
131-
132-
private static boolean isClassPathOption(String name) {
133-
return "-classpath".equals(name) ||
134-
"-cp".equals(name) ||
135-
"--class-path".equals(name);
136-
}
137-
138-
private static boolean isLauncherMainOption(String name) {
139-
return "--module".equals(name) || "-m".equals(name);
140-
}
14193
}

0 commit comments

Comments
 (0)