diff --git a/cmake/package_lite.cmake b/cmake/package_lite.cmake index c9f4299ba83..ed58843a4b7 100644 --- a/cmake/package_lite.cmake +++ b/cmake/package_lite.cmake @@ -478,6 +478,10 @@ else() DESTINATION ${CONVERTER_ROOT_DIR}/lib COMPONENT ${RUNTIME_COMPONENT_NAME}) install(FILES ${glog_LIBPATH}/libglog.so.0.4.0 DESTINATION ${CONVERTER_ROOT_DIR}/lib RENAME libglog.so.0 COMPONENT ${RUNTIME_COMPONENT_NAME}) + if(MSLITE_ENABLE_NNIE) + install(FILES ${glog_LIBPATH}/libglog.so.0.4.0 DESTINATION ${CONVERTER_ROOT_DIR}/lib RENAME libglog.so + COMPONENT ${RUNTIME_COMPONENT_NAME}) + endif() __install_micro_wrapper() __install_micro_codegen() endif() diff --git a/mindspore/lite/CMakeLists.txt b/mindspore/lite/CMakeLists.txt index e33b3caef89..a5c202c07f4 100644 --- a/mindspore/lite/CMakeLists.txt +++ b/mindspore/lite/CMakeLists.txt @@ -4,6 +4,7 @@ project(Lite) set(BUILD_LITE "on") if(TOOLCHAIN_NAME STREQUAL "himix200") set(TARGET_HIMIX200 on) + set(ENABLE_MINDRT off) add_compile_definitions(SUPPORT_NNIE) endif() diff --git a/mindspore/lite/build_lite.sh b/mindspore/lite/build_lite.sh index b6adc876475..14f8f14fe01 100755 --- a/mindspore/lite/build_lite.sh +++ b/mindspore/lite/build_lite.sh @@ -135,21 +135,23 @@ build_lite() { write_commit_file if [[ "${local_lite_platform}" == "arm32" ]]; then - if [[ "${TOOLCHAIN_FILE}" && "${TOOLCHAIN_NAME}" ]]; then - COMPILE_MINDDATA_LITE="off" - CMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} - CMAKE_TOOLCHAIN_NAME=${TOOLCHAIN_NAME} - CMAKE_BUILD_TYPE=${LITE_BUILD_TYPE} - else - CMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake - ANDROID_NATIVE_API_LEVEL="19" - CMAKE_ANDROID_NDK=${ANDROID_NDK} - CMAKE_ANDROID_ABI="armeabi-v7a" - CMAKE_ANDROID_TOOLCHAIN_NAME="clang" - CMAKE_ANDROID_STL=${MSLITE_ANDROID_STL} - CMAKE_BUILD_TYPE=${LITE_BUILD_TYPE} - ENABLE_FP16="on" - fi + if [[ "${TOOLCHAIN_NAME}" == "ohos-lite" ]]; then + COMPILE_MINDDATA_LITE="off" + CMAKE_TOOLCHAIN_FILE=${BASEPATH}/mindspore/lite/cmake/ohos-lite.toolchain.cmake + CMAKE_TOOLCHAIN_NAME="ohos-lite" + elif [[ "${TOOLCHAIN_NAME}" == "himix200" ]]; then + COMPILE_MINDDATA_LITE="off" + CMAKE_TOOLCHAIN_FILE=${BASEPATH}/mindspore/lite/cmake/himix200.toolchain.cmake + CMAKE_TOOLCHAIN_NAME="himix200" + else + CMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake + ANDROID_NATIVE_API_LEVEL="19" + CMAKE_ANDROID_NDK=${ANDROID_NDK} + CMAKE_ANDROID_ABI="armeabi-v7a" + CMAKE_ANDROID_TOOLCHAIN_NAME="clang" + CMAKE_ANDROID_STL=${MSLITE_ANDROID_STL} + ENABLE_FP16="on" + fi fi if [[ "${local_lite_platform}" == "arm64" ]]; then @@ -181,7 +183,7 @@ build_lite() { echo "default link libc++_static.a, export MSLITE_ANDROID_STL=c++_shared to link libc++_shared.so" cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DTOOLCHAIN_NAME=${CMAKE_TOOLCHAIN_NAME} -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ -DANDROID_NDK=${CMAKE_ANDROID_NDK} -DANDROID_ABI=${CMAKE_ANDROID_ABI} -DANDROID_TOOLCHAIN_NAME=${CMAKE_ANDROID_TOOLCHAIN_NAME} \ - -DANDROID_STL=${CMAKE_ANDROID_STL} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \ + -DANDROID_STL=${CMAKE_ANDROID_STL} -DCMAKE_BUILD_TYPE=${LITE_BUILD_TYPE} -DBUILD_MINDDATA=${COMPILE_MINDDATA_LITE} \ -DPLATFORM_ARM32="on" -DENABLE_NEON="on" -DENABLE_FP16=${ENABLE_FP16} -DCMAKE_INSTALL_PREFIX=${BASEPATH}/output/tmp \ -DMS_VERSION_MAJOR=${VERSION_MAJOR} -DMS_VERSION_MINOR=${VERSION_MINOR} -DMS_VERSION_REVISION=${VERSION_REVISION} \ -DENABLE_ASAN=${ENABLE_ASAN} -DENABLE_VERBOSE=${ENABLE_VERBOSE} "${BASEPATH}/mindspore/lite" @@ -220,6 +222,23 @@ build_lite() { mv ${BASEPATH}/output/tmp/*.tar.gz* ${BASEPATH}/output/ fi [ -n "${BASEPATH}" ] && rm -rf ${BASEPATH}/output/tmp/ + if [[ "${MSLITE_ENABLE_NNIE}" == "on" ]]; then + compile_nnie_script=${BASEPATH}/mindspore/lite/tools/providers/NNIE/Hi3516D/compile_nnie.sh + cd ${BASEPATH}/../ + if [[ "${local_lite_platform}" == "x86_64" ]]; then + sh ${compile_nnie_script} -I x86_64 -b nnie_master -j $THREAD_NUM + if [[ $? -ne 0 ]]; then + echo "compile x86_64 for nnie failed." + exit 1 + fi + elif [[ "${local_lite_platform}" == "arm32" ]]; then + sh ${compile_nnie_script} -I arm32 -b nnie_master -j $THREAD_NUM + if [[ $? -ne 0 ]]; then + echo "compile arm32 for nnie failed." + exit 1 + fi + fi + fi echo "---------------- mindspore lite: build success ----------------" fi } diff --git a/mindspore/lite/cmake/himix200.toolchain.cmake b/mindspore/lite/cmake/himix200.toolchain.cmake new file mode 100644 index 00000000000..aaea272cdc8 --- /dev/null +++ b/mindspore/lite/cmake/himix200.toolchain.cmake @@ -0,0 +1,31 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +if(DEFINED ENV{HISI_TOOLCHAIN_PATH}) + set(HISI_TOOLCHAIN_PATH $ENV{HISI_TOOLCHAIN_PATH}) +else() + message(FATAL_ERROR "ENV HISI_TOOLCHAIN_PATH not found") +endif() +set(CMAKE_C_COMPILER ${HISI_TOOLCHAIN_PATH}/hisi-linux/x86_arm/arm-himix200-linux/bin/arm-himix200-linux-gcc) +set(CMAKE_CXX_COMPILER ${HISI_TOOLCHAIN_PATH}/hisi-linux/x86_arm/arm-himix200-linux/bin/arm-himix200-linux-g++) + +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() + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +set(CROSS_COMPILATION_ARM himix200) +set(CROSS_COMPILATION_ARCHITECTURE armv7-a) + +set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4 ${CMAKE_CXX_FLAGS}") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") + +set(HIMIX_STRIP ${HISI_TOOLCHAIN_PATH}/hisi-linux/x86_arm/arm-himix200-linux/bin/arm-himix200-linux-strip) diff --git a/mindspore/lite/src/CMakeLists.txt b/mindspore/lite/src/CMakeLists.txt index b5c74428f95..470e4094d73 100644 --- a/mindspore/lite/src/CMakeLists.txt +++ b/mindspore/lite/src/CMakeLists.txt @@ -270,7 +270,7 @@ if(NOT APPLE AND PLATFORM_ARM) set(NDK_STRIP "${ANDROID_NDK}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/strip") if(TARGET_HIMIX200) - set(NDK_STRIP "arm-himix200-linux-strip") + set(NDK_STRIP ${HIMIX_STRIP}) endif() endif() diff --git a/mindspore/lite/src/common/file_utils.cc b/mindspore/lite/src/common/file_utils.cc index 81b4c021296..76a2005c355 100644 --- a/mindspore/lite/src/common/file_utils.cc +++ b/mindspore/lite/src/common/file_utils.cc @@ -147,7 +147,11 @@ int CreateOutputDir(std::string *file_path) { return RET_ERROR; } } +#ifdef _WIN32 + *file_path += "\\" + std::to_string(count); +#else *file_path += "/" + std::to_string(count); +#endif int ret = MKDIR(file_path->c_str()); if (ret != RET_OK) { MS_LOG(ERROR) << "mkdir failed. " << file_path->c_str(); diff --git a/mindspore/lite/tools/providers/NNIE/Hi3516D/compile_nnie.sh b/mindspore/lite/tools/providers/NNIE/Hi3516D/compile_nnie.sh index 4698ec54ed7..a04025fc294 100644 --- a/mindspore/lite/tools/providers/NNIE/Hi3516D/compile_nnie.sh +++ b/mindspore/lite/tools/providers/NNIE/Hi3516D/compile_nnie.sh @@ -19,19 +19,27 @@ function Run_Build_x86() { export MSLITE_ENABLE_NNIE=on export MSLITE_ENABLE_CONVERTER=off export MSLITE_ENABLE_TRAIN=off - bash ${nnie_code_path}/mindspore/build.sh -I x86_64 -j 64 + bash ${nnie_code_path}/mindspore/build.sh -I x86_64 -j ${thread_num} if [ $? = 0 ]; then echo "build x86 for nnie success" hi3516d_release_path=${open_source_ms_path}/output/mindspore-lite-${version}-linux-x64/tools/converter/providers/Hi3516D rm -rf ${hi3516d_release_path} - mkdir -p ${hi3516d_release_path}/third_party - cp -r ${nnie_code_path}/mindspore/mindspore/lite/tools/providers/NNIE/Hi3516D/opencv-4.2.0/ ${hi3516d_release_path}/third_party/ - cp -r ${nnie_code_path}/mindspore/mindspore/lite/tools/providers/NNIE/Hi3516D/protobuf-3.9.0/ ${hi3516d_release_path}/third_party/ + mkdir -p ${hi3516d_release_path}/third_party/opencv-4.2.0 + mkdir -p ${hi3516d_release_path}/third_party/protobuf-3.9.0 + cp ${nnie_code_path}/mindspore/mindspore/lite/tools/providers/NNIE/Hi3516D/opencv-4.2.0/lib/* ${hi3516d_release_path}/third_party/opencv-4.2.0/ + cp ${nnie_code_path}/mindspore/mindspore/lite/tools/providers/NNIE/Hi3516D/protobuf-3.9.0/lib/* ${hi3516d_release_path}/third_party/protobuf-3.9.0/ cp ${nnie_code_path}/mindspore/mindspore/lite/tools/providers/NNIE/Hi3516D/libnnie_mapper.so ${hi3516d_release_path}/ cp ${nnie_code_path}/mindspore/mindspore/lite/build/tools/converter/nnie/libmslite_nnie_converter.so ${hi3516d_release_path}/ || exit 1 cp ${nnie_code_path}/mindspore/mindspore/lite/build/tools/converter/nnie/data_process/libmslite_nnie_data_process.so ${hi3516d_release_path}/ || exit 1 - echo "cp new nnie so to release pkg success" + cd ${open_source_ms_path}/output/ || exit 1 + # remove unused static library + rm ./mindspore-lite-${version}-linux-x64/tools/converter/lib/libcrypto.a + rm ./mindspore-lite-${version}-linux-x64/tools/converter/lib/libmindspore_core.a + rm ./mindspore-lite-${version}-linux-x64/tools/converter/lib/libmindspore_gvar.a + rm ./mindspore-lite-${version}-linux-x64/tools/converter/lib/libprotobuf.a + rm ./mindspore-lite-${version}-linux-x64/tools/converter/lib/libsecurec.a + echo "cp new nnie so to release pkg success" rm ${open_source_ms_path}/output/mindspore-lite-${version}-linux-x64.tar.gz tar -zcf ./mindspore-lite-${version}-linux-x64.tar.gz ./mindspore-lite-${version}-linux-x64/ sha256sum ./mindspore-lite-${version}-linux-x64.tar.gz > ./mindspore-lite-${version}-linux-x64.tar.gz.sha256 @@ -59,7 +67,7 @@ function Run_Build_arm32() { cp -r ./runtime/ ${nnie_code_path}/mindspore/mindspore/lite/tools/benchmark/nnie_proposal/third_patry/ # compile nnie runtime so - export TOOLCHAIN_FILE=${nnie_code_path}/mindspore/cmake/toolchains/himix200.toolchain.cmake + export TOOLCHAIN_FILE=${open_source_ms_path}/mindspore/lite/cmake/himix200.toolchain.cmake export TOOLCHAIN_NAME=himix200 # disable gpu & npu & train @@ -68,7 +76,7 @@ function Run_Build_arm32() { export MSLITE_ENABLE_TRAIN=off export MSLITE_ENABLE_NNIE=on - bash ${nnie_code_path}/mindspore/build.sh -I arm32 -j 64 + bash ${nnie_code_path}/mindspore/build.sh -I arm32 -e cpu -j ${thread_num} if [ $? = 0 ]; then echo "build arm32 for nnie success" hi3516d_release_path=${open_source_ms_path}/output/mindspore-lite-${version}-linux-aarch32/providers/Hi3516D/ @@ -81,7 +89,7 @@ function Run_Build_arm32() { cd ${open_source_ms_path}/output/ || exit 1 rm ${open_source_ms_path}/output/mindspore-lite-${version}-linux-aarch32.tar.gz tar -zcf ./mindspore-lite-${version}-linux-aarch32.tar.gz ./mindspore-lite-${version}-linux-aarch32/ - sha256sum /mindspore-lite-${version}-linux-aarch32.tar.gz > /mindspore-lite-${version}-linux-aarch32.tar.gz.sha256 + sha256sum ./mindspore-lite-${version}-linux-aarch32.tar.gz > ./mindspore-lite-${version}-linux-aarch32.tar.gz.sha256 else echo "build arm32 for nnie failed"; return 1 fi @@ -94,7 +102,7 @@ echo "basepath is ${basepath}" open_source_ms_path=${basepath}/mindspore # Example:sh compile_nnie.sh -I arm32 -b nnie_master -while getopts "I:b:" opt; do +while getopts "I:b:j:" opt; do case ${opt} in I) task=${OPTARG} @@ -104,6 +112,10 @@ while getopts "I:b:" opt; do branch_name=${OPTARG} echo "branch name is ${OPTARG}" ;; + j) + thread_num=${OPTARG} + echo "thread_num is ${OPTARG}" + ;; ?) echo "unknown para" exit 1;;