Skip to content

Commit 08ec27d

Browse files
committed
Working on Graal native image capabilities. 'st' looks stable at this point.
1 parent f3cec41 commit 08ec27d

File tree

12 files changed

+302
-0
lines changed

12 files changed

+302
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"resources": {
3+
"includes": [
4+
{
5+
"pattern": "META-INF/MANIFEST.MF"
6+
}
7+
]
8+
},
9+
"bundles": []
10+
}

scripts/capture-st.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash +x
2+
3+
JAR="$(find tools/st/build/libs/ -type f -not -name '*-plain.jar')"
4+
5+
function st() {
6+
java -agentlib:native-image-agent=config-merge-dir=tools/st/src/main/resources/META-INF/native-image \
7+
-jar "${JAR}" \
8+
"$@"
9+
}
10+
11+
printf "\n\n*** RUNNING ST THROUGH A NUMBER OF COMMANDS TO CAPTURE DETAILS FOR NATIVE IMAGE ***\n\n"
12+
13+
st --version
14+
st generate --help
15+
st extract --help
16+
st generate --demo-code --name MOUSE.BIN --output mousedemo.po api/src/test/resources/mouse-bitmap.st
17+
st generate --single --name MOUSE.BIN --output mouse.as api/src/test/resources/mouse-bitmap.st
18+
st generate --name MOUSE.BIN --output mouse.bin api/src/test/resources/mouse-bitmap.st
19+
st extract mouse.bin --stdout

tools/bt/build.gradle

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ plugins {
22
id 'org.springframework.boot' version "2.7.17"
33
id 'java'
44
id 'application'
5+
id 'org.graalvm.buildtools.native' version '0.10.6'
56
}
67

78
java {
@@ -13,6 +14,15 @@ repositories {
1314
mavenCentral()
1415
}
1516

17+
jar {
18+
manifest {
19+
attributes(
20+
'Implementation-Title': 'BT CLI',
21+
'Implementation-Version': "${project.version} (${new Date().format('yyyy-MM-dd HH:mm')})"
22+
)
23+
}
24+
}
25+
1626
application {
1727
mainClass = "io.github.applecommander.bastools.tools.bt.Main"
1828
}
@@ -31,3 +41,13 @@ dependencies {
3141
implementation 'net.sf.applecommander:applesingle-api:1.2.2'
3242
implementation project(':bastools-api')
3343
}
44+
45+
graalvmNative {
46+
String osName = System.getProperty('os.name').toLowerCase().split()[0]
47+
String osArch = System.getProperty('os.arch').toLowerCase().split()[0]
48+
binaries {
49+
named("main") {
50+
imageName.set("bt-${osName}-${osArch}-${project.version}")
51+
}
52+
}
53+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"resources": {
3+
"includes": [
4+
{
5+
"pattern": "META-INF/MANIFEST.MF"
6+
}
7+
]
8+
},
9+
"bundles": []
10+
}

tools/st/build.gradle

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ plugins {
22
id 'org.springframework.boot' version "2.7.17"
33
id 'java'
44
id 'application'
5+
id 'org.graalvm.buildtools.native' version '0.10.6'
56
}
67

78
java {
@@ -13,6 +14,15 @@ repositories {
1314
mavenCentral()
1415
}
1516

17+
jar {
18+
manifest {
19+
attributes(
20+
'Implementation-Title': 'Shape Tools CLI',
21+
'Implementation-Version': "${project.version} (${new Date().format('yyyy-MM-dd HH:mm')})"
22+
)
23+
}
24+
}
25+
1626
application {
1727
mainClass = "io.github.applecommander.bastools.tools.st.Main"
1828
}
@@ -32,3 +42,13 @@ dependencies {
3242
implementation 'net.sf.applecommander:AppleCommander:1.9.0'
3343
implementation project(':bastools-api')
3444
}
45+
46+
graalvmNative {
47+
String osName = System.getProperty('os.name').toLowerCase().split()[0]
48+
String osArch = System.getProperty('os.arch').toLowerCase().split()[0]
49+
binaries {
50+
named("main") {
51+
imageName.set("st-${osName}-${osArch}-${project.version}")
52+
}
53+
}
54+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Graal Native Image configuration
2+
3+
This is a mish-mash of manual and automatic code generation.
4+
5+
To _update_ the configurations, use:
6+
7+
```declarative
8+
-agentlib:native-image-agent=config-merge-dir=tools/st/src/main/resources/META-INF/native-image
9+
```
10+
11+
Please delete empty files and reformat the JSON!
12+
13+
When running the JAR from the command line. This particular pathing, suggests that it be run from the root of the project.
14+
15+
Note: With `st` every subcommand should be executed to capture all the pieces!
16+
17+
For example:
18+
19+
```shell
20+
TODO
21+
```
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"name":"java.lang.Boolean",
4+
"methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
5+
}
6+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"type":"agent-extracted",
4+
"classes":[
5+
]
6+
}
7+
]
8+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[
2+
]
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
[
2+
{
3+
"name":"groovy.lang.Closure"
4+
},
5+
{
6+
"name":"io.github.applecommander.bastools.tools.st.ExtractCommand",
7+
"allDeclaredFields":true,
8+
"queryAllDeclaredMethods":true,
9+
"methods":[{"name":"<init>","parameterTypes":[] }]
10+
},
11+
{
12+
"name":"io.github.applecommander.bastools.tools.st.GenerateCommand",
13+
"allDeclaredFields":true,
14+
"queryAllDeclaredMethods":true,
15+
"methods":[{"name":"<init>","parameterTypes":[] }]
16+
},
17+
{
18+
"name":"io.github.applecommander.bastools.tools.st.IntegerRangeTypeConverter",
19+
"methods":[{"name":"<init>","parameterTypes":[] }]
20+
},
21+
{
22+
"name":"io.github.applecommander.bastools.tools.st.Main",
23+
"allDeclaredFields":true,
24+
"queryAllDeclaredMethods":true,
25+
"methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
26+
},
27+
{
28+
"name":"io.github.applecommander.bastools.tools.st.VersionProvider",
29+
"allDeclaredFields":true,
30+
"queryAllDeclaredMethods":true,
31+
"methods":[{"name":"<init>","parameterTypes":[] }]
32+
},
33+
{
34+
"name":"java.io.Console",
35+
"methods":[{"name":"isTerminal","parameterTypes":[] }]
36+
},
37+
{
38+
"name":"java.lang.Object",
39+
"allDeclaredFields":true,
40+
"queryAllDeclaredMethods":true
41+
},
42+
{
43+
"name":"java.lang.Runtime",
44+
"methods":[{"name":"version","parameterTypes":[] }]
45+
},
46+
{
47+
"name":"java.lang.Runtime$Version",
48+
"methods":[{"name":"major","parameterTypes":[] }]
49+
},
50+
{
51+
"name":"java.lang.System",
52+
"methods":[{"name":"console","parameterTypes":[] }]
53+
},
54+
{
55+
"name":"java.nio.file.Path"
56+
},
57+
{
58+
"name":"java.nio.file.Paths",
59+
"methods":[{"name":"get","parameterTypes":["java.lang.String","java.lang.String[]"] }]
60+
},
61+
{
62+
"name":"java.sql.Connection"
63+
},
64+
{
65+
"name":"java.sql.Driver"
66+
},
67+
{
68+
"name":"java.sql.DriverManager",
69+
"methods":[{"name":"getConnection","parameterTypes":["java.lang.String"] }, {"name":"getDriver","parameterTypes":["java.lang.String"] }]
70+
},
71+
{
72+
"name":"java.sql.Time",
73+
"methods":[{"name":"<init>","parameterTypes":["long"] }]
74+
},
75+
{
76+
"name":"java.sql.Timestamp",
77+
"methods":[{"name":"valueOf","parameterTypes":["java.lang.String"] }]
78+
},
79+
{
80+
"name":"java.time.Duration",
81+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
82+
},
83+
{
84+
"name":"java.time.Instant",
85+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
86+
},
87+
{
88+
"name":"java.time.LocalDate",
89+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
90+
},
91+
{
92+
"name":"java.time.LocalDateTime",
93+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
94+
},
95+
{
96+
"name":"java.time.LocalTime",
97+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
98+
},
99+
{
100+
"name":"java.time.MonthDay",
101+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
102+
},
103+
{
104+
"name":"java.time.OffsetDateTime",
105+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
106+
},
107+
{
108+
"name":"java.time.OffsetTime",
109+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
110+
},
111+
{
112+
"name":"java.time.Period",
113+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
114+
},
115+
{
116+
"name":"java.time.Year",
117+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
118+
},
119+
{
120+
"name":"java.time.YearMonth",
121+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
122+
},
123+
{
124+
"name":"java.time.ZoneId",
125+
"methods":[{"name":"of","parameterTypes":["java.lang.String"] }]
126+
},
127+
{
128+
"name":"java.time.ZoneOffset",
129+
"methods":[{"name":"of","parameterTypes":["java.lang.String"] }]
130+
},
131+
{
132+
"name":"java.time.ZonedDateTime",
133+
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
134+
},
135+
{
136+
"name":"picocli.CommandLine$AutoHelpMixin",
137+
"allDeclaredFields":true,
138+
"queryAllDeclaredMethods":true
139+
},
140+
{
141+
"name":"picocli.CommandLine$HelpCommand",
142+
"allDeclaredFields":true,
143+
"queryAllDeclaredMethods":true
144+
}
145+
]

0 commit comments

Comments
 (0)