Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ed3c003
First draft of replay-bundle support
olpaw Nov 29, 2022
e698a91
Add missing copyright header
olpaw Nov 29, 2022
5d7c8ea
Implement path_canonicalizations.json and build.json
olpaw Dec 1, 2022
24b30ea
Ensure driver has access to org.graalvm.util.json
olpaw Dec 1, 2022
051c400
Provide error handling in reply bundle path preparation
olpaw Dec 5, 2022
5cbcb7c
Major replay-bundle refactoring
olpaw Dec 6, 2022
bb43296
Style fixes
olpaw Dec 6, 2022
3e409bc
Rename replay-bundle support to bundle support
olpaw Dec 20, 2022
5b030bd
Add help text for bundle options
olpaw Dec 20, 2022
a6ade3f
Add bundle support for output paths
olpaw Dec 22, 2022
e9a386c
Improve bundle support for output paths
olpaw Jan 11, 2023
a2b00e6
Allow bundle output position to be specified with -o
olpaw Jan 12, 2023
8ff8a9a
Allow support for --bundle-update
olpaw Jan 12, 2023
a40b4c6
Adjust SubstrateOptions.CLibraryPath to new LocatableMultiOptionValue…
olpaw Jan 16, 2023
99d9aca
Streamline bundle option handling
olpaw Jan 16, 2023
cb643a9
Ensure bundleRoot directory layout is always set up correctly
olpaw Jan 16, 2023
350ba77
Console output for bundle operations
olpaw Jan 16, 2023
43449e5
Style fixes
olpaw Jan 16, 2023
20dd552
Do not write bundle output info as relative paths
olpaw Jan 16, 2023
547d21e
No readable-based bailout for output path substitutions
olpaw Jan 16, 2023
0b4dbc2
Prevent accidental bundle-extension duplication
olpaw Jan 17, 2023
3774f2d
Add missing copyright header
olpaw Jan 17, 2023
7720a10
Style fix
olpaw Jan 17, 2023
e5f106f
CheckStyle fix
olpaw Jan 17, 2023
287f888
Only write bundle output if not empty
olpaw Jan 18, 2023
854bcab
Ensure imagePath target is relative in substitutions map
olpaw Jan 18, 2023
b944203
Disallow bundle-use if CWD was implicitly added to classpath
olpaw Jan 18, 2023
904dbba
Fix manifest writing and add bundle properties writing and checking
olpaw Jan 18, 2023
e4e9217
Fix unnecessary boxing of ints
olpaw Jan 18, 2023
1a5de83
If bundle is loaded do not implicitly add CWD to classpath
olpaw Jan 18, 2023
5fb50c1
Warn if bundle platform or graalvmVersion differ
olpaw Jan 18, 2023
cb41754
Fix NativeImageVersion property value
olpaw Jan 18, 2023
a0e96a3
Style fixes
olpaw Jan 18, 2023
dc0a94c
Do not use undefined origin string
olpaw Jan 18, 2023
a28c9ee
Reduce bundle options to --bundle-{create,apply} and allow combining
olpaw Jan 23, 2023
727c94b
Allow subdirectories within /tmp to be captured in bundles
olpaw Jan 24, 2023
cfd883a
Add BundleFileCreationTimestamp to BundleProperties
olpaw Jan 24, 2023
95d7fda
Fold isDirectory-filtering into stream
olpaw Jan 25, 2023
5e2f223
Fix typos
olpaw Jan 25, 2023
95ff820
Add --enable-experimental-bundle-support unlocking option
olpaw Jan 26, 2023
1a39de0
Resolve class path with base name + asterisk early
olpaw Jan 26, 2023
c5db297
Restore asterisk expansion in ImageClasspath property of macro options
olpaw Jan 26, 2023
353c12e
Avoid spaces in JSON output
olpaw Jan 30, 2023
4fbec8c
Follow naming conventions of static final fields
olpaw Jan 30, 2023
154966b
Simplify newline before bundle output info
olpaw Jan 30, 2023
de68a51
Use enhanced switch in substituteAuxiliaryPath
olpaw Jan 30, 2023
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
2 changes: 1 addition & 1 deletion compiler/mx.compiler/suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -2039,7 +2039,7 @@
"org.graalvm.compiler.truffle.jfr to jdk.internal.vm.compiler.truffle.jfr",
"org.graalvm.libgraal to jdk.internal.vm.compiler.management",
"org.graalvm.util to jdk.internal.vm.compiler.management",
"org.graalvm.util.json to org.graalvm.nativeimage.librarysupport,org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure",
"org.graalvm.util.json to org.graalvm.nativeimage.librarysupport,org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure,org.graalvm.nativeimage.driver",
],
"uses" : [
"com.oracle.truffle.api.impl.TruffleLocator",
Expand Down
2 changes: 1 addition & 1 deletion substratevm/mx.substratevm/mx_substratevm.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def query_native_image(all_args, option):
stdoutdata = []
def stdout_collector(x):
stdoutdata.append(x.rstrip())
_native_image(['--dry-run'] + all_args, out=stdout_collector)
_native_image(['--dry-run', '--verbose'] + all_args, out=stdout_collector)

def remove_quotes(val):
if len(val) >= 2 and val.startswith("'") and val.endswith("'"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@

public final class LocatableOption {

final String name;
final String origin;
public final String name;
public final String origin;

static LocatableOption from(String rawOptionName) {
public static LocatableOption from(String rawOptionName) {
return new LocatableOption(rawOptionName);
}

Expand All @@ -54,6 +54,10 @@ public String toString() {
return result + " from '" + origin + "'";
}

public String rawName() {
return origin == null ? name : name + '@' + origin;
}

private static final class LocatableOptionValue {
private final Object value;
private final String origin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
package com.oracle.svm.common.option;

import java.util.List;
import java.util.Optional;

public interface MultiOptionValue<T> {

Expand All @@ -38,6 +39,8 @@ public interface MultiOptionValue<T> {
*/
List<T> values();

Optional<T> lastValue();

void valueUpdate(Object value);

MultiOptionValue<T> createCopy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@
public class FallbackExecutor {
public static class Options {
@Option(help = "Internal option used to specify system properties for FallbackExecutor.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorSystemProperty = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorSystemProperty = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());
@Option(help = "Internal option used to specify MainClass for FallbackExecutor.")//
public static final HostedOptionKey<String> FallbackExecutorMainClass = new HostedOptionKey<>(null);
@Option(help = "Internal option used to specify Classpath for FallbackExecutor.")//
public static final HostedOptionKey<String> FallbackExecutorClasspath = new HostedOptionKey<>(null);
@Option(help = "Internal option used to specify java arguments for FallbackExecutor.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorJavaArg = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorJavaArg = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());
@Option(help = "Internal option used to specify runtime java arguments for FallbackExecutor.")//
public static final RuntimeOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorRuntimeJavaArg = new RuntimeOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final RuntimeOptionKey<LocatableMultiOptionValue.Strings> FallbackExecutorRuntimeJavaArg = new RuntimeOptionKey<>(LocatableMultiOptionValue.Strings.build());
}

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public static class Options {
@APIOption(name = {"-da", "-disableassertions"}, valueSeparator = VALUE_SEPARATOR, valueTransformer = RuntimeAssertionsOptionTransformer.Disable.class, defaultValue = "", //
customHelp = "also -da[:[packagename]...|:classname] or -disableassertions[:[packagename]...|:classname]. Disable assertions with specified granularity.")//
@Option(help = "Enable or disable Java assert statements at run time") //
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> RuntimeAssertions = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> RuntimeAssertions = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());

@APIOption(name = {"-esa", "-enablesystemassertions"}, customHelp = "also -enablesystemassertions. Enables assertions in all system classes.") //
@APIOption(name = {"-dsa", "-disablesystemassertions"}, kind = APIOption.APIOptionKind.Negated, customHelp = "also -disablesystemassertions. Disables assertions in all system classes.") //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
import com.oracle.svm.core.heap.ReferenceHandler;
import com.oracle.svm.core.option.APIOption;
import com.oracle.svm.core.option.APIOptionGroup;
import com.oracle.svm.core.option.BundleMember;
import com.oracle.svm.core.option.HostedOptionKey;
import com.oracle.svm.core.option.HostedOptionValues;
import com.oracle.svm.core.option.LocatableMultiOptionValue;
Expand All @@ -81,7 +82,7 @@ public class SubstrateOptions {
@Option(help = "Preserve the local variable information for every Java source line to allow line-by-line stepping in the debugger. Allow the lookup of Java-level method information, e.g., in stack traces.")//
public static final HostedOptionKey<Boolean> SourceLevelDebug = new HostedOptionKey<>(false);
@Option(help = "Constrain debug info generation to the comma-separated list of package prefixes given to this option.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> SourceLevelDebugFilter = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> SourceLevelDebugFilter = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

public static boolean parseOnce() {
/*
Expand Down Expand Up @@ -271,10 +272,11 @@ public static void setDebugInfoValueUpdateHandler(ValueUpdateHandler<Integer> up
public static final HostedOptionKey<Boolean> IncludeNodeSourcePositions = new HostedOptionKey<>(false);

@Option(help = "Search path for C libraries passed to the linker (list of comma-separated directories)")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> CLibraryPath = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
@BundleMember(role = BundleMember.Role.Input)//
public static final HostedOptionKey<LocatableMultiOptionValue.Paths> CLibraryPath = new HostedOptionKey<>(LocatableMultiOptionValue.Paths.buildWithCommaDelimiter());

@Option(help = "Path passed to the linker as the -rpath (list of comma-separated directories)")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> LinkerRPath = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> LinkerRPath = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

@Option(help = "Directory of the image file to be generated", type = OptionType.User)//
public static final HostedOptionKey<String> Path = new HostedOptionKey<>(null);
Expand Down Expand Up @@ -346,11 +348,11 @@ protected void onValueUpdate(EconomicMap<OptionKey<?>, Object> values, Boolean o

@APIOption(name = "trace-class-initialization")//
@Option(help = "Comma-separated list of fully-qualified class names that class initialization is traced for.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> TraceClassInitialization = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> TraceClassInitialization = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

@APIOption(name = "trace-object-instantiation")//
@Option(help = "Comma-separated list of fully-qualified class names that object instantiation is traced for.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> TraceObjectInstantiation = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> TraceObjectInstantiation = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

@Option(help = "Trace all native tool invocations as part of image building", type = User)//
public static final HostedOptionKey<Boolean> TraceNativeToolUsage = new HostedOptionKey<>(false);
Expand All @@ -365,10 +367,10 @@ protected void onValueUpdate(EconomicMap<OptionKey<?>, Object> values, Boolean o
@APIOption(name = "enable-https", fixedValue = "https", customHelp = "enable https support in the generated image")//
@APIOption(name = "enable-url-protocols")//
@Option(help = "List of comma separated URL protocols to enable.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> EnableURLProtocols = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> EnableURLProtocols = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

@Option(help = "List of comma separated URL protocols that must never be included.")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> DisableURLProtocols = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> DisableURLProtocols = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter());

@SuppressWarnings("unused") //
@APIOption(name = "enable-all-security-services")//
Expand Down Expand Up @@ -417,10 +419,11 @@ protected void onValueUpdate(EconomicMap<OptionKey<?>, Object> values, Boolean o
@Option(help = "Print GC warnings as part of build output", type = OptionType.User)//
public static final HostedOptionKey<Boolean> BuildOutputGCWarnings = new HostedOptionKey<>(true);

@BundleMember(role = BundleMember.Role.Output)//
@Option(help = "Print build output statistics as JSON to the specified file. " +
"The output conforms to the JSON schema located at: " +
"docs/reference-manual/native-image/assets/build-output-schema-v0.9.1.json", type = OptionType.User)//
public static final HostedOptionKey<String> BuildOutputJSONFile = new HostedOptionKey<>("");
public static final HostedOptionKey<LocatableMultiOptionValue.Paths> BuildOutputJSONFile = new HostedOptionKey<>(LocatableMultiOptionValue.Paths.build());

/*
* Object and array allocation options.
Expand Down Expand Up @@ -485,7 +488,7 @@ public static long getTearDownFailureNanos() {
public static final HostedOptionKey<Boolean> AOTTrivialInline = new HostedOptionKey<>(true);

@Option(help = "file:doc-files/NeverInlineHelp.txt", type = OptionType.Debug)//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> NeverInline = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> NeverInline = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());

@Option(help = "Maximum number of nodes in a method so that it is considered trivial.")//
public static final HostedOptionKey<Integer> MaxNodesInTrivialMethod = new HostedOptionKey<>(20);
Expand All @@ -506,7 +509,7 @@ public static long getTearDownFailureNanos() {
public static final HostedOptionKey<Boolean> UseCompressedFrameEncodings = new HostedOptionKey<>(true);

@Option(help = "Report error if <typename>[:<UsageKind>{,<UsageKind>}] is discovered during analysis (valid values for UsageKind: InHeap, Allocated, Reachable).", type = OptionType.Debug)//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> ReportAnalysisForbiddenType = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> ReportAnalysisForbiddenType = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());

@Option(help = "Backend used by the compiler", type = OptionType.User)//
public static final HostedOptionKey<String> CompilerBackend = new HostedOptionKey<>("lir") {
Expand Down Expand Up @@ -573,7 +576,7 @@ public static boolean useLIRBackend() {
public static final HostedOptionKey<String> CCompilerPath = new HostedOptionKey<>(null);
@APIOption(name = "native-compiler-options")//
@Option(help = "Provide custom C compiler option used for query code compilation.", type = OptionType.User)//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> CCompilerOption = new HostedOptionKey<>(new LocatableMultiOptionValue.Strings());
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> CCompilerOption = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.build());

@Option(help = "Use strict checks when performing query code compilation.", type = OptionType.User)//
public static final HostedOptionKey<Boolean> StrictQueryCodeCompilation = new HostedOptionKey<>(true);
Expand Down Expand Up @@ -635,7 +638,7 @@ public static void defaultDebugInfoValueUpdateHandler(EconomicMap<OptionKey<?>,
}

@Option(help = "Search path for source files for Application or GraalVM classes (list of comma-separated directories or jar files)")//
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> DebugInfoSourceSearchPath = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated());
public static final HostedOptionKey<LocatableMultiOptionValue.Paths> DebugInfoSourceSearchPath = new HostedOptionKey<>(LocatableMultiOptionValue.Paths.buildWithCommaDelimiter());

@Option(help = "Directory under which to create source file cache for Application or GraalVM classes")//
public static final HostedOptionKey<String> DebugInfoSourceCacheRoot = new HostedOptionKey<>("sources");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public final class VMInspectionOptions {
@APIOption(name = ENABLE_MONITORING_OPTION, defaultValue = MONITORING_DEFAULT_NAME) //
@Option(help = "Enable monitoring features that allow the VM to be inspected at run time. Comma-separated list can contain " + MONITORING_ALLOWED_VALUES + ". " +
"For example: `--" + ENABLE_MONITORING_OPTION + "=" + MONITORING_HEAPDUMP_NAME + "," + MONITORING_JFR_NAME + "`.", type = OptionType.User) //
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> EnableMonitoringFeatures = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.commaSeparated(),
public static final HostedOptionKey<LocatableMultiOptionValue.Strings> EnableMonitoringFeatures = new HostedOptionKey<>(LocatableMultiOptionValue.Strings.buildWithCommaDelimiter(),
VMInspectionOptions::validateEnableMonitoringFeatures);

public static void validateEnableMonitoringFeatures(@SuppressWarnings("unused") OptionKey<?> optionKey) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,8 @@ static class MainHeaderResolver implements HeaderResolver {
@Override
public HeaderSearchResult resolveHeader(String projectName, String headerFile) {
List<String> locations = new ArrayList<>();
for (String clibPathComponent : SubstrateOptions.CLibraryPath.getValue().values()) {
Path clibPathHeaderFile = Paths.get(clibPathComponent).resolve(headerFile).normalize().toAbsolutePath();
for (Path clibPathComponent : SubstrateOptions.CLibraryPath.getValue().values()) {
Path clibPathHeaderFile = clibPathComponent.resolve(headerFile).normalize().toAbsolutePath();
locations.add(clibPathHeaderFile.toString());
if (Files.exists(clibPathHeaderFile)) {
return new HeaderSearchResult(Optional.of("\"" + clibPathHeaderFile + "\""), locations);
Expand Down
Loading