Skip to content

Commit 364ea64

Browse files
Merge pull request #646 from kennethshackleton/ffm
Foreign function and memory integration with Java 25
2 parents 60689e6 + 8af5c4f commit 364ea64

File tree

42 files changed

+3023
-311
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+3023
-311
lines changed

.github/workflows/continuous-integration.yml

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ jobs:
1818
runs-on: ${{ matrix.os }}
1919
container: ${{ matrix.container }}
2020
timeout-minutes: 60
21-
2221
steps:
2322
- name: 'Install system packages'
2423
run: |
@@ -43,12 +42,21 @@ jobs:
4342
cp libmimalloc.a /usr/local/lib/
4443
cp ../../include/mimalloc.h /usr/local/include/
4544
46-
- name: 'Setup Java'
45+
- name: 'Setup Java 17'
46+
id: setup-java-17
4747
uses: actions/setup-java@v5
4848
with:
4949
distribution: temurin
5050
java-version: 17
5151

52+
- name: 'Set JAVA_HOME'
53+
run: |
54+
if [[ "${{ runner.os }}" == "Linux" ]]; then
55+
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
56+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
57+
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
58+
fi
59+
5260
- name: 'Setup Android SDK'
5361
uses: android-actions/setup-android@v3
5462

@@ -67,6 +75,7 @@ jobs:
6775
run: |
6876
echo 'org.gradle.caching=false' >> gradle.properties
6977
echo 'org.gradle.configuration-cache=false' >> gradle.properties
78+
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
7079
7180
- name: 'Build'
7281
env:
@@ -91,7 +100,6 @@ jobs:
91100
name: 'Continuous Integration'
92101
runs-on: ubuntu-latest
93102
timeout-minutes: 60
94-
95103
steps:
96104
- name: 'Setup environment'
97105
run: |
@@ -110,12 +118,27 @@ jobs:
110118
fetch-depth: 2
111119
submodules: recursive
112120

113-
- name: 'Setup Java'
121+
- name: 'Setup Java 17'
122+
id: setup-java-17
114123
uses: actions/setup-java@v5
115124
with:
116125
distribution: temurin
117126
java-version: 17
118127

128+
- name: 'Setup Java 25'
129+
uses: actions/setup-java@v5
130+
with:
131+
distribution: temurin
132+
java-version: 25
133+
134+
- name: 'Set JAVA_HOME'
135+
run: |
136+
if [[ "${{ runner.os }}" == "Linux" ]]; then
137+
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
138+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
139+
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
140+
fi
141+
119142
- name: 'Build cache'
120143
uses: actions/cache@v3
121144
with:
@@ -130,9 +153,10 @@ jobs:
130153
- name: 'ccache'
131154
uses: hendrikmuhs/ccache-action@v1.2
132155

133-
- name: 'Gradle configuration'
156+
- name: 'Configure Gradle'
134157
run: |
135158
echo 'org.gradle.caching=true' >> gradle.properties
159+
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
136160
echo 'plugins {' >> settings.gradle.kts
137161
echo ' id("com.gradle.enterprise").version("3.6.3")' >> settings.gradle.kts
138162
echo '}' >> settings.gradle.kts
@@ -158,7 +182,7 @@ jobs:
158182
**/build/reports/detekt
159183
160184
- name: 'Unit tests'
161-
run: ./gradlew :selekt-android:testDebugUnitTest :selekt-java:test :koverHtmlReport -x integrationTest ${{ env.SCAN }}
185+
run: ./gradlew :selekt-android:testDebugUnitTest :selekt-java:test :selekt-sqlite3-classes:testJava17 :selekt-sqlite3-classes:testJava25 :selekt-common:test :koverHtmlReport -x integrationTest ${{ env.SCAN }}
162186

163187
- name: 'Archive test reports'
164188
uses: actions/upload-artifact@v6
@@ -169,11 +193,17 @@ jobs:
169193
build/reports/kover/html
170194
selekt-android/build/reports/tests/testDebugUnitTest
171195
selekt-java/build/reports/tests/test
196+
selekt-sqlite3-classes/build/reports/tests/testJava17
197+
selekt-sqlite3-classes/build/reports/tests/testJava25
172198
173-
- name: 'Build Selekt'
199+
- name: 'Build Selekt Android'
174200
run: |
175201
./gradlew assembleRelease ${{ env.SCAN }}
176202
203+
- name: 'Build Selekt JVM'
204+
run: |
205+
./gradlew :selekt-jvm:jar ${{ env.SCAN }}
206+
177207
- name: 'Verify coverage'
178208
run:
179209
./gradlew :koverVerify -x integrationTest

.github/workflows/publication.yml

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,20 @@ jobs:
4646
cp libmimalloc.a /usr/local/lib/
4747
cp ../../include/mimalloc.h /usr/local/include/
4848
49-
- name: 'Setup Java'
49+
- name: 'Setup Java 17'
5050
uses: actions/setup-java@v5
5151
with:
5252
distribution: temurin
5353
java-version: 17
5454

55+
- name: 'Set JAVA_HOME'
56+
run: |
57+
if [[ "${{ runner.os }}" == "Linux" ]]; then
58+
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
59+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
60+
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
61+
fi
62+
5563
- name: 'Setup Android SDK'
5664
uses: android-actions/setup-android@v3
5765

@@ -70,11 +78,13 @@ jobs:
7078
run: |
7179
echo 'org.gradle.caching=false' >> gradle.properties
7280
echo 'org.gradle.configuration-cache=false' >> gradle.properties
81+
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
7382
7483
- name: 'Build'
7584
env:
7685
CC: ${{ runner.os == 'Linux' && 'gcc' || 'clang' }}
7786
CXX: ${{ runner.os == 'Linux' && 'g++' || 'clang++' }}
87+
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
7888
LDFLAGS: '-s'
7989
MACOSX_DEPLOYMENT_TARGET: ${{ runner.os == 'macOS' && '12.0' || '' }}
8090
run: |
@@ -108,12 +118,20 @@ jobs:
108118
fetch-depth: 2
109119
submodules: false
110120

111-
- name: 'Setup Java'
121+
- name: 'Setup Java 17'
112122
uses: actions/setup-java@v5
113123
with:
114124
distribution: temurin
115125
java-version: 17
116126

127+
- name: 'Set JAVA_HOME'
128+
run: |
129+
if [[ "${{ runner.os }}" == "Linux" ]]; then
130+
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
131+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
132+
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
133+
fi
134+
117135
- name: 'Configure Gradle'
118136
run: |
119137
echo 'org.gradle.caching=false' >> gradle.properties
@@ -136,6 +154,7 @@ jobs:
136154
- name: 'Publish to OSSRH'
137155
if: github.event_name == 'release' && github.event.action == 'published'
138156
env:
157+
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
139158
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
140159
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEY_ID }}
141160
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_KEY_PASSPHRASE }}
@@ -165,21 +184,40 @@ jobs:
165184
fetch-depth: 2
166185
submodules: recursive
167186

168-
- name: 'Setup Java'
187+
- name: 'Setup Java 17'
169188
uses: actions/setup-java@v5
170189
with:
171190
distribution: temurin
172191
java-version: 17
173192

193+
- name: 'Setup Java 25'
194+
uses: actions/setup-java@v5
195+
with:
196+
distribution: temurin
197+
java-version: 25
198+
199+
- name: 'Set JAVA_HOME'
200+
run: |
201+
if [[ "${{ runner.os }}" == "Linux" ]]; then
202+
echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
203+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
204+
echo "JAVA_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
205+
fi
206+
174207
- name: 'Configure Gradle'
175208
run: |
176209
echo 'org.gradle.caching=false' >> gradle.properties
177210
echo 'org.gradle.configuration-cache=false' >> gradle.properties
211+
echo "org.gradle.java.home=${JAVA_HOME}" >> gradle.properties
178212
179213
- name: 'Unit tests'
180-
run: ./gradlew :selekt-android:testDebugUnitTest :selekt-java:test
214+
env:
215+
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
216+
run: ./gradlew :selekt-android:testDebugUnitTest :selekt-java:test :selekt-sqlite3-classes:testJava17 :selekt-sqlite3-classes:testJava25 :selekt-common:test -x integrationTest ${{ env.SCAN }}
181217

182-
- name: 'Build Selekt'
218+
- name: 'Build Selekt Android'
219+
env:
220+
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
183221
run: |
184222
./gradlew clean \
185223
:OpenSSL:assembleArm64-v8a \
@@ -192,6 +230,7 @@ jobs:
192230
- name: 'Publish release to OSSRH'
193231
if: github.event_name == 'release' && github.event.action == 'published'
194232
env:
233+
JAVA_HOME: ${{ steps.setup-java-17.outputs.java-home }}
195234
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
196235
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEY_ID }}
197236
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_KEY_PASSPHRASE }}

AndroidCLI/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ repositories {
2828

2929
android {
3030
compileSdk = Versions.ANDROID_SDK.version.toInt()
31-
buildToolsVersion = "34.0.0"
3231
namespace = "com.bloomberg.selekt.cli"
3332
defaultConfig {
3433
applicationId = "com.bloomberg.selekt.cli"

AndroidLibBenchmark/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ repositories {
2929

3030
android {
3131
compileSdkVersion(Versions.ANDROID_SDK.version.toInt())
32-
buildToolsVersion("34.0.0")
3332
namespace = "com.bloomberg.selekt.android.benchmark"
3433
defaultConfig {
3534
minSdkVersion(21)

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
Change Log
22
==========
33

4+
## Version 0.27.0
5+
6+
### Features
7+
8+
* Use Foreign Function and Memory APIs with Java 25.
9+
10+
### Dependencies
11+
12+
* Android Gradle Plugin 8.12.1
13+
414
## Version 0.26.4
515

616
### Dependencies

SQLite3/build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import java.nio.file.Files
1818
import java.nio.file.Paths
1919
import java.util.Locale
20+
import org.gradle.jvm.toolchain.JavaLanguageVersion
2021

2122
plugins {
2223
base
24+
java
2325
}
2426

2527
val cFlags = arrayOf(
@@ -100,6 +102,12 @@ tasks.register<Exec>("cmakeSQLite") {
100102
Files.createDirectories(workingDir)
101103
}
102104
workingDir(".cxx-host")
105+
// Set JAVA_HOME for CMake to find JNI headers (using Java 17 toolchain)
106+
val javaToolchainService = project.extensions.getByType(JavaToolchainService::class.java)
107+
val javaLauncher = javaToolchainService.launcherFor {
108+
languageVersion.set(JavaLanguageVersion.of(17))
109+
}.get()
110+
environment("JAVA_HOME", javaLauncher.metadata.installationPath.asFile.absolutePath)
103111
commandLine("cmake")
104112
args(
105113
"-DCMAKE_BUILD_TYPE=Release",

build.gradle.kts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ nexusPublishing {
6969
dependencies {
7070
kover(projects.selektAndroid)
7171
kover(projects.selektApi)
72+
kover(projects.selektCommons)
7273
kover(projects.selektJava)
74+
kover(projects.selektJvm)
7375
kover(projects.selektSqlite3Classes)
7476
}
7577

@@ -138,19 +140,10 @@ subprojects {
138140
}
139141
}
140142
}
141-
tasks.withType<Test>().configureEach {
142-
systemProperty("com.bloomberg.selekt.can_use_load", true)
143-
systemProperty(
144-
"com.bloomberg.selekt.library_path",
145-
layout.buildDirectory.dir("intermediates/assets/debugUnitTest/mergeDebugUnitTestAssets").get()
146-
.asFile.toString()
147-
)
148-
}
149143
tasks.withType<KotlinCompile>().configureEach {
150144
compilerOptions {
151145
allWarningsAsErrors = true
152146
freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn")
153-
jvmTarget = JvmTarget.JVM_17
154147
}
155148
}
156149
tasks.withType<Test>().configureEach {
@@ -186,6 +179,7 @@ subprojects {
186179
exclude("**/res/**")
187180
exclude("**/tmp/**")
188181
reports.html.outputLocation.fileValue(File("$rootDir/build/reports/detekt/${project.name}-detekt.html"))
182+
jvmTarget = JvmTarget.JVM_17.target
189183
}
190184
plugins.withType<SigningPlugin> {
191185
configure<SigningExtension> {
@@ -211,7 +205,6 @@ subprojects {
211205
localDirectory.set(file("src/main/kotlin"))
212206
}
213207
includeNonPublic.set(false)
214-
jdkVersion.set(JavaVersion.VERSION_17.majorVersion.toInt())
215208
noAndroidSdkLink.set(false)
216209
noJdkLink.set(false)
217210
noStdlibLink.set(false)
@@ -237,7 +230,7 @@ koverReport {
237230
defaults {
238231
filters {
239232
excludes {
240-
classes("*Test*")
233+
classes("*Test*", "com.bloomberg.selekt.jvm.*")
241234
packages(listOf(
242235
"*.benchmarks",
243236
"*_generated"

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
selekt.versionName=0.26.4
2-
selekt.nextVersionName=0.27.0
1+
selekt.versionName=0.27.0
2+
selekt.nextVersionName=0.28.0
33

44
openssl.version=3.5.5
55
openssl.sha256=b28c91532a8b65a1f983b4c28b7488174e4a01008e29ce8e69bd789f28bc2a89

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ lint = "31.5.2"
77
room = "2.6.1"
88

99
[libraries]
10-
android-tools-gradle = { module = "com.android.tools.build:gradle", version = "8.13.2" }
10+
android-tools-gradle = { module = "com.android.tools.build:gradle", version = "8.12.1" }
1111
android-tools-lint = { module = "com.android.tools.lint:lint", version.ref = "lint" }
1212
android-tools-lint-api = { module = "com.android.tools.lint:lint-api", version.ref = "lint" }
1313
androidx-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.0" }

selekt-android-sqlcipher/build.gradle.kts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ val allABIs = listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
3838

3939
android {
4040
compileSdk = Versions.ANDROID_SDK.version.toInt()
41-
buildToolsVersion = "34.0.0"
4241
namespace = "com.bloomberg.selekt.android.sqlcipher"
4342
ndkVersion = "27.3.13750724"
4443
defaultConfig {
@@ -78,8 +77,14 @@ android {
7877
}
7978

8079
dependencies {
80+
implementation(projects.selektCommons)
8181
implementation(projects.selektJava)
82-
implementation(projects.selektSqlite3Classes)
82+
implementation(projects.selektSqlite3Api)
83+
implementation(projects.selektSqlite3Classes) {
84+
capabilities {
85+
requireCapability("com.bloomberg.selekt:selekt-sqlite3-classes-java17")
86+
}
87+
}
8388
}
8489

8590
allABIs.forEach { abi ->

0 commit comments

Comments
 (0)