onnxruntime/java/src/main/native/ai_onnxruntime_OrtSession_SessionOptions.c
Adam Pocock fddbd8935c
Adding Java support for getAvailableProviders and other small methods (#5366)
* Adding Java support for getAvailableProviders, addFreeDimensionOverrideByName, disablePerSessionThreads and getProfilingStartTimeNs.

* Fixing copyright years, running spotless and adding javadoc and an accessor to OrtProvider.

* Renaming OrtSession.getProfilingStartTimeInNs.

* Removing ngraph as it's been deprecated.
2020-11-24 21:42:57 -08:00

504 lines
22 KiB
C

/*
* Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
* Licensed under the MIT License.
*/
#include <jni.h>
#include <string.h>
#include "onnxruntime/core/session/onnxruntime_c_api.h"
#include "OrtJniUtil.h"
#include "ai_onnxruntime_OrtSession_SessionOptions.h"
#ifdef WIN32
#include <Windows.h>
#else
#include <dlfcn.h>
#endif
// Providers
#include "onnxruntime/core/providers/cpu/cpu_provider_factory.h"
#include "onnxruntime/core/providers/cuda/cuda_provider_factory.h"
#include "onnxruntime/core/providers/dnnl/dnnl_provider_factory.h"
#include "onnxruntime/core/providers/nnapi/nnapi_provider_factory.h"
#include "onnxruntime/core/providers/nuphar/nuphar_provider_factory.h"
#include "onnxruntime/core/providers/openvino/openvino_provider_factory.h"
#include "onnxruntime/core/providers/tensorrt/tensorrt_provider_factory.h"
#include "onnxruntime/core/providers/migraphx/migraphx_provider_factory.h"
#include "onnxruntime/core/providers/acl/acl_provider_factory.h"
#ifdef USE_DIRECTML
#include "onnxruntime/core/providers/dml/dml_provider_factory.h"
#endif
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setExecutionMode
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setExecutionMode
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint mode) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
ExecutionMode exMode = convertExecutionMode(mode);
checkOrtStatus(jniEnv,api,api->SetSessionExecutionMode((OrtSessionOptions*) handle,exMode));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setOptimizationLevel
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setOptimizationLevel
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint optLevel) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
checkOrtStatus(jniEnv,api,api->SetSessionGraphOptimizationLevel((OrtSessionOptions*) handle, convertOptimizationLevel(optLevel)));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setIntraOpNumThreads
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setIntraOpNumThreads
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint numThreads) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
checkOrtStatus(jniEnv,api,api->SetIntraOpNumThreads((OrtSessionOptions*) handle, numThreads));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setInterOpNumThreads
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setInterOpNumThreads
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint numThreads) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
checkOrtStatus(jniEnv,api,api->SetInterOpNumThreads((OrtSessionOptions*) handle, numThreads));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setOptimizationModelFilePath
* Signature: (JJLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setOptimizationModelFilePath
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jstring pathString) {
(void) jobj; // Required JNI parameter not needed by function which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
#ifdef _WIN32
const jchar* path = (*jniEnv)->GetStringChars(jniEnv, pathString, NULL);
size_t stringLength = (*jniEnv)->GetStringLength(jniEnv, pathString);
wchar_t* newString = (wchar_t*)calloc(stringLength+1,sizeof(jchar));
wcsncpy_s(newString, stringLength+1, (const wchar_t*) path, stringLength);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,api->SetOptimizedModelFilePath((OrtSessionOptions*) handle, (const wchar_t*) newString));
free(newString);
(*jniEnv)->ReleaseStringChars(jniEnv,pathString,path);
#else
const char* path = (*jniEnv)->GetStringUTFChars(jniEnv, pathString, NULL);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,api->SetOptimizedModelFilePath((OrtSessionOptions*) handle, path));
(*jniEnv)->ReleaseStringUTFChars(jniEnv,pathString,path);
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: createOptions
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_createOptions
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
OrtSessionOptions* opts;
checkOrtStatus(jniEnv,api,api->CreateSessionOptions(&opts));
checkOrtStatus(jniEnv,api,api->SetInterOpNumThreads(opts, 1));
// Commented out due to constant OpenMP warning as this API is invalid when running with OpenMP.
// Not sure how to detect that from within the C API though.
//checkOrtStatus(jniEnv,api,api->SetIntraOpNumThreads(opts, 1));
return (jlong) opts;
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: closeOptions
* Signature: (JJ)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_closeOptions
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle) {
(void)jniEnv; (void)jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
api->ReleaseSessionOptions((OrtSessionOptions*)handle);
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setLoggerId
* Signature: (JJLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setLoggerId
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring loggerId) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
const char* loggerIdStr = (*jniEnv)->GetStringUTFChars(jniEnv, loggerId, NULL);
checkOrtStatus(jniEnv,api,api->SetSessionLogId(options, loggerIdStr));
(*jniEnv)->ReleaseStringUTFChars(jniEnv,loggerId,loggerIdStr);
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: enableProfiling
* Signature: (JJLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_enableProfiling
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring pathString) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
#ifdef _WIN32
const jchar* path = (*jniEnv)->GetStringChars(jniEnv, pathString, NULL);
size_t stringLength = (*jniEnv)->GetStringLength(jniEnv, pathString);
wchar_t* newString = (wchar_t*)calloc(stringLength+1,sizeof(jchar));
wcsncpy_s(newString, stringLength+1, (const wchar_t*) path, stringLength);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,api->EnableProfiling(options, (const wchar_t*) newString));
free(newString);
(*jniEnv)->ReleaseStringChars(jniEnv,pathString,path);
#else
const char* path = (*jniEnv)->GetStringUTFChars(jniEnv, pathString, NULL);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,api->EnableProfiling(options, path));
(*jniEnv)->ReleaseStringUTFChars(jniEnv,pathString,path);
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: disableProfiling
* Signature: (JJ)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_disableProfiling
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
checkOrtStatus(jniEnv,api,api->DisableProfiling(options));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setMemoryPatternOptimization
* Signature: (JJZ)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setMemoryPatternOptimization
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jboolean memPattern) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
if (memPattern) {
checkOrtStatus(jniEnv,api,api->EnableMemPattern(options));
} else {
checkOrtStatus(jniEnv,api,api->DisableMemPattern(options));
}
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setCPUArenaAllocator
* Signature: (JJZ)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setCPUArenaAllocator
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jboolean useArena) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
if (useArena) {
checkOrtStatus(jniEnv,api,api->EnableCpuMemArena(options));
} else {
checkOrtStatus(jniEnv,api,api->DisableCpuMemArena(options));
}
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setSessionLogLevel
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setSessionLogLevel
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jint logLevel) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
checkOrtStatus(jniEnv,api,api->SetSessionLogSeverityLevel(options,logLevel));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: setSessionLogVerbosityLevel
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_setSessionLogVerbosityLevel
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jint logLevel) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
checkOrtStatus(jniEnv,api,api->SetSessionLogVerbosityLevel(options,logLevel));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: registerCustomOpLibrary
* Signature: (JJLjava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_registerCustomOpLibrary
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring libraryPath) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*) apiHandle;
// Extract the string chars
const char* cPath = (*jniEnv)->GetStringUTFChars(jniEnv, libraryPath, NULL);
// Load the library
void* libraryHandle;
checkOrtStatus(jniEnv,api,api->RegisterCustomOpsLibrary((OrtSessionOptions*)optionsHandle,cPath,&libraryHandle));
// Release the string chars
(*jniEnv)->ReleaseStringUTFChars(jniEnv,libraryPath,cPath);
return (jlong) libraryHandle;
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: closeCustomLibraries
* Signature: ([J)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_closeCustomLibraries
(JNIEnv * jniEnv, jobject jobj, jlongArray libraryHandles) {
(void) jniEnv; (void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
// Get the number of elements in the array
jsize numHandles = (*jniEnv)->GetArrayLength(jniEnv, libraryHandles);
// Get the elements of the libraryHandles array
jlong* handles = (*jniEnv)->GetLongArrayElements(jniEnv,libraryHandles,NULL);
// Iterate the handles, calling the appropriate close function
for (jint i = 0; i < numHandles; i++) {
#ifdef WIN32
FreeLibrary((void*)handles[i]);
#else
dlclose((void*)handles[i]);
#endif
}
// Release the long array
(*jniEnv)->ReleaseLongArrayElements(jniEnv,libraryHandles,handles,JNI_ABORT);
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addFreeDimensionOverrideByName
* Signature: (JJLjava/lang/String;J)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addFreeDimensionOverrideByName
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring dimensionName, jlong dimensionValue) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
// Extract the string chars
const char* cName = (*jniEnv)->GetStringUTFChars(jniEnv, dimensionName, NULL);
checkOrtStatus(jniEnv,api,api->AddFreeDimensionOverrideByName(options,cName,dimensionValue));
// Release the string chars
(*jniEnv)->ReleaseStringUTFChars(jniEnv,dimensionName,cName);
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: disablePerSessionThreads
* Signature: (JJ)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_disablePerSessionThreads
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
checkOrtStatus(jniEnv,api,api->DisablePerSessionThreads(options));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addConfigEntry
* Signature: (JJLjava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addConfigEntry
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong optionsHandle, jstring configKey, jstring configValue) {
(void) jobj; // Required JNI parameters not needed by functions which don't need to access their host object.
const OrtApi* api = (const OrtApi*)apiHandle;
OrtSessionOptions* options = (OrtSessionOptions*) optionsHandle;
const char* configKeyStr = (*jniEnv)->GetStringUTFChars(jniEnv, configKey, NULL);
const char* configValueStr = (*jniEnv)->GetStringUTFChars(jniEnv, configValue, NULL);
checkOrtStatus(jniEnv,api,api->AddSessionConfigEntry(options, configKeyStr, configValueStr));
(*jniEnv)->ReleaseStringUTFChars(jniEnv, configKey, configKeyStr);
(*jniEnv)->ReleaseStringUTFChars(jniEnv, configValue, configValueStr);
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addCPU
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addCPU
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint useArena) {
(void) jobj; // Required JNI parameter not needed by functions which don't need to access their host object.
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_CPU((OrtSessionOptions*)handle,useArena));
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addCUDA
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addCUDA
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint deviceID) {
(void)jobj;
#ifdef USE_CUDA
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_CUDA((OrtSessionOptions*) handle, deviceID));
#else
(void)apiHandle;(void)handle;(void)deviceID; // Parameters used when CUDA is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with CUDA support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addDnnl
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addDnnl
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint useArena) {
(void)jobj;
#ifdef USE_DNNL
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_Dnnl((OrtSessionOptions*) handle,useArena));
#else
(void)apiHandle;(void)handle;(void)useArena; // Parameters used when DNNL is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with DNNL support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addOpenVINO
* Signature: (JJLjava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addOpenVINO
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jstring deviceIDString) {
(void)jobj;
#ifdef USE_OPENVINO
const char* deviceID = (*jniEnv)->GetStringUTFChars(jniEnv, deviceIDString, NULL);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_OpenVINO((OrtSessionOptions*) handle, deviceID));
(*jniEnv)->ReleaseStringUTFChars(jniEnv,deviceIDString,deviceID);
#else
(void)apiHandle;(void)handle;(void)deviceIDString; // Parameters used when OpenVINO is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with OpenVINO support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addTensorrt
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addTensorrt
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint deviceNum) {
(void)jobj;
#ifdef USE_TENSORRT
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_Tensorrt((OrtSessionOptions*) handle, deviceNum));
#else
(void)apiHandle;(void)handle;(void)deviceNum; // Parameters used when TensorRT is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with TensorRT support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addNnapi
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addNnapi
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint nnapiFlags) {
(void)jobj;
#ifdef USE_NNAPI
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_Nnapi((OrtSessionOptions*) handle, (uint32_t) nnapiFlags));
#else
(void)apiHandle;(void)handle;(void)nnapiFlags; // Parameters used when NNAPI is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with NNAPI support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addNuphar
* Signature: (JILjava/lang/String)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addNuphar
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint allowUnalignedBuffers, jstring settingsString) {
(void)jobj;
#ifdef USE_NUPHAR
const char* settings = (*jniEnv)->GetStringUTFChars(jniEnv, settingsString, NULL);
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_Nuphar((OrtSessionOptions*) handle, allowUnalignedBuffers, settings));
(*jniEnv)->ReleaseStringUTFChars(jniEnv,settingsString,settings);
#else
(void)apiHandle;(void)handle;(void)allowUnalignedBuffers;(void)settingsString; // Parameters used when Nuphar is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with Nuphar support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addMIGraphX
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addMIGraphX
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint deviceNum) {
(void)jobj;
#ifdef USE_MIGRAPHX
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_MIGraphX((OrtSessionOptions*) handle, deviceNum));
#else
(void)apiHandle;(void)handle;(void)deviceNum; // Parameters used when MIGraphX is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with MIGraphX support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addDirectML
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addDirectML
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint deviceID) {
(void)jobj;
#ifdef USE_DIRECTML
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_DML((OrtSessionOptions*) handle, deviceID));
#else
(void)apiHandle;(void)handle;(void)deviceID; // Parameters used when DirectML is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with DirectML support.");
#endif
}
/*
* Class: ai_onnxruntime_OrtSession_SessionOptions
* Method: addACL
* Signature: (JJI)V
*/
JNIEXPORT void JNICALL Java_ai_onnxruntime_OrtSession_00024SessionOptions_addACL
(JNIEnv * jniEnv, jobject jobj, jlong apiHandle, jlong handle, jint useArena) {
(void)jobj;
#ifdef USE_ACL
checkOrtStatus(jniEnv,(const OrtApi*)apiHandle,OrtSessionOptionsAppendExecutionProvider_ACL((OrtSessionOptions*) handle,useArena));
#else
(void)apiHandle;(void)handle;(void)useArena; // Parameters used when ACL is defined.
throwOrtException(jniEnv,convertErrorCode(ORT_INVALID_ARGUMENT),"This binary was not compiled with ACL support.");
#endif
}