aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2019-05-22 18:00:30 +0100
committerSadik Armagan <sadik.armagan@arm.com>2019-05-22 18:00:30 +0100
commitd6539c58519962acd8967e93ceb2da049631c832 (patch)
treefc1a324e5b2a757d6b9e26a721db362988c93dfe
parentef08a1179a707f4d93616403c2c6e0d143f71351 (diff)
downloadandroid-nn-driver-d6539c58519962acd8967e93ceb2da049631c832.tar.gz
IVGCVSW-2911 Add Android Q support to android-nn-driver infrastructure
* Updated Android.mk to build Android Q * Added androidnn.go to inject cpp flags for Q * Create Runtime when ACL is not enabled Change-Id: Ia3e7a8e484fc81ce63998a65e29753cbf941173c Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Signed-off-by: Kevin May <kevin.may@arm.com>
-rw-r--r--Android.bp49
-rw-r--r--Android.mk130
-rw-r--r--ArmnnDevice.cpp12
-rw-r--r--Utils.hpp4
-rw-r--r--androidnn.go44
-rw-r--r--test/1.1/Mean.cpp4
-rw-r--r--test/1.1/Transpose.cpp4
-rw-r--r--test/Android.mk51
8 files changed, 259 insertions, 39 deletions
diff --git a/Android.bp b/Android.bp
index f6ccb099..4a997929 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3,6 +3,40 @@
// SPDX-License-Identifier: MIT
//
+bootstrap_go_package {
+ name: "armnn_nn_driver",
+ pkgPath: "android-nn-driver",
+ deps: [
+ "blueprint",
+ "blueprint-pathtools",
+ "blueprint-proptools",
+ "soong",
+ "soong-android",
+ "soong-cc",
+ ],
+ srcs: [
+ "androidnn.go",
+ ],
+ pluginFor: [ "soong_build" ],
+}
+
+armnn_nn_driver_defaults {
+ name: "armnn-nn-driver-default-cppflags",
+ cppflags: [
+ "-std=c++14",
+ "-fexceptions",
+ "-DBOOST_NO_AUTO_PTR",
+ "-DEMBEDDED_KERNELS",
+ "-DARM_COMPUTE_ASSERTS_ENABLED",
+ "-DARM_COMPUTE_CPP_SCHEDULER",
+ "-Wno-unused-parameter",
+ "-DNO_DOT_IN_TOOLCHAIN",
+
+ "-no-integrated-as"
+ ],
+ rtti: true,
+}
+
////////////////////////////////////////////
// //
// Arm Compute //
@@ -10,6 +44,7 @@
////////////////////////////////////////////
cc_library_static {
name: "armnn-arm_compute",
+ defaults: ["armnn-nn-driver-default-cppflags"],
proprietary: true,
local_include_dirs: ["clframework/build/android-arm64v8a/src/core",
"clframework/build/android-arm64v8a/src/core/CL",
@@ -698,16 +733,6 @@ cc_library_static {
],
},
},
- cppflags: [
- "-std=c++14",
- "-fexceptions",
- "-DEMBEDDED_KERNELS",
- "-DARM_COMPUTE_ASSERTS_ENABLED",
- "-DARM_COMPUTE_CPP_SCHEDULER",
- "-Wno-unused-parameter",
- "-DNO_DOT_IN_TOOLCHAIN",
- "-no-integrated-as"
- ],
rtti: true,
}
@@ -724,6 +749,10 @@ cc_defaults {
"-O3",
"-fexceptions",
"-Wno-unused-parameter",
+ "-DBOOST_NO_AUTO_PTR"
+ ],
+ cppflags: [
+ "-std=c++14"
],
rtti: true,
}
diff --git a/Android.mk b/Android.mk
index 3d23ecc7..8d2fe9f7 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,6 +6,25 @@
ANDROID_NN_DRIVER_LOCAL_PATH := $(call my-dir)
LOCAL_PATH := $(ANDROID_NN_DRIVER_LOCAL_PATH)
+P_OR_LATER := 0
+Q_OR_LATER := 0
+
+ifeq ($(PLATFORM_VERSION),9)
+P_OR_LATER := 1
+endif # PLATFORM_VERSION == 9
+ifeq ($(PLATFORM_VERSION),P)
+P_OR_LATER := 1
+endif # PLATFORM_VERSION == P
+
+ifeq ($(PLATFORM_VERSION),10)
+P_OR_LATER := 1
+Q_OR_LATER := 1
+endif # PLATFORM_VERSION == 10
+ifeq ($(PLATFORM_VERSION),Q)
+P_OR_LATER := 1
+Q_OR_LATER := 1
+endif # PLATFORM_VERSION == Q
+
# Configure these paths if you move the source or Khronos headers
ARMNN_HEADER_PATH := $(LOCAL_PATH)/armnn/include
ARMNN_UTILS_HEADER_PATH := $(LOCAL_PATH)/armnn/src/armnnUtils
@@ -17,13 +36,26 @@ NN_HEADER_PATH := $(LOCAL_PATH)/../../../frameworks/ml/nn/runtime/include
ARMNN_COMPUTE_CL_ENABLED := 1
ARMNN_COMPUTE_NEON_ENABLED := 1
+ifeq ($(ARMNN_COMPUTE_CL_ENABLE),0)
+ARMNN_COMPUTE_CL_ENABLED := 0
+endif
+
+ifeq ($(ARMNN_COMPUTE_NEON_ENABLE),0)
+ARMNN_COMPUTE_NEON_ENABLED := 0
+endif
+
#######################
# libarmnn-driver@1.0 #
#######################
include $(CLEAR_VARS)
LOCAL_MODULE := libarmnn-driver@1.0
+ifeq ($(Q_OR_LATER),1)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
LOCAL_ARM_MODE := arm
LOCAL_PROPRIETARY_MODULE := true
# Mark source files as dependent on Android.mk
@@ -40,20 +72,24 @@ LOCAL_CFLAGS := \
-fexceptions \
-Werror \
-Wno-format-security
-ifeq ($(PLATFORM_VERSION),9)
+
+ifeq ($(P_OR_LATER),1)
# Required to build with the changes made to the Android ML framework starting from Android P,
# regardless of the HAL version used for the build.
LOCAL_CFLAGS+= \
-DARMNN_ANDROID_P
endif # PLATFORM_VERSION == 9
+
ifeq ($(ARMNN_DRIVER_DEBUG),1)
LOCAL_CFLAGS+= \
-UNDEBUG
endif # ARMNN_DRIVER_DEBUG == 1
+
ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
LOCAL_CFLAGS += \
-DARMCOMPUTECL_ENABLED
endif # ARMNN_COMPUTE_CL_ENABLED == 1
+
ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
LOCAL_CFLAGS += \
-DARMCOMPUTENEON_ENABLED
@@ -90,18 +126,32 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
android.hardware.neuralnetworks@1.0 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
- libOpenCL
-ifeq ($(PLATFORM_VERSION),9)
+ android.hidl.memory@1.0
+
+ifeq ($(P_OR_LATER),1)
# Required to build the 1.0 version of the NN Driver on Android P and later versions,
# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
LOCAL_SHARED_LIBRARIES+= \
android.hardware.neuralnetworks@1.1
endif # PLATFORM_VERSION == 9
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libOpenCL
+endif
+
include $(BUILD_STATIC_LIBRARY)
-ifeq ($(PLATFORM_VERSION),9)
+ifeq ($(P_OR_LATER),1)
# The following target is available starting from Android P
#######################
@@ -110,7 +160,13 @@ ifeq ($(PLATFORM_VERSION),9)
include $(CLEAR_VARS)
LOCAL_MODULE := libarmnn-driver@1.1
+ifeq ($(Q_OR_LATER),1)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
+#PRODUCT_PACKAGES_ENG := libarmnn-driver@1.1
LOCAL_ARM_MODE := arm
LOCAL_PROPRIETARY_MODULE := true
# Mark source files as dependent on Android.mk
@@ -129,14 +185,17 @@ LOCAL_CFLAGS := \
-Wno-format-security \
-DARMNN_ANDROID_P \
-DARMNN_ANDROID_NN_V1_1
+
ifeq ($(ARMNN_DRIVER_DEBUG),1)
LOCAL_CFLAGS+= \
-UNDEBUG
endif # ARMNN_DRIVER_DEBUG == 1
+
ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
LOCAL_CFLAGS += \
-DARMCOMPUTECL_ENABLED
endif # ARMNN_COMPUTE_CL_ENABLED == 1
+
ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
LOCAL_CFLAGS += \
-DARMCOMPUTENEON_ENABLED
@@ -176,8 +235,21 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.neuralnetworks@1.0 \
android.hardware.neuralnetworks@1.1 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
+ android.hidl.memory@1.0
+
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
libOpenCL
+endif
include $(BUILD_STATIC_LIBRARY)
@@ -190,7 +262,12 @@ include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.neuralnetworks@1.0-service-armnn
LOCAL_INIT_RC := android.hardware.neuralnetworks@1.0-service-armnn.rc
+ifeq ($(Q_OR_LATER),1)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
LOCAL_ARM_MODE := arm
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_PROPRIETARY_MODULE := true
@@ -235,18 +312,31 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
android.hardware.neuralnetworks@1.0 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
- libOpenCL
-ifeq ($(PLATFORM_VERSION),9)
+ android.hidl.memory@1.0
+
+ifeq ($(P_OR_LATER),1)
# Required to build the 1.0 version of the NN Driver on Android P and later versions,
# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
LOCAL_SHARED_LIBRARIES+= \
android.hardware.neuralnetworks@1.1
endif # PLATFORM_VERSION == 9
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libOpenCL
+endif
include $(BUILD_EXECUTABLE)
-ifeq ($(PLATFORM_VERSION),9)
+ifeq ($(P_OR_LATER),1)
# The following target is available starting from Android P
#####################################################
@@ -256,7 +346,12 @@ include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.neuralnetworks@1.1-service-armnn
LOCAL_INIT_RC := android.hardware.neuralnetworks@1.1-service-armnn.rc
+ifeq ($(Q_OR_LATER),1)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
LOCAL_ARM_MODE := arm
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_PROPRIETARY_MODULE := true
@@ -303,8 +398,21 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.neuralnetworks@1.0 \
android.hardware.neuralnetworks@1.1 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
+ android.hidl.memory@1.0
+
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
libOpenCL
+endif
include $(BUILD_EXECUTABLE)
diff --git a/ArmnnDevice.cpp b/ArmnnDevice.cpp
index c96798a8..a03d9cc9 100644
--- a/ArmnnDevice.cpp
+++ b/ArmnnDevice.cpp
@@ -51,10 +51,11 @@ ArmnnDevice::ArmnnDevice(DriverOptions options)
SetMinimumLogSeverity(base::INFO);
}
+ armnn::IRuntime::CreationOptions runtimeOptions;
+
#if defined(ARMCOMPUTECL_ENABLED)
try
{
- armnn::IRuntime::CreationOptions options;
if (!m_Options.GetClTunedParametersFile().empty())
{
m_ClTunedParameters = armnn::IGpuAccTunedParameters::Create(m_Options.GetClTunedParametersMode(),
@@ -69,18 +70,17 @@ ArmnnDevice::ArmnnDevice(DriverOptions options)
ALOGW("ArmnnDevice: Failed to load CL tuned parameters file '%s': %s",
m_Options.GetClTunedParametersFile().c_str(), error.what());
}
- options.m_GpuAccTunedParameters = m_ClTunedParameters;
+ runtimeOptions.m_GpuAccTunedParameters = m_ClTunedParameters;
}
-
- options.m_EnableGpuProfiling = m_Options.IsGpuProfilingEnabled();
-
- m_Runtime = armnn::IRuntime::Create(options);
}
catch (const armnn::ClRuntimeUnavailableException& error)
{
ALOGE("ArmnnDevice: Failed to setup CL runtime: %s. Device will be unavailable.", error.what());
}
#endif
+ runtimeOptions.m_EnableGpuProfiling = m_Options.IsGpuProfilingEnabled();
+ m_Runtime = armnn::IRuntime::Create(runtimeOptions);
+
std::vector<armnn::BackendId> backends;
if (m_Runtime)
diff --git a/Utils.hpp b/Utils.hpp
index e55d8f80..42fef3fb 100644
--- a/Utils.hpp
+++ b/Utils.hpp
@@ -29,12 +29,12 @@ extern const armnn::PermutationVector g_DontPermute;
class UnsupportedOperand: public std::runtime_error
{
public:
- UnsupportedOperand(const OperandType type)
+ UnsupportedOperand(const V1_0::OperandType type)
: std::runtime_error("Operand type is unsupported")
, m_type(type)
{}
- OperandType m_type;
+ V1_0::OperandType m_type;
};
/// Swizzles tensor data in @a input according to the dimension mappings.
diff --git a/androidnn.go b/androidnn.go
new file mode 100644
index 00000000..aa83b1aa
--- /dev/null
+++ b/androidnn.go
@@ -0,0 +1,44 @@
+//
+// Copyright © 2017 ARM Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+package armnn_nn_driver
+
+import (
+ "android/soong/android"
+ "android/soong/cc"
+)
+
+func globalFlags(ctx android.BaseContext) []string {
+ var cppflags []string
+
+ if ctx.AConfig().PlatformVersionName() == "Q" {
+ cppflags = append(cppflags, "-fno-addrsig")
+ }
+
+ return cppflags
+}
+
+func armnnNNDriverDefaults(ctx android.LoadHookContext) {
+ type props struct {
+ Cppflags []string
+ }
+
+ p := &props{}
+ p.Cppflags = globalFlags(ctx)
+
+ ctx.AppendProperties(p)
+}
+
+func init() {
+
+ android.RegisterModuleType("armnn_nn_driver_defaults", armnnNNDriverDefaultsFactory)
+}
+
+func armnnNNDriverDefaultsFactory() android.Module {
+
+ module := cc.DefaultsFactory()
+ android.AddLoadHook(module, armnnNNDriverDefaults)
+ return module
+}
diff --git a/test/1.1/Mean.cpp b/test/1.1/Mean.cpp
index 4ebb8cfa..7d482433 100644
--- a/test/1.1/Mean.cpp
+++ b/test/1.1/Mean.cpp
@@ -32,7 +32,7 @@ void MeanTestImpl(const TestTensor& input,
V1_1::Model model = {};
AddInputOperand (model, input.GetDimensions());
- AddTensorOperand(model, axisDimensions, const_cast<int32_t*>(axisValues), OperandType::TENSOR_INT32);
+ AddTensorOperand(model, axisDimensions, const_cast<int32_t*>(axisValues), V1_0::OperandType::TENSOR_INT32);
AddIntOperand (model, keepDims);
AddOutputOperand(model, expectedOutput.GetDimensions());
@@ -42,7 +42,7 @@ void MeanTestImpl(const TestTensor& input,
model.operations[0].outputs = hidl_vec<uint32_t>{ 3 };
model.relaxComputationFloat32toFloat16 = fp16Enabled;
- android::sp<IPreparedModel> preparedModel = PrepareModel(model, *driver);
+ android::sp<V1_0::IPreparedModel> preparedModel = PrepareModel(model, *driver);
// The request's memory pools will follow the same order as the inputs
DataLocation inLoc = {};
diff --git a/test/1.1/Transpose.cpp b/test/1.1/Transpose.cpp
index a0521436..6dc3e0ee 100644
--- a/test/1.1/Transpose.cpp
+++ b/test/1.1/Transpose.cpp
@@ -30,7 +30,7 @@ void TransposeTestImpl(const TestTensor & inputs, int32_t perm[],
V1_1::Model model = {};
AddInputOperand(model,inputs.GetDimensions());
- AddTensorOperand(model, hidl_vec<uint32_t>{4}, perm, OperandType::TENSOR_INT32);
+ AddTensorOperand(model, hidl_vec<uint32_t>{4}, perm, V1_0::OperandType::TENSOR_INT32);
AddOutputOperand(model, expectedOutputTensor.GetDimensions());
model.operations.resize(1);
@@ -38,7 +38,7 @@ void TransposeTestImpl(const TestTensor & inputs, int32_t perm[],
model.operations[0].inputs = hidl_vec<uint32_t>{0, 1};
model.operations[0].outputs = hidl_vec<uint32_t>{2};
- android::sp<IPreparedModel> preparedModel = PrepareModel(model, *driver);
+ android::sp<V1_0::IPreparedModel> preparedModel = PrepareModel(model, *driver);
// the request's memory pools will follow the same order as
// the inputs
diff --git a/test/Android.mk b/test/Android.mk
index 87f0b636..820cfd61 100644
--- a/test/Android.mk
+++ b/test/Android.mk
@@ -18,7 +18,12 @@ ARMNN_DRIVER_HEADER_PATH := $(LOCAL_PATH)/..
include $(CLEAR_VARS)
LOCAL_MODULE := armnn-driver-tests@1.0
+ifeq ($(PLATFORM_VERSION),Q)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
LOCAL_ARM_MODE := arm
LOCAL_PROPRIETARY_MODULE := true
# Mark source files as dependent on Android.mk
@@ -36,7 +41,8 @@ LOCAL_CFLAGS := \
-Werror \
-O0 \
-UNDEBUG
-ifeq ($(PLATFORM_VERSION),9)
+
+ifeq ($(P_OR_LATER),1)
# Required to build with the changes made to the Android ML framework starting from Android P,
# regardless of the HAL version used for the build.
LOCAL_CFLAGS+= \
@@ -78,18 +84,32 @@ LOCAL_SHARED_LIBRARIES := \
libutils \
android.hardware.neuralnetworks@1.0 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
- libOpenCL
-ifeq ($(PLATFORM_VERSION),9)
+ android.hidl.memory@1.0
+
+ifeq ($(P_OR_LATER),1)
# Required to build the 1.0 version of the NN Driver on Android P and later versions,
# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
LOCAL_SHARED_LIBRARIES+= \
android.hardware.neuralnetworks@1.1
endif # PLATFORM_VERSION == 9
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libOpenCL
+endif
+
include $(BUILD_EXECUTABLE)
-ifeq ($(PLATFORM_VERSION),9)
+ifeq ($(P_OR_LATER),1)
# The following target is available starting from Android P
##########################
@@ -98,7 +118,13 @@ ifeq ($(PLATFORM_VERSION),9)
include $(CLEAR_VARS)
LOCAL_MODULE := armnn-driver-tests@1.1
+ifeq ($(PLATFORM_VERSION),Q)
+# "eng" is deprecated in Android Q
+LOCAL_MODULE_TAGS := optional
+else
LOCAL_MODULE_TAGS := eng optional
+endif
+#PRODUCT_PACKAGES_ENG := libarmnn
LOCAL_ARM_MODE := arm
LOCAL_PROPRIETARY_MODULE := true
# Mark source files as dependent on Android.mk
@@ -157,8 +183,21 @@ LOCAL_SHARED_LIBRARIES := \
android.hardware.neuralnetworks@1.0 \
android.hardware.neuralnetworks@1.1 \
android.hidl.allocator@1.0 \
- android.hidl.memory@1.0 \
+ android.hidl.memory@1.0
+
+ifeq ($(Q_OR_LATER),1)
+LOCAL_SHARED_LIBRARIES+= \
+ libnativewindow \
+ libui \
+ libfmq \
+ libcutils \
+ android.hardware.neuralnetworks@1.2
+endif # PLATFORM_VERSION == Q
+
+ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
+LOCAL_SHARED_LIBRARIES+= \
libOpenCL
+endif
include $(BUILD_EXECUTABLE)