aboutsummaryrefslogtreecommitdiff
path: root/shim
diff options
context:
space:
mode:
Diffstat (limited to 'shim')
-rw-r--r--shim/Android.bp186
-rw-r--r--shim/Android.bp.off97
-rw-r--r--shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc3
-rw-r--r--shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml2
-rw-r--r--shim/shimservice.cpp2
-rwxr-xr-xshim/sl/build/android_arm/libarmnn_support_library_prebuilt.sobin0 -> 25176608 bytes
-rwxr-xr-xshim/sl/build/android_arm64/libarmnn_support_library_prebuilt.sobin0 -> 31964448 bytes
-rw-r--r--shim/sl/canonical/ArmnnDevice.cpp2
-rw-r--r--shim/sl/canonical/ArmnnDriverImpl.cpp7
-rw-r--r--shim/sl/canonical/ArmnnPreparedModel.cpp3
-rw-r--r--shim/sl/canonical/ConversionUtils.hpp8
-rw-r--r--shim/sl/canonical/DriverOptions.cpp11
-rwxr-xr-xshim/sl/generate_prebuilts.sh35
13 files changed, 243 insertions, 113 deletions
diff --git a/shim/Android.bp b/shim/Android.bp
new file mode 100644
index 000000000..fd460b0a4
--- /dev/null
+++ b/shim/Android.bp
@@ -0,0 +1,186 @@
+//
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+////////////////////////////////////////////
+// //
+// libarmnn_support_library //
+// //
+////////////////////////////////////////////
+
+cc_library_shared {
+ name: "libarmnn_support_library",
+ enabled : false,
+ arch: {
+ arm: {
+ enabled : true,
+ },
+ arm64: {
+ enabled : true,
+ },
+ },
+ defaults: ["neuralnetworks_cl_defaults"],
+ include_dirs: [
+ "external/armnn/include",
+ "external/armnn/third-party",
+ "system/logging/liblog/include",
+ ],
+ srcs: [
+ "sl/support_library_service.cpp",
+ "sl/canonical/*.cpp",
+ ],
+ shared_libs: [
+ "liblog",
+ "libnativewindow",
+ "libcrypto",
+ ],
+ openmp: true,
+ cflags: [
+ "-DNN_COMPATIBILITY_LIBRARY_BUILD",
+ "-fexceptions",
+ "-fPIC",
+ "-std=c++17",
+ "-Wall",
+ "-fexceptions",
+ "-Werror",
+ "-Wno-unused-parameter",
+ "-Wno-unused-private-field",
+ "-Wno-unused-variable",
+ "-Wno-attributes",
+ "-Wno-format-security",
+ "-Wno-extern-c-compat",
+ "-Wno-invalid-partial-specialization",
+ "-Wno-unneeded-internal-declaration",
+ "-Wno-unused-function",
+ "-DNN_DEBUGGABLE",
+ ],
+ // Change the soname, this library will be added as cc_prebuilt_library_shared
+ // with different name to android.hardware.neuralnetworks-shim-service-armnn
+ ldflags: [
+ "-Wl,-soname,libarmnn_support_library_prebuilt.so",
+ ],
+ static_libs: [
+ "libbase_ndk",
+ "libneuralnetworks_common_cl_cpu",
+ "libtflite_static",
+ "neuralnetworks_canonical_sample_driver_cl",
+ "neuralnetworks_types_cl",
+ ],
+ whole_static_libs: [
+ "libneuralnetworks_cl",
+ "libarmnn",
+ ],
+}
+
+////////////////////////////////////////////
+// //
+// libarmnn_support_library_prebuilt //
+// //
+////////////////////////////////////////////
+
+cc_prebuilt_library_shared {
+ name: "libarmnn_support_library_prebuilt",
+ check_elf_files: false,
+ host_supported: false,
+ shared_libs: [
+ "libbase",
+ "libcutils",
+ "liblog",
+ "libnativewindow",
+ ],
+ proprietary: true,
+ vendor: true,
+ apex_available: ["//apex_available:vendor", "//apex_available:platform"],
+ allow_undefined_symbols: true,
+ target: {
+ android_x86_64: {
+ enabled: false,
+ },
+ android_x86: {
+ enabled: false,
+ },
+ android_riscv64: {
+ enabled: false,
+ },
+ android_arm64: {
+ srcs: ["sl/build/android_arm64/libarmnn_support_library_prebuilt.so"],
+ },
+ android_arm: {
+ srcs: ["sl/build/android_arm/libarmnn_support_library_prebuilt.so"],
+ },
+ },
+}
+
+////////////////////////////////////////////
+// //
+// shim service //
+// //
+////////////////////////////////////////////
+
+cc_defaults {
+ name: "NeuralNetworksShimArmnnDriverAidl_defaults",
+ enabled : false,
+ arch: {
+ arm: {
+ enabled : true,
+ },
+ arm64: {
+ enabled : true,
+ },
+ },
+ check_elf_files: false,
+ host_supported: false,
+ defaults: [
+ "neuralnetworks_defaults",
+ "neuralnetworks_use_latest_utils_hal_aidl",
+ ],
+ header_libs: [
+ "libneuralnetworks_headers",
+ ],
+ cflags: [
+ "-DNN_COMPATIBILITY_LIBRARY_BUILD",
+ ],
+ ldflags: [
+ // libarmnn_support_library has undefined symbols that
+ // cause linker failures with --no-allow-shlib-undefined, the default
+ // when linking executables. See b/181227567
+ "-Wl,--allow-shlib-undefined",
+ ],
+ static_libs: [
+ "libaidlcommonsupport",
+ "libarect",
+ "libcutils",
+ "libneuralnetworks_common",
+ "libneuralnetworks_shim_static",
+ "neuralnetworks_supportlibrary_loader",
+ "neuralnetworks_utils_hal_common",
+ ],
+ shared_libs: [
+ "libbase",
+ "libbinder_ndk",
+ "libhidlbase",
+ "libhidlmemory",
+ "liblog",
+ "libnativewindow",
+ "libutils",
+ "libarmnn_support_library_prebuilt",
+ ],
+ apex_available: ["//apex_available:vendor", "//apex_available:platform"],
+}
+
+cc_defaults {
+ name: "NeuralNetworksShimArmnnDriverAidl_server_defaults",
+ defaults: ["NeuralNetworksShimArmnnDriverAidl_defaults"],
+ relative_install_path: "hw",
+ proprietary: true,
+}
+
+cc_binary {
+ name: "android.hardware.neuralnetworks-shim-service-armnn",
+ srcs: ["shimservice.cpp"],
+ defaults: ["NeuralNetworksShimArmnnDriverAidl_server_defaults"],
+ stl: "libc++_static",
+ init_rc: ["config/android.hardware.neuralnetworks-shim-service-armnn.rc"],
+ vintf_fragments: ["config/android.hardware.neuralnetworks-shim-service-armnn.xml"],
+}
diff --git a/shim/Android.bp.off b/shim/Android.bp.off
deleted file mode 100644
index f3810da46..000000000
--- a/shim/Android.bp.off
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-
-////////////////////////////////////////////
-// //
-// shim service //
-// //
-////////////////////////////////////////////
-
-cc_prebuilt_library_shared {
- name: "libarmnn_support_library",
- check_elf_files: false,
- shared_libs: [
- "libbase",
- "libcutils",
- "liblog",
- "libnativewindow",
- ],
- proprietary: true,
- vendor: true,
- // libnativewindow versioning trips this check. b/181227567 for fixing
- allow_undefined_symbols: true,
- target: {
- android_x86_64: {
- srcs: ["./sl/build/libarmnn_support_library.so"],
- },
- android_x86: {
- srcs: ["./sl/build/libarmnn_support_library.so"],
- },
- android_arm64: {
- srcs: ["./sl/build/libarmnn_support_library.so"],
- },
- android_arm: {
- srcs: ["./sl/build/libarmnn_support_library.so"],
- },
- },
- apex_available: ["//apex_available:vendor"],
-}
-
-cc_defaults {
- name: "NeuralNetworksShimArmnnDriverAidl_defaults",
- defaults: ["neuralnetworks_defaults"],
- header_libs: [
- "libneuralnetworks_headers",
- ],
- cflags: [
- "-DNN_COMPATIBILITY_LIBRARY_BUILD",
- ],
- static_libs: [
- "android.hardware.common-V2-ndk_platform",
- "android.hardware.graphics.common-V2-ndk_platform",
- "android.hardware.neuralnetworks-V1-ndk_platform",
- "libaidlcommonsupport",
- "libarect",
- "libcutils",
- "libneuralnetworks_shim_static",
- "neuralnetworks_supportlibrary_loader",
- "neuralnetworks_types",
- "libneuralnetworks_common",
- "neuralnetworks_utils_hal_aidl",
- "neuralnetworks_utils_hal_common",
- ],
- shared_libs: [
- "android.hidl.allocator@1.0",
- "android.hidl.memory@1.0",
- "libbase",
- "libhidltransport",
- "libbinder_ndk",
- "libhidlbase",
- "libhidlmemory",
- "liblog",
- "libnativewindow",
- "libutils",
- "libarmnn_support_library",
- ],
-
-}
-
-cc_defaults {
- name: "NeuralNetworksShimArmnnDriverAidl_server_defaults",
- defaults: ["NeuralNetworksShimArmnnDriverAidl_defaults"],
- relative_install_path: "hw",
- proprietary: true,
-}
-
-
-cc_binary {
- name: "android.hardware.neuralnetworks-shim-service-armnn",
- srcs: ["./shimservice.cpp"],
- enabled: true,
- defaults: ["NeuralNetworksShimArmnnDriverAidl_server_defaults"],
- init_rc: ["./config/android.hardware.neuralnetworks-shim-service-armnn.rc"],
- vintf_fragments: ["./config/android.hardware.neuralnetworks-shim-service-armnn.xml"],
-}
diff --git a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc
index 55661e424..df210e46d 100644
--- a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc
+++ b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.rc
@@ -1,4 +1,5 @@
-service neuralnetworks_hal_service_armnn /vendor/bin/hw/android.hardware.neuralnetworks-shim-service-armnn
+service hal_neuralnetworks_armnn /vendor/bin/hw/android.hardware.neuralnetworks-shim-service-armnn
class hal
user system
group system
+ task_profiles NNApiHALPerformance
diff --git a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml
index a1258a588..5051763af 100644
--- a/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml
+++ b/shim/config/android.hardware.neuralnetworks-shim-service-armnn.xml
@@ -5,6 +5,6 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.neuralnetworks</name>
- <fqname>IDevice/arm-armnn-shim</fqname>
+ <fqname>IDevice/google-armnn</fqname>
</hal>
</manifest>
diff --git a/shim/shimservice.cpp b/shim/shimservice.cpp
index 44dc596c7..4339f3505 100644
--- a/shim/shimservice.cpp
+++ b/shim/shimservice.cpp
@@ -31,7 +31,7 @@ int main()
ANeuralNetworksShimDeviceInfo* deviceInfo;
ANeuralNetworksShimDeviceInfo_create(&deviceInfo,
/*deviceName=*/"arm-armnn-sl",
- /*serviceName=*/"arm-armnn-shim");
+ /*serviceName=*/"google-armnn");
const auto guardDeviceInfo = android::base::make_scope_guard(
[deviceInfo] { ANeuralNetworksShimDeviceInfo_free(deviceInfo); });
diff --git a/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so b/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so
new file mode 100755
index 000000000..a655c7579
--- /dev/null
+++ b/shim/sl/build/android_arm/libarmnn_support_library_prebuilt.so
Binary files differ
diff --git a/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so
new file mode 100755
index 000000000..a4a88ea9c
--- /dev/null
+++ b/shim/sl/build/android_arm64/libarmnn_support_library_prebuilt.so
Binary files differ
diff --git a/shim/sl/canonical/ArmnnDevice.cpp b/shim/sl/canonical/ArmnnDevice.cpp
index 71135cb13..8f2212dba 100644
--- a/shim/sl/canonical/ArmnnDevice.cpp
+++ b/shim/sl/canonical/ArmnnDevice.cpp
@@ -76,6 +76,7 @@ ArmnnDevice::ArmnnDevice(DriverOptions options)
}
armnn::IRuntime::CreationOptions runtimeOptions;
+#if defined(ARMCOMPUTECL_ENABLED)
if (std::find(m_Options.GetBackends().begin(),
m_Options.GetBackends().end(),
armnn::Compute::GpuAcc) != m_Options.GetBackends().end())
@@ -108,6 +109,7 @@ ArmnnDevice::ArmnnDevice(DriverOptions options)
VLOG(DRIVER) << "ArmnnDevice: Unknown exception: %s. Device will be unavailable." << error.what();
}
}
+#endif
runtimeOptions.m_EnableGpuProfiling = m_Options.IsGpuProfilingEnabled();
m_Runtime = armnn::IRuntime::Create(runtimeOptions);
diff --git a/shim/sl/canonical/ArmnnDriverImpl.cpp b/shim/sl/canonical/ArmnnDriverImpl.cpp
index 0f7888bb4..060dd5a25 100644
--- a/shim/sl/canonical/ArmnnDriverImpl.cpp
+++ b/shim/sl/canonical/ArmnnDriverImpl.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -400,6 +400,11 @@ GeneralResult<SharedPreparedModel> ArmnnDriverImpl::PrepareArmnnModelFromCache(
pread(*dataCacheHandle[0], hashValue.data(), hashValue.size(), 0);
// Read the model
+ if (cachedDataSize < hashValue.size())
+ {
+ return NN_ERROR(ErrorStatus::GENERAL_FAILURE)
+ << "ArmnnDriverImpl::prepareModelFromCache(): cachedDataSize is less than hashValue!";
+ }
std::vector<uint8_t> dataCacheData(cachedDataSize - hashValue.size());
pread(*dataCacheHandle[0], dataCacheData.data(), dataCacheData.size(), hashValue.size());
auto calculatedHashValue = Hash(dataCacheData);
diff --git a/shim/sl/canonical/ArmnnPreparedModel.cpp b/shim/sl/canonical/ArmnnPreparedModel.cpp
index 79cd24134..192ea599b 100644
--- a/shim/sl/canonical/ArmnnPreparedModel.cpp
+++ b/shim/sl/canonical/ArmnnPreparedModel.cpp
@@ -569,10 +569,13 @@ GeneralResult<std::pair<SyncFence, ExecuteFencedInfoCallback>> ArmnnPreparedMode
{
case ErrorStatus::OUTPUT_INSUFFICIENT_SIZE:
result.error().code = (ErrorStatus::OUTPUT_INSUFFICIENT_SIZE);
+ [[fallthrough]];
case ErrorStatus::GENERAL_FAILURE:
result.error().code = (ErrorStatus::GENERAL_FAILURE);
+ [[fallthrough]];
case ErrorStatus::INVALID_ARGUMENT:
result.error().code = (ErrorStatus::INVALID_ARGUMENT);
+ [[fallthrough]];
default:
{
result.value() = std::make_pair(timingSinceLaunch, timingAfterFence);
diff --git a/shim/sl/canonical/ConversionUtils.hpp b/shim/sl/canonical/ConversionUtils.hpp
index 91a8e3080..f595db255 100644
--- a/shim/sl/canonical/ConversionUtils.hpp
+++ b/shim/sl/canonical/ConversionUtils.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -455,7 +455,7 @@ void SanitizeBiasQuantizationScale(armnn::TensorInfo& biasInfo,
// 4D Tensor Permutations
const armnn::PermutationVector IdentityPermutation4D({ 0U, 1U, 2U, 3U });
const armnn::PermutationVector IdentityPermutation3D({ 0U, 1U, 2U });
-const armnn::PermutationVector SwapDim1And2({ 0U, 2U, 1U, 3U });
+const armnn::PermutationVector SwapDim2And3({ 0U, 1U, 3U, 2U });
// 3D Permutation Vectors
const armnn::PermutationVector RotateTensorLeft({ 1U, 2U, 0U });
@@ -603,8 +603,8 @@ bool CreateConcatPermutationParameters(const unsigned int numberOfDimensions,
// or along dimension 0 or 2 for a 3-D tensor.
if (numberOfDimensions == 4 && concatDimension == 2)
{
- concatDimension = 1;
- permutationPair = std::make_pair(SwapDim1And2, SwapDim1And2);
+ concatDimension = 3;
+ permutationPair = std::make_pair(SwapDim2And3, SwapDim2And3);
needPermute = true;
}
else if (numberOfDimensions == 3 && concatDimension == 1)
diff --git a/shim/sl/canonical/DriverOptions.cpp b/shim/sl/canonical/DriverOptions.cpp
index 5c73edfaa..15d08d8cb 100644
--- a/shim/sl/canonical/DriverOptions.cpp
+++ b/shim/sl/canonical/DriverOptions.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -254,13 +254,8 @@ DriverOptions::DriverOptions()
// If no backends have been specified then the default value is GpuAcc.
if (backends.empty())
{
- VLOG(DRIVER) << "No backends have been specified:";
- std::cout << optionsDesc.help() << std::endl
- << "Unable to start:" << std::endl
- << "No backends have been specified" << std::endl;
- m_ShouldExit = true;
- m_ExitCode = EXIT_FAILURE;
- return;
+ VLOG(DRIVER) << "No backends have been specified, defaulting to GpuAcc.";
+ m_Backends.emplace_back("GpuAcc");
}
if (!unsupportedOperationsAsString.empty())
diff --git a/shim/sl/generate_prebuilts.sh b/shim/sl/generate_prebuilts.sh
new file mode 100755
index 000000000..7e6c67120
--- /dev/null
+++ b/shim/sl/generate_prebuilts.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Generate ArmNN SL driver prebuilts
+
+eval set -- "$OPTS"
+if [[ -z "$ANDROID_BUILD_TOP" ]]; then
+ echo ANDROID_BUILD_TOP not set, bailing out
+ echo you must run lunch before running this script
+ exit 1
+fi
+
+set -e
+cd $ANDROID_BUILD_TOP
+
+source build/envsetup.sh
+ARCHS="arm,arm64"
+ARMNN_SL_DRIVER="libarmnn_support_library"
+
+for arch in ${ARCHS//,/ }
+do
+ lunch "aosp_${arch}-userdebug"
+
+ LIB=lib
+ if [[ $arch =~ "64" ]]; then
+ LIB=lib64
+ fi
+
+ TMPFILE=$(mktemp)
+ build/soong/soong_ui.bash --make-mode ${ARMNN_SL_DRIVER} 2>&1 | tee ${TMPFILE}
+ TARGETDIR=external/armnn/shim/sl/build/android_${arch}/${ARMNN_SL_DRIVER}_prebuilt.so
+ mkdir -p ${TARGETDIR%/*}
+ cp $OUT/system/${LIB}/${ARMNN_SL_DRIVER}.so ${TARGETDIR}
+
+done
+