onnxruntime
47 строк · 1.5 Кб
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4#import "ort_coreml_execution_provider.h"
5
6#import "cxx_api.h"
7#import "error_utils.h"
8#import "ort_session_internal.h"
9
10NS_ASSUME_NONNULL_BEGIN
11
12BOOL ORTIsCoreMLExecutionProviderAvailable() {
13return ORT_OBJC_API_COREML_EP_AVAILABLE ? YES : NO;
14}
15
16@implementation ORTCoreMLExecutionProviderOptions
17
18@end
19
20@implementation ORTSessionOptions (ORTSessionOptionsCoreMLEP)
21
22- (BOOL)appendCoreMLExecutionProviderWithOptions:(ORTCoreMLExecutionProviderOptions*)options
23error:(NSError**)error {
24#if ORT_OBJC_API_COREML_EP_AVAILABLE
25try {
26const uint32_t flags =
27(options.useCPUOnly ? COREML_FLAG_USE_CPU_ONLY : 0) |
28(options.enableOnSubgraphs ? COREML_FLAG_ENABLE_ON_SUBGRAPH : 0) |
29(options.onlyEnableForDevicesWithANE ? COREML_FLAG_ONLY_ENABLE_DEVICE_WITH_ANE : 0) |
30(options.onlyAllowStaticInputShapes ? COREML_FLAG_ONLY_ALLOW_STATIC_INPUT_SHAPES : 0) |
31(options.createMLProgram ? COREML_FLAG_CREATE_MLPROGRAM : 0);
32
33Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_CoreML(
34[self CXXAPIOrtSessionOptions], flags));
35return YES;
36}
37ORT_OBJC_API_IMPL_CATCH_RETURNING_BOOL(error);
38#else // !ORT_OBJC_API_COREML_EP_AVAILABLE
39static_cast<void>(options);
40ORTSaveCodeAndDescriptionToError(ORT_FAIL, "CoreML execution provider is not enabled.", error);
41return NO;
42#endif
43}
44
45@end
46
47NS_ASSUME_NONNULL_END
48