Working on Graal native image capabilities. 'st' looks stable at this point.

This commit is contained in:
Rob Greene
2025-07-17 21:00:43 -05:00
parent f3cec41b66
commit 08ec27d3da
12 changed files with 302 additions and 0 deletions
@@ -0,0 +1,10 @@
{
"resources": {
"includes": [
{
"pattern": "META-INF/MANIFEST.MF"
}
]
},
"bundles": []
}
+19
View File
@@ -0,0 +1,19 @@
#!/bin/bash +x
JAR="$(find tools/st/build/libs/ -type f -not -name '*-plain.jar')"
function st() {
java -agentlib:native-image-agent=config-merge-dir=tools/st/src/main/resources/META-INF/native-image \
-jar "${JAR}" \
"$@"
}
printf "\n\n*** RUNNING ST THROUGH A NUMBER OF COMMANDS TO CAPTURE DETAILS FOR NATIVE IMAGE ***\n\n"
st --version
st generate --help
st extract --help
st generate --demo-code --name MOUSE.BIN --output mousedemo.po api/src/test/resources/mouse-bitmap.st
st generate --single --name MOUSE.BIN --output mouse.as api/src/test/resources/mouse-bitmap.st
st generate --name MOUSE.BIN --output mouse.bin api/src/test/resources/mouse-bitmap.st
st extract mouse.bin --stdout
+20
View File
@@ -2,6 +2,7 @@ plugins {
id 'org.springframework.boot' version "2.7.17"
id 'java'
id 'application'
id 'org.graalvm.buildtools.native' version '0.10.6'
}
java {
@@ -13,6 +14,15 @@ repositories {
mavenCentral()
}
jar {
manifest {
attributes(
'Implementation-Title': 'BT CLI',
'Implementation-Version': "${project.version} (${new Date().format('yyyy-MM-dd HH:mm')})"
)
}
}
application {
mainClass = "io.github.applecommander.bastools.tools.bt.Main"
}
@@ -31,3 +41,13 @@ dependencies {
implementation 'net.sf.applecommander:applesingle-api:1.2.2'
implementation project(':bastools-api')
}
graalvmNative {
String osName = System.getProperty('os.name').toLowerCase().split()[0]
String osArch = System.getProperty('os.arch').toLowerCase().split()[0]
binaries {
named("main") {
imageName.set("bt-${osName}-${osArch}-${project.version}")
}
}
}
@@ -0,0 +1,10 @@
{
"resources": {
"includes": [
{
"pattern": "META-INF/MANIFEST.MF"
}
]
},
"bundles": []
}
+20
View File
@@ -2,6 +2,7 @@ plugins {
id 'org.springframework.boot' version "2.7.17"
id 'java'
id 'application'
id 'org.graalvm.buildtools.native' version '0.10.6'
}
java {
@@ -13,6 +14,15 @@ repositories {
mavenCentral()
}
jar {
manifest {
attributes(
'Implementation-Title': 'Shape Tools CLI',
'Implementation-Version': "${project.version} (${new Date().format('yyyy-MM-dd HH:mm')})"
)
}
}
application {
mainClass = "io.github.applecommander.bastools.tools.st.Main"
}
@@ -32,3 +42,13 @@ dependencies {
implementation 'net.sf.applecommander:AppleCommander:1.9.0'
implementation project(':bastools-api')
}
graalvmNative {
String osName = System.getProperty('os.name').toLowerCase().split()[0]
String osArch = System.getProperty('os.arch').toLowerCase().split()[0]
binaries {
named("main") {
imageName.set("st-${osName}-${osArch}-${project.version}")
}
}
}
@@ -0,0 +1,21 @@
# Graal Native Image configuration
This is a mish-mash of manual and automatic code generation.
To _update_ the configurations, use:
```declarative
-agentlib:native-image-agent=config-merge-dir=tools/st/src/main/resources/META-INF/native-image
```
Please delete empty files and reformat the JSON!
When running the JAR from the command line. This particular pathing, suggests that it be run from the root of the project.
Note: With `st` every subcommand should be executed to capture all the pieces!
For example:
```shell
TODO
```
@@ -0,0 +1,6 @@
[
{
"name":"java.lang.Boolean",
"methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
}
]
@@ -0,0 +1,8 @@
[
{
"type":"agent-extracted",
"classes":[
]
}
]
@@ -0,0 +1,2 @@
[
]
@@ -0,0 +1,145 @@
[
{
"name":"groovy.lang.Closure"
},
{
"name":"io.github.applecommander.bastools.tools.st.ExtractCommand",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.github.applecommander.bastools.tools.st.GenerateCommand",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.github.applecommander.bastools.tools.st.IntegerRangeTypeConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.github.applecommander.bastools.tools.st.Main",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
},
{
"name":"io.github.applecommander.bastools.tools.st.VersionProvider",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"java.io.Console",
"methods":[{"name":"isTerminal","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.lang.System",
"methods":[{"name":"console","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":"<init>","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":"picocli.CommandLine$AutoHelpMixin",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true
},
{
"name":"picocli.CommandLine$HelpCommand",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true
}
]
@@ -0,0 +1,33 @@
{
"resources":{
"includes":[{
"pattern":"META-INF/MANIFEST.MF"
}, {
"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":"\\Qcom/webcodepro/applecommander/storage/AppleCommander-boot.dump\\E"
}, {
"pattern":"\\Qcom/webcodepro/applecommander/storage/os/prodos/ProdosFileTypes.properties\\E"
}, {
"pattern":"\\Qdemo-template.bas\\E"
}, {
"pattern":"\\Qtemplate.po\\E"
}, {
"pattern":"demo-template.bas"
}, {
"pattern":"java.base:\\Qsun/text/resources/LineBreakIteratorData\\E"
}, {
"pattern":"template.po"
}]},
"bundles":[{
"name":"com.webcodepro.applecommander.storage.StorageBundle",
"locales":["und"]
}, {
"name":"com.webcodepro.applecommander.util.TextBundle",
"locales":["und"]
}]
}
@@ -0,0 +1,8 @@
{
"types":[
],
"lambdaCapturingTypes":[
],
"proxies":[
]
}