diff --git a/substratevm/mx.substratevm/mx_substratevm.py b/substratevm/mx.substratevm/mx_substratevm.py index cc551793ed9e..9544f42ced7f 100644 --- a/substratevm/mx.substratevm/mx_substratevm.py +++ b/substratevm/mx.substratevm/mx_substratevm.py @@ -351,23 +351,29 @@ def _native_image(args, **kwargs): 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) + def remove_quotes(val): if len(val) >= 2 and val.startswith("'") and val.endswith("'"): return val[1:-1].replace("\\'", "'") else: return val - out = mx.LinesOutputCapture() - _native_image(['--dry-run'] + all_args, out=out) - for line in out.lines: + for line in stdoutdata: arg = remove_quotes(line.rstrip('\\').strip()) _, sep, after = arg.partition(option) if sep: return after.split(' ')[0].rstrip() return None + server_use = set() def native_image_func(args, **kwargs): all_args = base_args + common_args + args + if '--experimental-build-server' in all_args: + server_use.add(True) path = query_native_image(all_args, '-H:Path=') name = query_native_image(all_args, '-H:Name=') image = join(path, name) @@ -380,7 +386,7 @@ def native_image_func(args, **kwargs): _native_image(['--server-wipe']) yield native_image_func finally: - if exists(native_image_cmd) and has_server: + if exists(native_image_cmd) and has_server and server_use: def timestr(): return time.strftime('%d %b %Y %H:%M:%S') + ' - ' mx.log(timestr() + 'Shutting down image build servers for ' + native_image_cmd) diff --git a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt index 875667c6ba7f..4a4068054c6b 100644 --- a/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt +++ b/substratevm/src/com.oracle.svm.driver/resources/HelpExtra.txt @@ -17,3 +17,6 @@ Non-standard options help: -V= provide values for placeholders in native-image.properties files + --help-experimental-build-server + displays help for experimental image-build server use + diff --git a/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt b/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt index 370257a12160..33c540fc3a01 100644 --- a/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt +++ b/substratevm/src/com.oracle.svm.driver/resources/HelpServer.txt @@ -1,16 +1,18 @@ Server options help: - --no-server do not use image-build server + --no-server do not use experimental image-build server (default) + --experimental-build-server + use experimental image-build server - --server-list lists current image-build servers + --server-list lists current experimental image-build servers --server-list-details same as -server-list with more details - --server-cleanup remove stale image-build servers entries - --server-shutdown shutdown image-build servers under current session ID - --server-shutdown-all shutdown all image-build servers + --server-cleanup remove stale experimental image-build servers entries + --server-shutdown shutdown experimental image-build servers under current session ID + --server-shutdown-all shutdown all experimental image-build servers --server-session= use custom session name instead of system provided session ID of the calling process - --verbose-server enable verbose output for image-build server handling + --verbose-server enable verbose output for experimental image-build server handling \ No newline at end of file diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java index 4b3af1eede43..9b39b4d3ecfc 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/NativeImageServer.java @@ -76,7 +76,7 @@ final class NativeImageServer extends NativeImage { private static final String pKeyMaxServers = "MaxServers"; private static final String machineProperties = "machine.properties"; - private boolean useServer = true; + private boolean useServer = false; private boolean verboseServer = false; private String sessionName = null; @@ -810,7 +810,9 @@ boolean useServer() { @Override protected void setDryRun(boolean val) { super.setDryRun(val); - useServer = !val; + if (val) { + useServer = false; + } } void setVerboseServer(boolean val) { diff --git a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java index fd585ca6aac6..e909ef643bc0 100644 --- a/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java +++ b/substratevm/src/com.oracle.svm.driver/src/com/oracle/svm/driver/ServerOptionHandler.java @@ -27,11 +27,10 @@ import java.util.List; import java.util.Queue; -import com.oracle.svm.driver.MacroOption.MacroOptionKind; - class ServerOptionHandler extends NativeImage.OptionHandler { private static final String helpTextServer = NativeImage.getResource("/HelpServer.txt"); + private static final String enableServerOption = "--experimental-build-server"; ServerOptionHandler(NativeImageServer nativeImage) { super(nativeImage); @@ -41,11 +40,9 @@ class ServerOptionHandler extends NativeImage.OptionHandler { public boolean consume(Queue args) { String headArg = args.peek(); switch (headArg) { - case "--help-extra": + case "--help-experimental-build-server": args.poll(); - nativeImage.showMessage(DefaultOptionHandler.helpExtraText); nativeImage.showMessage(helpTextServer); - nativeImage.optionRegistry.showOptions(MacroOptionKind.Macro, true, nativeImage::showMessage); nativeImage.showNewline(); System.exit(0); return true; @@ -53,6 +50,12 @@ public boolean consume(Queue args) { args.poll(); nativeImage.setUseServer(false); return true; + case enableServerOption: + args.poll(); + if (!nativeImage.isDryRun()) { + nativeImage.setUseServer(true); + } + return true; case DefaultOptionHandler.verboseServerOption: args.poll(); nativeImage.setVerboseServer(true);