|  | // Copyright 2020 The IREE Authors | 
|  | // | 
|  | // Licensed under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  |  | 
|  | #include "runtime/bindings/tflite/options.h" | 
|  |  | 
|  | #include "runtime/bindings/tflite/shim.h" | 
|  |  | 
|  | void _TfLiteInterpreterOptionsSetDefaults(TfLiteInterpreterOptions* options) { | 
|  | options->num_threads = -1; | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern TfLiteInterpreterOptions* | 
|  | TfLiteInterpreterOptionsCreate() { | 
|  | iree_allocator_t allocator = iree_allocator_system(); | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  |  | 
|  | TfLiteInterpreterOptions* options = NULL; | 
|  | iree_status_t status = | 
|  | iree_allocator_malloc(allocator, sizeof(*options), (void**)&options); | 
|  | if (!iree_status_is_ok(iree_status_consume_code(status))) { | 
|  | IREE_TRACE_MESSAGE(ERROR, "failed options allocation"); | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | return NULL; | 
|  | } | 
|  | memset(options, 0, sizeof(*options)); | 
|  | options->allocator = allocator; | 
|  | _TfLiteInterpreterOptionsSetDefaults(options); | 
|  |  | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | return options; | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern void TfLiteInterpreterOptionsDelete( | 
|  | TfLiteInterpreterOptions* options) { | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  | iree_allocator_free(options->allocator, options); | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern void TfLiteInterpreterOptionsSetNumThreads( | 
|  | TfLiteInterpreterOptions* options, int32_t num_threads) { | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  | IREE_TRACE_ZONE_APPEND_VALUE_I64(z0, num_threads); | 
|  | options->num_threads = num_threads; | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern void TfLiteInterpreterOptionsAddDelegate( | 
|  | TfLiteInterpreterOptions* options, TfLiteDelegate* delegate) { | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  |  | 
|  | // Silently ignored as if it never tried to take an ops for itself. | 
|  | IREE_TRACE_MESSAGE(WARNING, | 
|  | "TfLiteInterpreterOptionsAddDelegate: delegates are " | 
|  | "unsupported and ignored in the IREE tflite shim"); | 
|  |  | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern void TfLiteInterpreterOptionsSetErrorReporter( | 
|  | TfLiteInterpreterOptions* options, | 
|  | void (*reporter)(void* user_data, const char* format, va_list args), | 
|  | void* user_data) { | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  | options->reporter = reporter; | 
|  | options->reporter_user_data = user_data; | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | } | 
|  |  | 
|  | TFL_CAPI_EXPORT extern void TfLiteInterpreterOptionsSetUseNNAPI( | 
|  | TfLiteInterpreterOptions* options, bool enable) { | 
|  | IREE_TRACE_ZONE_BEGIN(z0); | 
|  |  | 
|  | // Silently ignored as if it wasn't present. | 
|  | if (enable) { | 
|  | IREE_TRACE_ZONE_APPEND_TEXT(z0, "enabled", strlen("enabled")); | 
|  | IREE_TRACE_MESSAGE(WARNING, | 
|  | "TfLiteInterpreterOptionsSetUseNNAPI: the NNAPI is " | 
|  | "unsupported and ignored in the IREE tflite shim"); | 
|  | } else { | 
|  | IREE_TRACE_ZONE_APPEND_TEXT(z0, "enabled", strlen("disabled")); | 
|  | } | 
|  |  | 
|  | IREE_TRACE_ZONE_END(z0); | 
|  | } |