From 84e02cee10d5f1b56ea5b919a93ea3bbcfcc6570 Mon Sep 17 00:00:00 2001 From: Zhu Guodong Date: Mon, 5 Jun 2023 15:54:54 +0800 Subject: [PATCH] auto-apply 0020-support-cross-compile-with-ohos-ndk.patch --- cmake/external_libs/flatbuffers.cmake | 4 +- cmake/external_libs/pybind11.cmake | 14 +++++- .../device/cpu/kernel/nnacl/CMakeLists.txt | 3 ++ mindspore/lite/BUILD.gn | 2 - mindspore/lite/CMakeLists.txt | 10 ++++ mindspore/lite/build_lite.sh | 14 +++++- mindspore/lite/src/CMakeLists.txt | 8 +++- mindspore/lite/src/common/log.cc | 33 +++++++++++-- mindspore/lite/src/common/log.h | 47 ++----------------- mindspore/lite/src/common/utils.cc | 6 +-- mindspore/lite/tools/benchmark/CMakeLists.txt | 11 ++++- third_party/securec/CMakeLists.txt | 4 ++ 12 files changed, 95 insertions(+), 61 deletions(-) diff --git a/cmake/external_libs/flatbuffers.cmake b/cmake/external_libs/flatbuffers.cmake index d1e3d880..2101711f 100644 --- a/cmake/external_libs/flatbuffers.cmake +++ b/cmake/external_libs/flatbuffers.cmake @@ -3,8 +3,8 @@ if(MSVC) set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}") set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") else() - set(flatbuffers_CXXFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") - set(flatbuffers_CFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") + set(flatbuffers_CXXFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong -Wno-error=unused-but-set-variable") + set(flatbuffers_CFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong -Wno-error=unused-but-set-variable") endif() if(WIN32) diff --git a/cmake/external_libs/pybind11.cmake b/cmake/external_libs/pybind11.cmake index 1d634f29..7d82ec6c 100644 --- a/cmake/external_libs/pybind11.cmake +++ b/cmake/external_libs/pybind11.cmake @@ -15,7 +15,10 @@ if(ENABLE_GITEE) return() endif() else() - if(PYTHON_VERSION MATCHES "3.9") + if(PYTHON_VERSION MATCHES "3.10") + set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz") + set(MD5 "32a7811f3db423df4ebfc731a28e5901") + elseif(PYTHON_VERSION MATCHES "3.9") set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz") set(MD5 "32a7811f3db423df4ebfc731a28e5901") elseif(PYTHON_VERSION MATCHES "3.8") @@ -32,7 +35,14 @@ endif() set(pybind11_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(pybind11_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") -if(PYTHON_VERSION MATCHES "3.9") +if(PYTHON_VERSION MATCHES "3.10") + mindspore_add_pkg(pybind11 + VER 2.6.1 + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE + ) +elseif(PYTHON_VERSION MATCHES "3.9") mindspore_add_pkg(pybind11 VER 2.6.1 URL ${REQ_URL} diff --git a/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/CMakeLists.txt b/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/CMakeLists.txt index 3d54a010..71f06de9 100644 --- a/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/CMakeLists.txt +++ b/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/CMakeLists.txt @@ -64,6 +64,9 @@ if(APPLE OR PLATFORM_ARM32 OR PLATFORM_ARM64 OR PLATFORM_MCU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer -fstrict-aliasing \ -ffunction-sections -fdata-sections -ffast-math") endif() + if(TARGET_OHOS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-inline-asm") + endif() endif() if(NOT MSVC) diff --git a/mindspore/lite/BUILD.gn b/mindspore/lite/BUILD.gn index 7032b028..50b1fe7c 100644 --- a/mindspore/lite/BUILD.gn +++ b/mindspore/lite/BUILD.gn @@ -581,7 +581,6 @@ ohos_shared_library("mindspore_lib") { sources = all_sources include_dirs = [ - "//base/hiviewdfx/hilog/interfaces/native/innerkits/include", "//third_party/flatbuffers/include", "./", "../", @@ -820,7 +819,6 @@ ohos_shared_library("mindspore_train_lib") { sources = all_train_sources include_dirs = [ - "//base/hiviewdfx/hilog/interfaces/native/innerkits/include", "//third_party/flatbuffers/include", "./", "../", diff --git a/mindspore/lite/CMakeLists.txt b/mindspore/lite/CMakeLists.txt index 79fb55ba..0838dbe1 100644 --- a/mindspore/lite/CMakeLists.txt +++ b/mindspore/lite/CMakeLists.txt @@ -237,6 +237,12 @@ elseif(TOOLCHAIN_NAME STREQUAL "mix210") elseif(TOOLCHAIN_NAME STREQUAL "ohos-lite") set(TARGET_OHOS_LITE on) SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) +elseif(TOOLCHAIN_NAME STREQUAL "ohos") + set(TARGET_OHOS on) + add_compile_definitions(MS_COMPILE_OHOS) + add_compile_definitions(MS_COMPILE_WITH_OHOS_NDK) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument -Wno-c++17-extensions") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argument -Wno-c++17-extensions") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0 @@ -531,6 +537,8 @@ endif() if(PLATFORM_ARM64) if(TARGET_HIMIX100 OR TARGET_MIX210 OR MACHINE_LINUX_ARM64) set(RUNTIME_COMPONENT_NAME "linux-aarch64") + elseif(TARGET_OHOS) + set(RUNTIME_COMPONENT_NAME "ohos-aarch64") else() set(RUNTIME_COMPONENT_NAME "android-aarch64") endif() @@ -540,6 +548,8 @@ elseif(PLATFORM_ARM32) set(RUNTIME_COMPONENT_NAME "linux-aarch32") elseif(TARGET_OHOS_LITE) set(RUNTIME_COMPONENT_NAME "ohos-aarch32") + elseif(TARGET_OHOS) + set(RUNTIME_COMPONENT_NAME "ohos-aarch32") endif() elseif(WIN32) if(CMAKE_SIZEOF_VOID_P EQUAL 4) diff --git a/mindspore/lite/build_lite.sh b/mindspore/lite/build_lite.sh index d2ce8bb6..8df9706d 100644 --- a/mindspore/lite/build_lite.sh +++ b/mindspore/lite/build_lite.sh @@ -294,6 +294,12 @@ build_lite() { LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DTOOLCHAIN_NAME=himix200" LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_MINDDATA_IMPLEMENT=off" LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_ENABLE_FP16=off -DMSLITE_ENABLE_TRAIN=off -DMSLITE_GPU_BACKEND=off" + elif [[ "${TOOLCHAIN_NAME}" == "ohos" ]]; then + pkg_name=mindspore-lite-${VERSION_STR}-ohos-arm32 + CMAKE_TOOLCHAIN_FILE=${OHOS_NDK}/build/cmake/ohos.toolchain.cmake + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DCMAKE_OHOS_NDK=${OHOS_NDK} -DOHOS_ARCH=armeabi-v7a -DOHOS_STL=c++_static -DTOOLCHAIN_NAME=${TOOLCHAIN_NAME}" + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_MINDDATA_IMPLEMENT=off" + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_ENABLE_FP16=off -DMSLITE_ENABLE_TRAIN=off -DMSLITE_GPU_BACKEND=off" else # CPU : Android-aarch32 checkndk @@ -323,6 +329,12 @@ build_lite() { LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DTOOLCHAIN_NAME=mix210" LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_MINDDATA_IMPLEMENT=off" LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_ENABLE_FP16=on -DMSLITE_ENABLE_TRAIN=off -DMSLITE_GPU_BACKEND=off" + elif [[ "${TOOLCHAIN_NAME}" == "ohos" ]]; then + pkg_name=mindspore-lite-${VERSION_STR}-ohos-aarch64 + CMAKE_TOOLCHAIN_FILE=${OHOS_NDK}/build/cmake/ohos.toolchain.cmake + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DCMAKE_OHOS_NDK=${OHOS_NDK} -DOHOS_ARCH=arm64-v8a -DOHOS_STL=c++_static -DTOOLCHAIN_NAME=${TOOLCHAIN_NAME}" + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_MINDDATA_IMPLEMENT=off" + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_ENABLE_FP16=on -DMSLITE_ENABLE_TRAIN=off -DMSLITE_GPU_BACKEND=off" else if [[ "${machine}" == "aarch64" ]]; then # CPU : Linux-aarch64 @@ -374,7 +386,7 @@ build_lite() { if [[ "X$MSLITE_COMPILE_TWICE" != "X" ]]; then LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DMSLITE_COMPILE_TWICE=${MSLITE_COMPILE_TWICE}" fi - if [[ "${local_lite_platform}" == "arm64" || "${local_lite_platform}" == "arm32" ]]; then + if [[ ("${local_lite_platform}" == "arm64" || "${local_lite_platform}" == "arm32") && "${TOOLCHAIN_NAME}" != "ohos" ]]; then echo "default link libc++_static.a, export MSLITE_ANDROID_STL=c++_shared to link libc++_shared.so" fi diff --git a/mindspore/lite/src/CMakeLists.txt b/mindspore/lite/src/CMakeLists.txt index a80656f2..31941fb1 100644 --- a/mindspore/lite/src/CMakeLists.txt +++ b/mindspore/lite/src/CMakeLists.txt @@ -537,10 +537,16 @@ if(SUPPORT_NPU) target_link_libraries(mindspore-lite_static npu_kernel_mid) endif() if(PLATFORM_ARM32 OR PLATFORM_ARM64 AND NOT TARGET_HIMIX - AND NOT TARGET_MIX210 AND NOT TARGET_OHOS_LITE AND NOT MACHINE_LINUX_ARM64) + AND NOT TARGET_MIX210 AND NOT TARGET_OHOS_LITE AND NOT MACHINE_LINUX_ARM64 AND NOT TARGET_OHOS) target_link_libraries(mindspore-lite log) target_link_libraries(mindspore-lite_static log) endif() + +if(TARGET_OHOS) + target_link_libraries(mindspore-lite hilog_ndk.z.so) + target_link_libraries(mindspore-lite_static hilog_ndk.z.so) +endif() + if(MSLITE_MINDDATA_IMPLEMENT STREQUAL "lite") target_link_libraries(mindspore-lite minddata_eager_mid minddata-lite) target_link_libraries(mindspore-lite_static minddata_eager_mid) diff --git a/mindspore/lite/src/common/log.cc b/mindspore/lite/src/common/log.cc index 66c0d76b..f8ba18af 100644 --- a/mindspore/lite/src/common/log.cc +++ b/mindspore/lite/src/common/log.cc @@ -21,6 +21,13 @@ #include #endif +#ifdef MS_COMPILE_OHOS +#define LOG_DOMAIN 0x2102 +#define LOG_TAG "MS_LITE" +#define FORMAT "[%{public}s:%{public}d] %{public}s# %{public}s" +#include "hilog/log.h" +#endif + // namespace to support utils module definition namespace mindspore constexpr const char *ANDROID_LOG_TAG = "MS_LITE"; namespace mindspore { #if defined(__ANDROID__) @@ -73,17 +80,33 @@ static int GetAndroidLogLevel(LiteLogLevel level) { #ifdef MS_COMPILE_OHOS void PrintHiLog(LiteLogLevel level, const char *file, int line, const char *func, const char *msg) { +#ifdef MS_COMPILE_WITH_OHOS_NDK + // When build with OHOS NDK, use public api of hilog module. if (level == LiteLogLevel::DEBUG) { - OHOS::HiviewDFX::HiLog::Debug(MSLite_LABEL, FORMAT, file, line, func, msg); + OH_LOG_Print(LOG_APP, LOG_DEBUG, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); } else if (level == LiteLogLevel::INFO) { - OHOS::HiviewDFX::HiLog::Info(MSLite_LABEL, FORMAT, file, line, func, msg); + OH_LOG_Print(LOG_APP, LOG_INFO, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); } else if (level == LiteLogLevel::WARNING) { - OHOS::HiviewDFX::HiLog::Warn(MSLite_LABEL, FORMAT, file, line, func, msg); + OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); } else if (level == LiteLogLevel::ERROR) { - OHOS::HiviewDFX::HiLog::Error(MSLite_LABEL, FORMAT, file, line, func, msg); + OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); } else { - OHOS::HiviewDFX::HiLog::Error(MSLite_LABEL, FORMAT, file, line, func, msg); + OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); } +#else + // When build in OHOS repo, use inner api of hilog module. + if (level == LiteLogLevel::DEBUG) { + (void)HiLogPrint(LOG_APP, LOG_DEBUG, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); + } else if (level == LiteLogLevel::INFO) { + (void)HiLogPrint(LOG_APP, LOG_INFO, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); + } else if (level == LiteLogLevel::WARNING) { + (void)HiLogPrint(LOG_APP, LOG_WARN, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); + } else if (level == LiteLogLevel::ERROR) { + (void)HiLogPrint(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); + } else { + (void)HiLogPrint(LOG_APP, LOG_ERROR, LOG_DOMAIN, LOG_TAG, FORMAT, file, line, func, msg); + } +#endif } #endif diff --git a/mindspore/lite/src/common/log.h b/mindspore/lite/src/common/log.h index 1890863e..bea21f01 100644 --- a/mindspore/lite/src/common/log.h +++ b/mindspore/lite/src/common/log.h @@ -22,9 +22,6 @@ #include #include #include "utils/overload.h" -#ifdef MS_COMPILE_OHOS -#include "hilog/log.h" -#endif // NOTICE: when relative path of 'log.h' changed, macro 'LITE_LOG_HEAR_FILE_REL_PATH' must be changed #ifndef LITE_LOG_HEAR_FILE_REL_PATH @@ -137,6 +134,9 @@ class LiteLogWriter { LiteLogLevel log_level_; }; +#define MSLOG_IF(level) \ + mindspore::LiteLogWriter(mindspore::LiteLocationInfo(LITE_FILE_NAME, __LINE__, __FUNCTION__), level) < \ + mindspore::LiteLogStream() #define MS_LOG(level) MS_LOG_##level @@ -145,47 +145,6 @@ class LiteLogWriter { #define MS_LOG_WARNING MSLOG_IF(mindspore::LiteLogLevel::WARNING) #define MS_LOG_ERROR MSLOG_IF(mindspore::LiteLogLevel::ERROR) - -#ifdef MS_COMPILE_OHOS -namespace { -constexpr unsigned int MSLITE_DOMAIN_ID_START = 0xD0029A0; -constexpr unsigned int MSLITE_DOMAIN_ID_END = MSLITE_DOMAIN_ID_START + 32; -constexpr unsigned int TEST_DOMAIN_ID = 0xD000F00; -} // namespace - -#define FILE_NAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__) -#define FORMAT "[%{public}s:%{public}d] %{public}s# %{public}s" - -#define MSLOG_IF(level) \ - mindspore::LiteLogWriter(mindspore::LiteLocationInfo(LITE_FILE_NAME, __LINE__, __FUNCTION__), level) < \ - mindspore::LiteLogStream() - -enum MSLiteManagerLogLabel { - // Component labels, you can add if needed - COMP_FWK = 0, - // Test label - LABEL_TEST, - // The end of labels, max to the domain id range length 32 - LABEL_END, -}; - -enum MSLiteManagerLogDomain { - DOMAIN_FRAMEWORK = MSLITE_DOMAIN_ID_START + COMP_FWK, // 0xD0029A0 - DOMAIN_TEST = TEST_DOMAIN_ID, // 0xD000F00 - DOMAIN_END = MSLITE_DOMAIN_ID_END, // Max to 0xD002940, keep the sequence and length same as MSLiteManagerLogLabel -}; - -// Keep the sequence and length same as MSLiteManagerLogDomain -static constexpr OHOS::HiviewDFX::HiLogLabel MSLite_LABEL = {LOG_CORE, DOMAIN_FRAMEWORK, "MSLiteFwk"}; - -#else - -#define MSLOG_IF(level) \ - mindspore::LiteLogWriter(mindspore::LiteLocationInfo(LITE_FILE_NAME, __LINE__, __FUNCTION__), level) < \ - mindspore::LiteLogStream() - -#endif - } // namespace mindspore #ifdef Debug diff --git a/mindspore/lite/src/common/utils.cc b/mindspore/lite/src/common/utils.cc index ba60bea2..17b71bd5 100644 --- a/mindspore/lite/src/common/utils.cc +++ b/mindspore/lite/src/common/utils.cc @@ -14,7 +14,7 @@ * limitations under the License. */ -#ifdef __ANDROID__ +#if defined(__ANDROID__) || defined(MS_COMPILE_OHOS) #include #include #endif @@ -141,7 +141,7 @@ std::vector Tokenize(const std::string &src, const std::string &del return tokens; } -#if defined(__ANDROID__) +#if defined(__ANDROID__) || defined(MS_COMPILE_OHOS) uint32_t getHwCap(int hwcap_type) { uint32_t ret = getauxval(hwcap_type); return ret; @@ -151,7 +151,7 @@ uint32_t getHwCap(int hwcap_type) { bool IsSupportSDot() { bool status = false; #ifdef ENABLE_ARM64 -#if defined(__ANDROID__) +#if defined(__ANDROID__) || defined(MS_COMPILE_OHOS) int hwcap_type = 16; uint32_t hwcap = getHwCap(hwcap_type); if (hwcap & HWCAP_ASIMDDP) { diff --git a/mindspore/lite/tools/benchmark/CMakeLists.txt b/mindspore/lite/tools/benchmark/CMakeLists.txt index eff7adde..1f52a4ef 100644 --- a/mindspore/lite/tools/benchmark/CMakeLists.txt +++ b/mindspore/lite/tools/benchmark/CMakeLists.txt @@ -1,7 +1,11 @@ cmake_minimum_required(VERSION 3.12) project(Lite_benchmark) -set(BENCHMARK_LINK_LIB mindspore-lite) +if(TARGET_OHOS) + set(BENCHMARK_LINK_LIB libmindspore-lite.so) +else() + set(BENCHMARK_LINK_LIB mindspore-lite) +endif() set(PROVIDERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../providers) if(TARGET_HIMIX) add_subdirectory(${PROVIDERS_DIR}/nnie nnie) @@ -72,6 +76,11 @@ add_executable(benchmark ${CMAKE_CURRENT_SOURCE_DIR}/benchmark_c_api.cc ${COMMON_SRC}) +if(TARGET_OHOS) + target_link_directories(benchmark PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../../src) + add_dependencies(benchmark mindspore-lite) +endif() + add_dependencies(benchmark fbs_src) target_link_libraries(benchmark ${BENCHMARK_LINK_LIB}) diff --git a/third_party/securec/CMakeLists.txt b/third_party/securec/CMakeLists.txt index 91fb33b7..dd6e001a 100644 --- a/third_party/securec/CMakeLists.txt +++ b/third_party/securec/CMakeLists.txt @@ -12,5 +12,9 @@ if(NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/local/include -Werror") endif() +if(TARGET_OHOS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument") +endif() + include_directories(./include) add_subdirectory(src) -- 2.34.1