| // 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); |
| } |