1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #define LOG_TAG "ArmnnDriver" 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <android-base/logging.h> 9*89c4ff92SAndroid Build Coastguard Worker #include <android-base/scopeguard.h> 10*89c4ff92SAndroid Build Coastguard Worker #include <dlfcn.h> 11*89c4ff92SAndroid Build Coastguard Worker 12*89c4ff92SAndroid Build Coastguard Worker #include "NeuralNetworksShim.h" 13*89c4ff92SAndroid Build Coastguard Worker #include "SupportLibrarySymbols.h" 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker #include <string> 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker using namespace std; 18*89c4ff92SAndroid Build Coastguard Worker main()19*89c4ff92SAndroid Build Coastguard Workerint main() 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker /// The platform shim allows use of the armnn support library driver (arm-armnn-sl) to create a 22*89c4ff92SAndroid Build Coastguard Worker /// binderized vendor service (arm-armnn-shim) that is started at device startup 23*89c4ff92SAndroid Build Coastguard Worker 24*89c4ff92SAndroid Build Coastguard Worker NnApiSLDriverImpl* impl = ANeuralNetworks_getSLDriverImpl(); 25*89c4ff92SAndroid Build Coastguard Worker if (impl == nullptr) 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker LOG(ERROR) << "ArmnnDriver: ANeuralNetworks_getSLDriverImpl returned nullptr!!!"; 28*89c4ff92SAndroid Build Coastguard Worker return EXIT_FAILURE; 29*89c4ff92SAndroid Build Coastguard Worker } 30*89c4ff92SAndroid Build Coastguard Worker 31*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimDeviceInfo* deviceInfo; 32*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimDeviceInfo_create(&deviceInfo, 33*89c4ff92SAndroid Build Coastguard Worker /*deviceName=*/"arm-armnn-sl", 34*89c4ff92SAndroid Build Coastguard Worker /*serviceName=*/"google-armnn"); 35*89c4ff92SAndroid Build Coastguard Worker const auto guardDeviceInfo = android::base::make_scope_guard( 36*89c4ff92SAndroid Build Coastguard Worker [deviceInfo] { ANeuralNetworksShimDeviceInfo_free(deviceInfo); }); 37*89c4ff92SAndroid Build Coastguard Worker 38*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams* params; 39*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams_create(impl, ¶ms); 40*89c4ff92SAndroid Build Coastguard Worker const auto guardParams = android::base::make_scope_guard( 41*89c4ff92SAndroid Build Coastguard Worker [params] { ANeuralNetworksShimRegistrationParams_free(params); }); 42*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams_addDeviceInfo(params, deviceInfo); 43*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams_setNumberOfListenerThreads(params, 15); 44*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams_registerAsLazyService(params, false); 45*89c4ff92SAndroid Build Coastguard Worker ANeuralNetworksShimRegistrationParams_fallbackToMinimumSupportDevice(params, false); 46*89c4ff92SAndroid Build Coastguard Worker 47*89c4ff92SAndroid Build Coastguard Worker auto result = ANeuralNetworksShim_registerSupportLibraryService(params); 48*89c4ff92SAndroid Build Coastguard Worker LOG(ERROR) << "ArmnnDriver: ANeuralNetworksShim_registerSupportLibraryService returned error status: " << result; 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker return EXIT_FAILURE; 51*89c4ff92SAndroid Build Coastguard Worker } 52