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

This commit is contained in:
Rob Greene
2025-07-30 10:32:36 -05:00
parent 08ec27d3da
commit 58c2ca12e9
13 changed files with 229 additions and 21 deletions
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash +x
JAR="$(find tools/bt/build/libs/ -type f -not -name '*-plain.jar')"
function bt() {
java -agentlib:native-image-agent=config-merge-dir=tools/bt/src/main/resources/META-INF/native-image \
-jar "${JAR}" \
"$@"
}
printf "\n\n*** RUNNING BT THROUGH A NUMBER OF COMMANDS TO CAPTURE DETAILS FOR NATIVE IMAGE ***\n\n"
bt --version
bt --optimize tools/bt/src/test/resources/alien-drizzle.bas --output=alien-drizzle.out
bt --applesingle tools/bt/src/test/resources/route6502.bas --output=route6502.as
bt --wrapper tools/bt/src/test/resources/test.bas --hex
bt tools/bt/src/test/resources/embed-example.bas --copy
bt tools/bt/src/test/resources/mouse.bas --copy
@@ -0,0 +1,10 @@
# Graal Native Image configuration
To _update_ the configurations, use:
```declarative
-agentlib:native-image-agent=config-merge-dir=tools/bt/src/main/resources/META-INF/native-image
```
Note that there is a script to exercise a good set options in `scripts/capture-bt.sh`.
Run it from the project root.
@@ -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,140 @@
[
{
"name":"groovy.lang.Closure"
},
{
"name":"io.github.applecommander.bastools.api.directives.EmbeddedBinaryDirective",
"methods":[{"name":"<init>","parameterTypes":["io.github.applecommander.bastools.api.Configuration","java.io.OutputStream"] }]
},
{
"name":"io.github.applecommander.bastools.api.directives.EmbeddedShapeTable",
"methods":[{"name":"<init>","parameterTypes":["io.github.applecommander.bastools.api.Configuration","java.io.OutputStream"] }]
},
{
"name":"io.github.applecommander.bastools.tools.bt.IntegerTypeConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.github.applecommander.bastools.tools.bt.Main",
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
},
{
"name":"io.github.applecommander.bastools.tools.bt.OptimizationTypeConverter",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"name":"io.github.applecommander.bastools.tools.bt.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
}
]
@@ -1,10 +1,11 @@
{
"resources": {
"includes": [
{
"pattern": "META-INF/MANIFEST.MF"
}
]
},
"bundles": []
"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"
}]},
"bundles":[]
}
@@ -0,0 +1,8 @@
{
"types":[
],
"lambdaCapturingTypes":[
],
"proxies":[
]
}
@@ -0,0 +1,6 @@
1 GOSUB 10
2 PRINT "BEFORE CALL"
3 CALL 768
4 PRINT "AFTER CALL"
5 END
10 $embed file="embed-rts.bin", moveto="$300"
@@ -0,0 +1 @@
`
+6
View File
@@ -0,0 +1,6 @@
10 gosub 100
20 hgr:hcolor=3
30 draw m at 100,100
40 end
100 $shape src="mouse.st", init=yes, assign=(m="mouse"), address=ad
+13
View File
@@ -0,0 +1,13 @@
; extracted from NEW MOUSE
.bitmap mouse
..........*X..
....XXXX.XX...
...XXXXXXXX...
.XXXXXXXXXXX..
XX.XXXXXXX.XX.
X...XXXXXXXXXX
XX............
.XXX.XX.......
...XXX........
@@ -1,21 +1,10 @@
# 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
```
Note that there is a script to exercise a good set options in `scripts/capture-st.sh`.
Run it from the project root.