diff --git a/cmake/dependency_securec.cmake b/cmake/dependency_securec.cmake index a91ac4dfd8c..746b9d18891 100644 --- a/cmake/dependency_securec.cmake +++ b/cmake/dependency_securec.cmake @@ -8,7 +8,11 @@ if(NOT TARGET securec) set(_ms_tmp_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE}) set(_ms_tmp_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) - set(CMAKE_C_FLAGS "${SECURE_CXX_FLAGS}") + if(TARGET_OHOS_LITE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SECURE_CXX_FLAGS}") + else() + set(CMAKE_C_FLAGS "${SECURE_CXX_FLAGS}") + endif() if(CMAKE_SYSTEM_NAME MATCHES "Windows") add_compile_definitions(SECUREC_ONLY_DECLARE_MEMSET) endif() diff --git a/cmake/package_lite.cmake b/cmake/package_lite.cmake index ed58843a4b7..91759ac2b31 100644 --- a/cmake/package_lite.cmake +++ b/cmake/package_lite.cmake @@ -290,7 +290,7 @@ elseif(PLATFORM_ARM32) install(DIRECTORY ${TOP_DIR}/include/api/ DESTINATION ${RUNTIME_INC_DIR}/api COMPONENT ${RUNTIME_COMPONENT_NAME} FILES_MATCHING PATTERN "*.h" PATTERN "ops*" EXCLUDE) __install_micro_wrapper() - if(MSLITE_ENABLE_TOOLS) + if(MSLITE_ENABLE_TOOLS AND NOT TARGET_OHOS_LITE) install(TARGETS ${BENCHMARK_NAME} RUNTIME DESTINATION ${BENCHMARK_ROOT_DIR} COMPONENT ${RUNTIME_COMPONENT_NAME}) if(SUPPORT_TRAIN) install(TARGETS ${BENCHMARK_TRAIN_NAME} RUNTIME DESTINATION ${BENCHMARK_TRAIN_ROOT_DIR} COMPONENT diff --git a/mindspore/lite/CMakeLists.txt b/mindspore/lite/CMakeLists.txt index 221f276b41d..336bddb0bad 100644 --- a/mindspore/lite/CMakeLists.txt +++ b/mindspore/lite/CMakeLists.txt @@ -6,6 +6,9 @@ if(TOOLCHAIN_NAME STREQUAL "himix200") set(TARGET_HIMIX200 on) set(ENABLE_MINDRT off) add_compile_definitions(SUPPORT_NNIE) +elseif(TOOLCHAIN_NAME STREQUAL "ohos-lite") + set(TARGET_OHOS_LITE on) + SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE) endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0 AND NOT TARGET_HIMIX200) @@ -177,6 +180,8 @@ elseif(PLATFORM_ARM32) set(RUNTIME_COMPONENT_NAME "android-aarch32") if(TARGET_HIMIX200) set(RUNTIME_COMPONENT_NAME "linux-aarch32") + elseif(TARGET_OHOS_LITE) + set(RUNTIME_COMPONENT_NAME "ohos-aarch32") endif() elseif(WIN32) if(CMAKE_SIZEOF_VOID_P EQUAL 4) @@ -211,7 +216,7 @@ include(${TOP_DIR}/cmake/utils.cmake) include(${TOP_DIR}/cmake/dependency_utils.cmake) include(${TOP_DIR}/cmake/dependency_securec.cmake) include(${TOP_DIR}/cmake/external_libs/flatbuffers.cmake) -if(NOT TARGET_HIMIX200) +if(NOT TARGET_HIMIX200 AND NOT TARGET_OHOS_LITE) include(${TOP_DIR}/cmake/external_libs/openssl.cmake) endif() if(MSLITE_GPU_BACKEND STREQUAL opencl) @@ -309,7 +314,7 @@ if(WIN32) add_compile_definitions(BUILDING_DLL) endif() -if(ENABLE_MINDRT OR TARGET_HIMIX200) +if(ENABLE_MINDRT OR TARGET_HIMIX200 OR TARGET_OHOS_LITE) include_directories(${CORE_DIR}/mindrt/include) include_directories(${CORE_DIR}/mindrt/src) endif() diff --git a/mindspore/lite/cmake/ohos-lite.toolchain.cmake b/mindspore/lite/cmake/ohos-lite.toolchain.cmake new file mode 100644 index 00000000000..c8049becedb --- /dev/null +++ b/mindspore/lite/cmake/ohos-lite.toolchain.cmake @@ -0,0 +1,31 @@ +if(NOT DEFINED ENV{OHOS_SYSROOT_PATH}) + message(FATAL_ERROR "No defined environment variable: OHOS_SYSROOT_PATH") +endif() +set(OHOS_SYSROOT_PATH "$ENV{OHOS_SYSROOT_PATH}") + +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_CXX_COMPILER_ID Clang) +set(CMAKE_TOOLCHAIN_PREFIX llvm-) +set(CMAKE_C_COMPILER clang) +set(CMAKE_C_FLAGS "--target=arm-liteos -D__clang__ -march=armv7-a -w") +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_CXX_FLAGS "--target=arm-liteos -D__clang__ -march=armv7-a -w") +set(MY_LINK_FLAGS "--target=arm-liteos --sysroot=${OHOS_SYSROOT_PATH}") +set(CMAKE_LINKER clang) +set(CMAKE_CXX_LINKER clang++) +set(CMAKE_C_LINKER clang) +set(CMAKE_C_LINK_EXECUTABLE + "${CMAKE_C_LINKER} ${MY_LINK_FLAGS} -o ") +set(CMAKE_CXX_LINK_EXECUTABLE + "${CMAKE_CXX_LINKER} ${MY_LINK_FLAGS} -o ") +set(CMAKE_SYSROOT ${OHOS_SYSROOT_PATH}) + +set(ENABLE_MINDRT "off") +find_path(GCC_PATH gcc) +find_path(GXX_PATH g++) +if(NOT ${GCC_PATH} STREQUAL "GCC_PATH-NOTFOUND" AND NOT ${GXX_PATH} STREQUAL "GXX_PATH-NOTFOUND") + set(FLATC_GCC_COMPILER ${GCC_PATH}/gcc) + set(FLATC_GXX_COMPILER ${GXX_PATH}/g++) +endif() + +string(APPEND CMAKE_EXE_LINKER_FLAGS " -Wl,--gc-sections") diff --git a/mindspore/lite/micro/coder/generator/component/const_blocks/benchmark.cc b/mindspore/lite/micro/coder/generator/component/const_blocks/benchmark.cc index 98e14809579..6fc7b533809 100644 --- a/mindspore/lite/micro/coder/generator/component/const_blocks/benchmark.cc +++ b/mindspore/lite/micro/coder/generator/component/const_blocks/benchmark.cc @@ -139,8 +139,19 @@ int main(int argc, const char **argv) { return lite::RET_ERROR; } context->thread_num_ = atoi(argv[5]); + if (context->thread_num_ < 1) { + printf("Thread number error! It should be greater than 0\n"); + return lite::RET_ERROR; + } context->device_list_.resize(1); - context->device_list_[0] = {lite::DT_CPU, {{false, static_cast(atoi(argv[6]))}}}; + context->device_list_[0].device_type_ = lite::DT_CPU; + context->device_list_[0].device_info_.cpu_device_info_.enable_float16_ = false; + lite::CpuBindMode bind_mode = static_cast(atoi(argv[6])); + if (bind_mode < lite::NO_BIND || bind_mode > lite::MID_CPU) { + printf("Thread bind mode error! 0: No bind, 1: Bind hign cpu, 2: Bind mid cpu.\n"); + return lite::RET_ERROR; + } + context->device_list_[0].device_info_.cpu_device_info_.cpu_bind_mode_ = bind_mode; printf("context: ThreadNum: %d, BindMode: %d\n", context->thread_num_, context->device_list_[0].device_info_.cpu_device_info_.cpu_bind_mode_); } diff --git a/mindspore/lite/src/CMakeLists.txt b/mindspore/lite/src/CMakeLists.txt index 18f3d46793e..38f5a88c916 100644 --- a/mindspore/lite/src/CMakeLists.txt +++ b/mindspore/lite/src/CMakeLists.txt @@ -149,7 +149,7 @@ if(ENABLE_MINDRT) ${CMAKE_CURRENT_SOURCE_DIR}/lite_mindrt.cc ${CMAKE_CURRENT_SOURCE_DIR}/mindrt_executor.cc ) -elseif(TARGET_HIMIX200) +elseif(TARGET_HIMIX200 OR TARGET_OHOS_LITE) file(GLOB MINDRT_ACTOR ${CORE_DIR}/mindrt/src/actor/*.cc) set(LITE_SRC ${LITE_SRC} @@ -232,7 +232,7 @@ if(SUPPORT_NPU) target_link_libraries(mindspore-lite npu_kernel_mid) target_link_libraries(mindspore-lite_static npu_kernel_mid) endif() -if(PLATFORM_ARM32 OR PLATFORM_ARM64 AND NOT TARGET_HIMIX200) +if(PLATFORM_ARM32 OR PLATFORM_ARM64 AND NOT TARGET_HIMIX200 AND NOT TARGET_OHOS_LITE) target_link_libraries(mindspore-lite log) target_link_libraries(mindspore-lite_static log) endif() @@ -260,6 +260,8 @@ if(NOT APPLE AND PLATFORM_ARM) "${ANDROID_NDK}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/strip") if(TARGET_HIMIX200) set(NDK_STRIP ${HIMIX_STRIP}) + elseif(TARGET_OHOS_LITE) + set(NDK_STRIP "llvm-strip") endif() endif() diff --git a/mindspore/lite/src/cpu_info.cc b/mindspore/lite/src/cpu_info.cc index f20f5c1eeb4..b6555893447 100644 --- a/mindspore/lite/src/cpu_info.cc +++ b/mindspore/lite/src/cpu_info.cc @@ -19,10 +19,11 @@ #include #include "src/common/log_adapter.h" #include "nnacl/nnacl_utils.h" -#ifndef MS_COMPILE_IOS +#ifdef __ANDROID__ #include #include -#else +#endif +#ifdef MS_COMPILE_IOS #include #include #include @@ -46,7 +47,7 @@ #endif #endif namespace mindspore::lite { -#ifndef MS_COMPILE_IOS +#ifdef __ANDROID__ uint32_t CpuInfo::MidrSetPart(uint32_t part) { return ((part << ARM_CPU_PART_OFFSET) & ARM_CPU_PART_MASK) | (midr_ & ~ARM_CPU_PART_MASK); } @@ -137,6 +138,7 @@ bool CpuInfo::ArmIsSupportFp16() { } return false; #else +#ifdef __ANDROID__ #ifdef ENABLE_ARM32 GetArmProcCpuInfo(&android_cpu_info_); midr_ = MidrSetPart(android_cpu_info_.cpu_part); @@ -174,6 +176,7 @@ bool CpuInfo::ArmIsSupportFp16() { } else { MS_LOG(DEBUG) << "Hw cap NOT support FP16, hwcap: 0x" << hwcap; } +#endif #endif return fp16_flag_; #endif diff --git a/mindspore/lite/tools/benchmark/CMakeLists.txt b/mindspore/lite/tools/benchmark/CMakeLists.txt index 485976888ac..a364ded6762 100644 --- a/mindspore/lite/tools/benchmark/CMakeLists.txt +++ b/mindspore/lite/tools/benchmark/CMakeLists.txt @@ -15,7 +15,7 @@ add_executable(benchmark add_dependencies(benchmark fbs_src) -if((PLATFORM_ARM32 OR PLATFORM_ARM64) AND NOT TARGET_HIMIX200) +if((PLATFORM_ARM32 OR PLATFORM_ARM64) AND NOT TARGET_HIMIX200 AND NOT TARGET_OHOS_LITE) if(SUPPORT_NPU AND ANDROID_STL STREQUAL "c++_static") target_link_libraries(benchmark mindspore-lite mindspore::json c++_shared) else()