mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
### Description The name of the flag we set when compiling the JNI binding to enable the CoreML EP changed at some point in the past. This PR fixes it by updating the flag in the JNI. I also added a quick smoke test for the CoreML provider to make sure it doesn't crash and can be enabled. ### Motivation and Context All the EPs should work as expected in Java. Fixes #16230.
258 lines
7.2 KiB
Groovy
258 lines
7.2 KiB
Groovy
plugins {
|
|
id 'java-library'
|
|
id 'maven-publish'
|
|
id 'signing'
|
|
id 'jacoco'
|
|
id "com.diffplug.spotless" version "6.13.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.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
|
|
}
|