1From 3ebaf5f8d6d98cbdfe009fc94a378184a77f07fe Mon Sep 17 00:00:00 2001 2From: chengfeng27 <chengfeng27@huawei.com> 3Date: Tue, 3 Sep 2024 21:46:41 +0800 4Subject: [PATCH] add compile option SP, extensions white list 5 6--- 7 mindspore/lite/BUILD.gn | 9 +++++++- 8 mindspore/lite/mindir/BUILD.gn | 22 +++++++++++++++++-- 9 mindspore/lite/src/litert/c_api/context_c.cc | 10 +++++++++ 10 .../delegate/nnrt/extension_options_parser.cc | 4 ++-- 11 .../src/litert/delegate/nnrt/nnrt_delegate.cc | 2 +- 12 mindspore/lite/src/litert/js_api/BUILD.gn | 6 +++++ 13 6 files changed, 47 insertions(+), 6 deletions(-) 14 15diff --git a/mindspore/lite/BUILD.gn b/mindspore/lite/BUILD.gn 16index c7c51620..6deff934 100644 17--- a/mindspore/lite/BUILD.gn 18+++ b/mindspore/lite/BUILD.gn 19@@ -352,6 +352,7 @@ if ((target_cpu == "arm" || target_cpu == "arm64") && !is_emulator) { 20 } 21 22 ohos_shared_library("mindspore_lib") { 23+ branch_protector_ret = "pac_ret" 24 deps = [ 25 "../ccsrc/plugin/device/cpu/kernel/nnacl/:nnacl_obj", 26 "../core/mindrt/:mindrt_obj", 27@@ -486,6 +487,7 @@ ohos_shared_library("mindspore_lib") { 28 29 # NDK lib 30 ohos_shared_library("mindspore_ndk") { 31+ branch_protector_ret = "pac_ret" 32 deps = [ 33 ":mindspore_lib", 34 ":mindspore_train_lib", 35@@ -664,6 +666,7 @@ not_needed(fp16_train_kernel_sources) 36 all_train_sources += fp32_train_kernel_sources 37 38 ohos_shared_library("mindspore_train_lib") { 39+ branch_protector_ret = "pac_ret" 40 deps = [ 41 ":mindspore_lib", 42 ] 43@@ -716,6 +719,7 @@ ohos_shared_library("mindspore_train_lib") { 44 ":mindspore_api", 45 ":disable_android", 46 ":train_kernel_option", 47+ ":secure_option", 48 ] 49 50 remove_configs = [ "//build/config/compiler:no_rtti" ] 51@@ -766,7 +770,10 @@ config("disable_android") { 52 } 53 54 config("secure_option") { 55- cflags = [ "-fstack-protector-all" ] 56+ cflags = [ 57+ "-fstack-protector-all", 58+ "-D_FORTIFY_SOURCE=2", 59+ ] 60 } 61 62 config("train_kernel_option") { 63diff --git a/mindspore/lite/mindir/BUILD.gn b/mindspore/lite/mindir/BUILD.gn 64index 975d201f..a134ddb2 100644 65--- a/mindspore/lite/mindir/BUILD.gn 66+++ b/mindspore/lite/mindir/BUILD.gn 67@@ -26,7 +26,26 @@ config("mindir_config") { 68 ] 69 } 70 71+config("mindir_secure_disable_android") { 72+ cflags = [ 73+ "-UANDROID", 74+ "-U__ANDROID__", 75+ "-U__ANDROID_API__", 76+ "-fstack-protector-all", 77+ "-D_FORTIFY_SOURCE=2", 78+ ] 79+ cflags_cc = [ 80+ "-UANDROID", 81+ "-U__ANDROID__", 82+ "-U__ANDROID_API__", 83+ ] 84+ ldflags = [ 85+ "-Wl,--no-as-needed", 86+ ] 87+} 88+ 89 ohos_shared_library("mindir_lib") { 90+ branch_protector_ret = "pac_ret" 91 include_dirs = [ 92 "../", 93 "../../core", 94@@ -58,8 +77,7 @@ ohos_shared_library("mindir_lib") { 95 "flatbuffers:libflatbuffers_static", 96 ] 97 configs = [ 98- "../:disable_android", 99- "../:secure_option", 100+ ":mindir_secure_disable_android", 101 ] 102 public_configs = [ ":mindir_config" ] 103 defines = [ "MS_COMPILE_OHOS" ] 104diff --git a/mindspore/lite/src/litert/c_api/context_c.cc b/mindspore/lite/src/litert/c_api/context_c.cc 105index ef7d4b6a..88fdc4d0 100644 106--- a/mindspore/lite/src/litert/c_api/context_c.cc 107+++ b/mindspore/lite/src/litert/c_api/context_c.cc 108@@ -525,6 +525,16 @@ OH_AI_API OH_AI_Status OH_AI_DeviceInfoAddExtension(OH_AI_DeviceInfoHandle devic 109 MS_LOG(ERROR) << "Add extension to non-NNRT device is not allowable, ignored"; 110 return OH_AI_STATUS_LITE_ERROR; 111 } 112+ static std::vector<std::string> extension_keys = {"CachePath", "CacheVersion", "ModelName", "QuantBuffer", 113+ "isProfiling", "opLayout", "InputDims", "DynamicDims", "BandMode", 114+ "NPU_FM_SHARED"}; 115+ auto it = std::find(extension_keys.begin(), extension_keys.end(), std::string(name)); 116+ if (it == extension_keys.end()) { 117+ MS_LOG(ERROR) << "The name of the extension is not allowable, only can be one of {CachePath, CacheVersion," 118+ << " ModelName, QuantBuffer, isProfiling, opLayout, InputDims, DynamicDims, BandMode," 119+ << "NPU_FM_SHARED}."; 120+ return OH_AI_STATUS_LITE_ERROR; 121+ } 122 auto impl = reinterpret_cast<mindspore::NNRTDeviceInfo *>(device_info); 123 mindspore::Extension extension; 124 extension.name = std::string(name); 125diff --git a/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc b/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc 126index a66cd5ea..6e4c57a4 100644 127--- a/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc 128+++ b/mindspore/lite/src/litert/delegate/nnrt/extension_options_parser.cc 129@@ -29,7 +29,7 @@ const std::map<std::string, mindspore::lite::HiAI_BandMode> kBandModeMap = { 130 const std::string kCachePath = "CachePath"; 131 const std::string kCacheVersion = "CacheVersion"; 132 const std::string kBandMode = "BandMode"; 133-const std::string kQuantConfigData = "QuantConfigData"; 134+const std::string kQuantBuffer = "QuantBuffer"; 135 const std::string kModelName = "ModelName"; 136 } // namespace 137 138@@ -83,7 +83,7 @@ void ExtensionOptionsParser::DoParseQuantConfig(const std::vector<Extension> &ex 139 MS_CHECK_TRUE_RET_VOID(quant_config != nullptr); 140 MS_CHECK_TRUE_RET_VOID(num != nullptr); 141 auto iter_config = std::find_if(extensions.begin(), extensions.end(), [](const Extension &extension) { 142- return extension.name == kQuantConfigData; 143+ return extension.name == kQuantBuffer; 144 }); 145 if (iter_config != extensions.end()) { 146 *quant_config = static_cast<void *>(const_cast<uint8_t *>(iter_config->value.data())); 147diff --git a/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc b/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc 148index a49e7449..ba921da5 100644 149--- a/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc 150+++ b/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc 151@@ -546,7 +546,7 @@ Status NNRTDelegate::InitNNCompilation(OH_NNCompilation *nn_compilation) const { 152 } 153 154 #ifdef SUPPORT_NNRT_METAGRAPH 155- if (hiai_handle_ != nullptr) { 156+ if (hiai_handle_ != nullptr && IsKirinNPUWithOfflineInference()) { 157 if (extension_options_.band_mode != mindspore::lite::HIAI_BANDMODE_UNSET) { 158 ret_code = mindspore::lite::HMS_HiAIOptions_SetBandMode(nn_compilation, extension_options_.band_mode); 159 if ((ret_code != OH_NN_SUCCESS) && (ret_code != OH_NN_OPERATION_FORBIDDEN)) { 160diff --git a/mindspore/lite/src/litert/js_api/BUILD.gn b/mindspore/lite/src/litert/js_api/BUILD.gn 161index f12e4db4..4004cc47 100644 162--- a/mindspore/lite/src/litert/js_api/BUILD.gn 163+++ b/mindspore/lite/src/litert/js_api/BUILD.gn 164@@ -15,6 +15,7 @@ import("//build/ohos.gni") 165 import("//build/ohos/ace/ace.gni") 166 167 ohos_shared_library("mindsporelite_napi") { 168+ branch_protector_ret = "pac_ret" 169 include_dirs = [ 170 "//third_party/mindspore/mindspore-src/source/", 171 "//third_party/mindspore/mindspore-src/source/include/api", 172@@ -37,6 +38,11 @@ ohos_shared_library("mindsporelite_napi") { 173 "nnrt_device_desc.cc" 174 ] 175 176+ configs = [ 177+ "../../../:disable_android", 178+ "../../../:secure_option", 179+ ] 180+ 181 deps = [ 182 "../../../:mindspore_lib", 183 "../../../:mindspore_ndk" 184-- 1852.17.1 186 187