From bca49d62a0f4775a71f914dc339aebb62b8a88d0 Mon Sep 17 00:00:00 2001 From: Adam Pocock Date: Wed, 7 Jun 2023 15:24:57 -0400 Subject: [PATCH] Fixing CoreML in Java (#16231) ### 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. --- java/build.gradle | 2 +- .../main/native/ai_onnxruntime_OrtSession_SessionOptions.c | 2 +- java/src/test/java/ai/onnxruntime/InferenceTest.java | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/java/build.gradle b/java/build.gradle index e4e8ac86fe..78a643aeed 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -181,7 +181,7 @@ test { if (cmakeBuildDir != null) { workingDir cmakeBuildDir } - systemProperties System.getProperties().subMap(['USE_CUDA', 'USE_ROCM', 'USE_TENSORRT', 'USE_DNNL', 'USE_OPENVINO', 'JAVA_FULL_TEST', 'ENABLE_TRAINING_APIS']) + 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 diff --git a/java/src/main/native/ai_onnxruntime_OrtSession_SessionOptions.c b/java/src/main/native/ai_onnxruntime_OrtSession_SessionOptions.c index 330ed3fa3c..c805e00dc4 100644 --- a/java/src/main/native/ai_onnxruntime_OrtSession_SessionOptions.c +++ b/java/src/main/native/ai_onnxruntime_OrtSession_SessionOptions.c @@ -600,7 +600,7 @@ JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addArm JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addCoreML (JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint coreMLFlags) { (void)jobj; - #ifdef USE_CORE_ML + #ifdef USE_COREML checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_CoreML((OrtSessionOptions*) handle, (uint32_t) coreMLFlags)); #else (void)apiHandle;(void)handle;(void)coreMLFlags; // Parameters used when CoreML is defined. diff --git a/java/src/test/java/ai/onnxruntime/InferenceTest.java b/java/src/test/java/ai/onnxruntime/InferenceTest.java index 36ae3cc356..76ac083049 100644 --- a/java/src/test/java/ai/onnxruntime/InferenceTest.java +++ b/java/src/test/java/ai/onnxruntime/InferenceTest.java @@ -632,6 +632,12 @@ public class InferenceTest { runProvider(OrtProvider.XNNPACK); } + @Test + @EnabledIfSystemProperty(named = "USE_COREML", matches = "1") + public void testCoreML() throws OrtException { + runProvider(OrtProvider.CORE_ML); + } + private void runProvider(OrtProvider provider) throws OrtException { EnumSet providers = OrtEnvironment.getAvailableProviders(); assertTrue(providers.size() > 1);