From 4ca86ec6b7b7cd9f6202812e99359dc7160f559b Mon Sep 17 00:00:00 2001 From: Rob Greene Date: Mon, 25 Aug 2025 19:58:23 -0500 Subject: [PATCH] Adding GraalVM native-image to 'ac' and 'acx'. --- app/cli-ac/build.gradle | 18 + .../META-INF/native-image/jni-config.json | 6 + .../predefined-classes-config.json | 8 + .../META-INF/native-image/proxy-config.json | 2 + .../META-INF/native-image/reflect-config.json | 6 + .../native-image/resource-config.json | 12 + .../native-image/serialization-config.json | 8 + app/cli-acx/build.gradle | 20 + .../net.sf.applecommander/acdasm/README.md | 12 + .../acdasm/jni-config.json | 6 + .../acdasm/predefined-classes-config.json | 8 + .../acdasm/proxy-config.json | 2 + .../acdasm/reflect-config.json | 403 ++++++++++++++++++ .../acdasm/resource-config.json | 31 ++ .../acdasm/serialization-config.json | 8 + build.gradle | 4 +- dev.sh | 8 +- .../ac-api/resource-config.json | 44 ++ 18 files changed, 602 insertions(+), 4 deletions(-) create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/jni-config.json create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/predefined-classes-config.json create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/proxy-config.json create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/reflect-config.json create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/resource-config.json create mode 100644 app/cli-ac/src/main/resources/META-INF/native-image/serialization-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/README.md create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/jni-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/predefined-classes-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/proxy-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/reflect-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/resource-config.json create mode 100644 app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/serialization-config.json create mode 100644 lib/ac-api/src/main/resources/META-INF/native-image/org.applecommander/ac-api/resource-config.json diff --git a/app/cli-ac/build.gradle b/app/cli-ac/build.gradle index bf8ae0f4..38dbd1f2 100644 --- a/app/cli-ac/build.gradle +++ b/app/cli-ac/build.gradle @@ -1,6 +1,7 @@ plugins { id 'org.springframework.boot' version "$springBoot" id 'application' + id 'org.graalvm.buildtools.native' version "$graalvmBuildVersion" } java { @@ -33,6 +34,13 @@ application { mainClass = 'com.webcodepro.applecommander.ui.ac' } +jar { + manifest { + attributes 'Implementation-Title': "AppleCommander 'ac'", + 'Implementation-Version': archiveVersion + } +} + bootJar { archiveBaseName = 'AppleCommander' archiveAppendix = 'ac' @@ -42,3 +50,13 @@ bootJar { } from('../../LICENSE') } + +graalvmNative { + String osName = System.getProperty('os.name').toLowerCase().split()[0] + String osArch = System.getProperty('os.arch').toLowerCase().split()[0] + binaries { + named("main") { + imageName.set("ac-${osName}-${osArch}-${project.version}") + } + } +} diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/jni-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/jni-config.json new file mode 100644 index 00000000..8b4e4170 --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/jni-config.json @@ -0,0 +1,6 @@ +[ +{ + "name":"java.lang.Boolean", + "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }] +} +] diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/predefined-classes-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/predefined-classes-config.json new file mode 100644 index 00000000..0e79b2c5 --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/predefined-classes-config.json @@ -0,0 +1,8 @@ +[ + { + "type":"agent-extracted", + "classes":[ + ] + } +] + diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/proxy-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/proxy-config.json new file mode 100644 index 00000000..0d4f101c --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/proxy-config.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/reflect-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/reflect-config.json new file mode 100644 index 00000000..e241b543 --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/reflect-config.json @@ -0,0 +1,6 @@ +[ +{ + "name":"com.webcodepro.applecommander.ui.ac", + "methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }] +} +] diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/resource-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/resource-config.json new file mode 100644 index 00000000..399e7769 --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/resource-config.json @@ -0,0 +1,12 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\QMETA-INF/services/java.net.spi.URLStreamHandlerProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/java.util.spi.ResourceBundleControlProvider\\E" + }]}, + "bundles":[{ + "name":"com.webcodepro.applecommander.ui.UiBundle", + "locales":[""] + }] +} diff --git a/app/cli-ac/src/main/resources/META-INF/native-image/serialization-config.json b/app/cli-ac/src/main/resources/META-INF/native-image/serialization-config.json new file mode 100644 index 00000000..f3d7e06e --- /dev/null +++ b/app/cli-ac/src/main/resources/META-INF/native-image/serialization-config.json @@ -0,0 +1,8 @@ +{ + "types":[ + ], + "lambdaCapturingTypes":[ + ], + "proxies":[ + ] +} diff --git a/app/cli-acx/build.gradle b/app/cli-acx/build.gradle index f7998947..06fa5bce 100644 --- a/app/cli-acx/build.gradle +++ b/app/cli-acx/build.gradle @@ -2,6 +2,7 @@ plugins { id 'org.springframework.boot' version "$springBoot" id 'java' id 'application' + id 'org.graalvm.buildtools.native' version "$graalvmBuildVersion" } java { @@ -22,6 +23,8 @@ dependencies { implementation "net.sf.applecommander:acdasm:$acdasmVersion" implementation "com.google.code.gson:gson:$gsonVersion" + annotationProcessor "info.picocli:picocli-codegen:$picocliVersion" + testImplementation platform("org.junit:junit-bom:$junitVersion") testImplementation 'org.junit.jupiter:junit-jupiter' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' @@ -35,6 +38,13 @@ application { mainClass = 'io.github.applecommander.acx.Main' } +jar { + manifest { + attributes 'Implementation-Title': "AppleCommander 'acx'", + 'Implementation-Version': archiveVersion + } +} + bootJar { archiveBaseName = 'AppleCommander' archiveAppendix = 'acx' @@ -44,3 +54,13 @@ bootJar { } from('../../LICENSE') } + +graalvmNative { + String osName = System.getProperty('os.name').toLowerCase().split()[0] + String osArch = System.getProperty('os.arch').toLowerCase().split()[0] + binaries { + named("main") { + imageName.set("acx-${osName}-${osArch}-${project.version}") + } + } +} diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/README.md b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/README.md new file mode 100644 index 00000000..e86f268e --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/README.md @@ -0,0 +1,12 @@ +# README + +These files were generated for the AppleCommander disassembler and it's usage within 'acx'. Hypothetically, once +the disassembler project gets updated for GraalVM native image capabilities, these files can be removed. + +Generation command: + +```shell +$ java -agentlib:native-image-agent=config-merge-dir=app/cli-acx/src/main/resources/META-INF/native-image \ + -jar app/cli-acx/build/libs/AppleCommander-acx-12.0-SNAPSHOT.jar \ + dump -d deleteme.po -b 0 --disassembly +``` diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/jni-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/jni-config.json new file mode 100644 index 00000000..8b4e4170 --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/jni-config.json @@ -0,0 +1,6 @@ +[ +{ + "name":"java.lang.Boolean", + "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }] +} +] diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/predefined-classes-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/predefined-classes-config.json new file mode 100644 index 00000000..0e79b2c5 --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/predefined-classes-config.json @@ -0,0 +1,8 @@ +[ + { + "type":"agent-extracted", + "classes":[ + ] + } +] + diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/proxy-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/proxy-config.json new file mode 100644 index 00000000..0d4f101c --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/proxy-config.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/reflect-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/reflect-config.json new file mode 100644 index 00000000..e0129e58 --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/reflect-config.json @@ -0,0 +1,403 @@ +[ +{ + "name":"groovy.lang.Closure" +}, +{ + "name":"io.github.applecommander.acx.Main", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }] +}, +{ + "name":"io.github.applecommander.acx.VersionProvider", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.arggroup.CoordinateSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.arggroup.CoordinateSelection$BlockCoordinateSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.arggroup.CoordinateSelection$SectorCoordinateSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.base.ReadOnlyDiskImageCommandOptions", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.base.ReadWriteDiskCommandOptions", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.base.ReadWriteDiskCommandWithGlobOptions", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.base.ReusableCommandOptions", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.CompareCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.CompareCommand$StrategySelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ConvertCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.CopyFileCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.CreateDiskCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.CreateDiskCommand$OrderSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.CreateDiskCommand$SystemSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DeleteCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DiskMapCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$BlockRangeSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$CoordinateRangeSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$DisassemblerOptions", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$DisassemblerOptions$InstructionSetSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$Options", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$OutputSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"selectDisassembly","parameterTypes":["boolean"] }] +}, +{ + "name":"io.github.applecommander.acx.command.DumpCommand$TrackSectorRangeSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ExportCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.ExportCommand$FileExtractMethods", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.FindDuplicateFilesCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ImportCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.ImportCommand$InputData", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ImportCommand$Overrides", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ImportCommand$Processor", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.InfoCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ListCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.ListCommand$FileDisplay", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ListCommand$OutputType", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ListCommand$TypeOfFileSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.LockCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.MkdirCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ReadCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.ReadCommand$OutputSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.RenameDiskCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.RenameFileCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.RmdirCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.ScanCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.UnlockCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.command.WriteCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.command.WriteCommand$InputSelection", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.github.applecommander.acx.converter.DataSizeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.converter.DiskConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.converter.ExportMethodConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.converter.ExportMethodConverter$ExportMethodCandidates", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.converter.IntegerTypeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.github.applecommander.acx.converter.RangeTypeConverter", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"java.lang.Object", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"java.lang.Runtime", + "methods":[{"name":"version","parameterTypes":[] }] +}, +{ + "name":"java.lang.Runtime$Version", + "methods":[{"name":"major","parameterTypes":[] }] +}, +{ + "name":"java.nio.file.Path" +}, +{ + "name":"java.nio.file.Paths", + "methods":[{"name":"get","parameterTypes":["java.lang.String","java.lang.String[]"] }] +}, +{ + "name":"java.sql.Connection" +}, +{ + "name":"java.sql.Driver" +}, +{ + "name":"java.sql.DriverManager", + "methods":[{"name":"getConnection","parameterTypes":["java.lang.String"] }, {"name":"getDriver","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"java.sql.Time", + "methods":[{"name":"","parameterTypes":["long"] }] +}, +{ + "name":"java.sql.Timestamp", + "methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"java.time.Duration", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.Instant", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.LocalDate", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.LocalDateTime", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.LocalTime", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.MonthDay", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.OffsetDateTime", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.OffsetTime", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.Period", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.Year", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.YearMonth", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"java.time.ZoneId", + "methods":[{"name":"of","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"java.time.ZoneOffset", + "methods":[{"name":"of","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"java.time.ZonedDateTime", + "methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }] +}, +{ + "name":"org.ini4j.spi.EscapeTool", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.ini4j.spi.IniBuilder", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.ini4j.spi.IniParser", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"picocli.CommandLine$AutoHelpMixin", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"picocli.CommandLine$HelpCommand", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +} +] diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/resource-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/resource-config.json new file mode 100644 index 00000000..ee2b9b06 --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/resource-config.json @@ -0,0 +1,31 @@ +{ + "resources":{ + "includes":[{ + "pattern":"\\QMETA-INF/services/com.webcodepro.applecommander.storage.DiskFactory\\E" + }, { + "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E" + }, { + "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/java.util.spi.ResourceBundleControlProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/org.applecommander.source.Source$Factory\\E" + }, { + "pattern":"\\QMETA-INF/services/org.ini4j.spi.EscapeTool\\E" + }, { + "pattern":"\\QMETA-INF/services/org.ini4j.spi.IniBuilder\\E" + }, { + "pattern":"\\QMETA-INF/services/org.ini4j.spi.IniParser\\E" + }, { + "pattern":"\\Qaddresses.ini\\E" + }, { + "pattern":"\\Qcom/webcodepro/applecommander/storage/os/prodos/ProdosFileTypes.properties\\E" + }]}, + "bundles":[{ + "name":"com.webcodepro.applecommander.storage.StorageBundle", + "locales":[""] + }, { + "name":"com.webcodepro.applecommander.util.TextBundle", + "locales":[""] + }] +} diff --git a/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/serialization-config.json b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/serialization-config.json new file mode 100644 index 00000000..f3d7e06e --- /dev/null +++ b/app/cli-acx/src/main/resources/META-INF/native-image/net.sf.applecommander/acdasm/serialization-config.json @@ -0,0 +1,8 @@ +{ + "types":[ + ], + "lambdaCapturingTypes":[ + ], + "proxies":[ + ] +} diff --git a/build.gradle b/build.gradle index eeafbf3b..0a5d3536 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,8 @@ ext { commonsCsvVersion = "1.14.1" gsonVersion = "2.13.1" picocliVersion = "4.7.7" - springBoot = "3.5.4" + // 3.0(?) introduced Spring AOT automatic stuff and breaks when using GraalVM native image + springBoot = "2.7.7" acdasmVersion = "0.5.0" + graalvmBuildVersion = "0.10.6" } diff --git a/dev.sh b/dev.sh index 09cc06ba..a90a11a3 100644 --- a/dev.sh +++ b/dev.sh @@ -5,6 +5,8 @@ platform=$(uname | tr '[:upper:]' '[:lower:]') machine=$(uname -m | tr '[:upper:]' '[:lower:]') # These are useful aliases while developing -alias ac='java -jar app/cli-ac/build/libs/AppleCommander-ac-*.jar' -alias acx='java -jar app/cli-acx/build/libs/AppleCommander-acx-*.jar' -alias acgui='java -jar app/gui-swt-linux-x86_64/build/libs/AppleCommander-${platform}-${machine}-*.jar' +alias ac='java -jar ${PWD}/app/cli-ac/build/libs/AppleCommander-ac-*.jar' +alias acn='${PWD}/app/cli-ac/build/native/nativeCompile/ac-*' +alias acx='java -jar ${PWD}/app/cli-acx/build/libs/AppleCommander-acx-*.jar' +alias acxn='${PWD}/app/cli-acx/build/native/nativeCompile/acx-*' +alias acgui='java -jar ${PWD}/app/gui-swt-linux-x86_64/build/libs/AppleCommander-${platform}-${machine}-*.jar' diff --git a/lib/ac-api/src/main/resources/META-INF/native-image/org.applecommander/ac-api/resource-config.json b/lib/ac-api/src/main/resources/META-INF/native-image/org.applecommander/ac-api/resource-config.json new file mode 100644 index 00000000..808dc2c2 --- /dev/null +++ b/lib/ac-api/src/main/resources/META-INF/native-image/org.applecommander/ac-api/resource-config.json @@ -0,0 +1,44 @@ +{ + "resources": { + "includes": [ + { + "pattern": "META-INF/MANIFEST.MF" + }, + { + "pattern": "META-INF/services/*" + }, + { + "pattern": "com/webcodepro/applecommander/storage/os/prodos/*" + }, + { + "pattern": "com/webcodepro/applecommander/storage/*" + }, + { + "pattern": "com/webcodepro/applecommander/ui/*" + }, + { + "pattern": "com/webcodepro/applecommander/util/*" + } + ] + }, + "bundles": [ + { + "name": "com.webcodepro.applecommander.storage.StorageBundle", + "locales": [ + "und" + ] + }, + { + "name": "com.webcodepro.applecommander.util.UiBundle", + "locales": [ + "und" + ] + }, + { + "name": "com.webcodepro.applecommander.util.TextBundle", + "locales": [ + "und" + ] + } + ] +}