mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
### Description Bump spotless and the Gradle wrapper to 6.25.0 and 8.6 respectively to allow compiling ORT on Java 21. The build still targets Java 8. I'm not sure if there will be CI changes necessary to use this PR, specifically for the Gradle version as I don't know if that is cached somewhere earlier in the CI build process. The new Gradle version adds a warning that using `--source` and `--target` to select the Java language version is obsolete which is annoying, we can fix it if we decide to only allow building on newer versions of Java, while still supporting running on Java 8. ### Motivation and Context Java 21 is the latest LTS release of Java and ORT should be able to build on it.
262 lines
7.2 KiB
Groovy
262 lines
7.2 KiB
Groovy
plugins {
|
|
id 'java-library'
|
|
id 'maven-publish'
|
|
id 'signing'
|
|
id 'jacoco'
|
|
id "com.diffplug.spotless" version "6.25.0"
|
|
}
|
|
|
|
allprojects {
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
}
|
|
|
|
project.group = "com.microsoft.onnxruntime"
|
|
version = rootProject.file('../VERSION_NUMBER').text.trim()
|
|
|
|
// cmake runs will inform us of the build directory of the current run
|
|
def cmakeBuildDir = System.properties['cmakeBuildDir']
|
|
def useCUDA = System.properties['USE_CUDA']
|
|
def useROCM = System.properties['USE_ROCM']
|
|
boolean enableTrainingApis = (System.properties['ENABLE_TRAINING_APIS'] ?: "0") == "1"
|
|
def cmakeJavaDir = "${cmakeBuildDir}/java"
|
|
def cmakeNativeLibDir = "${cmakeJavaDir}/native-lib"
|
|
def cmakeNativeJniDir = "${cmakeJavaDir}/native-jni"
|
|
def cmakeNativeTestDir = "${cmakeJavaDir}/native-test"
|
|
def cmakeBuildOutputDir = "${cmakeJavaDir}/build"
|
|
|
|
def mavenUser = System.properties['mavenUser']
|
|
def mavenPwd = System.properties['mavenPwd']
|
|
|
|
def tmpArtifactId = enableTrainingApis ? project.name + "-training" : project.name
|
|
def mavenArtifactId = (useCUDA == null && useROCM == null) ? tmpArtifactId : tmpArtifactId + "_gpu"
|
|
|
|
def defaultDescription = 'ONNX Runtime is a performance-focused inference engine for ONNX (Open Neural Network Exchange) models.'
|
|
def trainingDescription = 'ONNX Runtime Training is a training and inference package for ONNX ' +
|
|
'(Open Neural Network Exchange) models. This package is targeted for Learning on The Edge aka On-Device Training ' +
|
|
'See https://github.com/microsoft/onnxruntime-training-examples/tree/master/on_device_training for more details.'
|
|
|
|
java {
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
targetCompatibility = JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
// This jar tasks serves as a CMAKE signalling
|
|
// mechanism. The jar will be overwritten by allJar task
|
|
jar {
|
|
}
|
|
|
|
// Add explicit sources jar with pom file.
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
archiveClassifier = "sources"
|
|
from sourceSets.main.allSource
|
|
into("META-INF/maven/$project.group/$mavenArtifactId") {
|
|
from { generatePomFileForMavenPublication }
|
|
rename ".*", "pom.xml"
|
|
}
|
|
}
|
|
|
|
// Add explicit javadoc jar with pom file
|
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
|
archiveClassifier = "javadoc"
|
|
from javadoc.destinationDir
|
|
into("META-INF/maven/$project.group/$mavenArtifactId") {
|
|
from { generatePomFileForMavenPublication }
|
|
rename ".*", "pom.xml"
|
|
}
|
|
}
|
|
|
|
spotless {
|
|
java {
|
|
removeUnusedImports()
|
|
googleJavaFormat()
|
|
targetExclude "src/test/java/ai/onnxruntime/OnnxMl.java"
|
|
}
|
|
format 'gradle', {
|
|
target '**/*.gradle'
|
|
trimTrailingWhitespace()
|
|
indentWithTabs()
|
|
}
|
|
}
|
|
|
|
compileJava {
|
|
dependsOn spotlessJava
|
|
options.compilerArgs += ["-h", "${project.buildDir}/headers/"]
|
|
if (!JavaVersion.current().isJava8()) {
|
|
// Ensures only methods present in Java 8 are used
|
|
options.compilerArgs.addAll(['--release', '8'])
|
|
// Gradle versions before 6.6 require that these flags are unset when using "-release"
|
|
java.sourceCompatibility = null
|
|
java.targetCompatibility = null
|
|
}
|
|
}
|
|
|
|
compileTestJava {
|
|
if (!JavaVersion.current().isJava8()) {
|
|
// Ensures only methods present in Java 8 are used
|
|
options.compilerArgs.addAll(['--release', '8'])
|
|
// Gradle versions before 6.6 require that these flags are unset when using "-release"
|
|
java.sourceCompatibility = null
|
|
java.targetCompatibility = null
|
|
}
|
|
}
|
|
|
|
sourceSets.main.java {
|
|
srcDirs = ['src/main/java', 'src/main/jvm']
|
|
}
|
|
|
|
sourceSets.test {
|
|
// add test resource files
|
|
resources.srcDirs += [
|
|
"${rootProject.projectDir}/../csharp/testdata",
|
|
"${rootProject.projectDir}/../onnxruntime/test/testdata",
|
|
"${rootProject.projectDir}/../onnxruntime/test/testdata/training_api",
|
|
"${rootProject.projectDir}/../java/testdata"
|
|
]
|
|
if (cmakeBuildDir != null) {
|
|
// add compiled native libs
|
|
resources.srcDirs += [
|
|
cmakeNativeLibDir,
|
|
cmakeNativeJniDir,
|
|
cmakeNativeTestDir
|
|
]
|
|
}
|
|
}
|
|
|
|
if (cmakeBuildDir != null) {
|
|
// generate tasks to be called from cmake
|
|
|
|
// Overwrite jar location
|
|
task allJar(type: Jar) {
|
|
manifest {
|
|
attributes('Automatic-Module-Name': project.group,
|
|
'Implementation-Title': 'onnxruntime',
|
|
'Implementation-Version': project.version)
|
|
}
|
|
into("META-INF/maven/$project.group/$mavenArtifactId") {
|
|
from { generatePomFileForMavenPublication }
|
|
rename ".*", "pom.xml"
|
|
}
|
|
from sourceSets.main.output
|
|
from cmakeNativeJniDir
|
|
from cmakeNativeLibDir
|
|
}
|
|
|
|
task cmakeBuild(type: Copy) {
|
|
from project.buildDir
|
|
include 'libs/**'
|
|
include 'docs/**'
|
|
into cmakeBuildOutputDir
|
|
}
|
|
cmakeBuild.dependsOn allJar
|
|
cmakeBuild.dependsOn sourcesJar
|
|
cmakeBuild.dependsOn javadocJar
|
|
cmakeBuild.dependsOn javadoc
|
|
|
|
task cmakeCheck(type: Copy) {
|
|
from project.buildDir
|
|
include 'reports/**'
|
|
into cmakeBuildOutputDir
|
|
}
|
|
cmakeCheck.dependsOn check
|
|
}
|
|
|
|
dependencies {
|
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2'
|
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.2'
|
|
testImplementation 'com.google.protobuf:protobuf-java:3.21.7'
|
|
}
|
|
|
|
processTestResources {
|
|
duplicatesStrategy(DuplicatesStrategy.INCLUDE) // allows duplicates in the test resources
|
|
}
|
|
|
|
test {
|
|
java {
|
|
dependsOn spotlessJava
|
|
}
|
|
if (System.getProperty("JAVA_FULL_TEST") != null) {
|
|
// Forces each test class to be run in a separate JVM,
|
|
// which is necessary for testing the environment thread pool which is ignored if full test is not set.
|
|
forkEvery 1
|
|
}
|
|
useJUnitPlatform()
|
|
if (cmakeBuildDir != null) {
|
|
workingDir cmakeBuildDir
|
|
}
|
|
systemProperties System.getProperties().subMap(['USE_CUDA', 'USE_ROCM', 'USE_TENSORRT', 'USE_DNNL', 'USE_OPENVINO', 'USE_COREML', 'JAVA_FULL_TEST', 'ENABLE_TRAINING_APIS'])
|
|
testLogging {
|
|
events "passed", "skipped", "failed"
|
|
showStandardStreams = true
|
|
showStackTraces = true
|
|
exceptionFormat = "full"
|
|
}
|
|
}
|
|
|
|
jacocoTestReport {
|
|
reports {
|
|
xml.required = true
|
|
csv.required = true
|
|
html.destination file("${buildDir}/jacocoHtml")
|
|
}
|
|
}
|
|
|
|
publishing {
|
|
publications {
|
|
maven(MavenPublication) {
|
|
groupId = project.group
|
|
artifactId = mavenArtifactId
|
|
|
|
from components.java
|
|
pom {
|
|
name = enableTrainingApis ? 'onnxruntime-training' : 'onnx-runtime'
|
|
description = enableTrainingApis ? trainingDescription : defaultDescription
|
|
url = 'https://microsoft.github.io/onnxruntime/'
|
|
licenses {
|
|
license {
|
|
name = 'MIT License'
|
|
url = 'https://opensource.org/licenses/MIT'
|
|
}
|
|
}
|
|
organization {
|
|
name = 'Microsoft'
|
|
url = 'https://www.microsoft.com'
|
|
}
|
|
scm {
|
|
connection = 'scm:git:git://github.com:microsoft/onnxruntime.git'
|
|
developerConnection = 'scm:git:ssh://github.com/microsoft/onnxruntime.git'
|
|
url = 'https://github.com/microsoft/onnxruntime'
|
|
}
|
|
developers {
|
|
developer {
|
|
id = 'onnxruntime'
|
|
name = 'ONNX Runtime'
|
|
email = 'onnxruntime@microsoft.com'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
repositories {
|
|
maven {
|
|
url 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
|
|
credentials {
|
|
username mavenUser
|
|
password mavenPwd
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Generates a task signMavenPublication that will
|
|
// build all artifacts.
|
|
signing {
|
|
// Queries env vars:
|
|
// ORG_GRADLE_PROJECT_signingKey
|
|
// ORG_GRADLE_PROJECT_signingPassword but can be changed to properties
|
|
def signingKey = findProperty("signingKey")
|
|
def signingPassword = findProperty("signingPassword")
|
|
useInMemoryPgpKeys(signingKey, signingPassword)
|
|
sign publishing.publications.maven
|
|
}
|