From af26b8aaaacb350f5545c6d642ac8b78e382a8fe Mon Sep 17 00:00:00 2001 From: ccsu_zzh <1719571694@qq.com> Date: Wed, 17 Sep 2025 10:44:46 +0800 Subject: [PATCH] support for aarch32-linux compile --- mindspore-lite/CMakeLists.txt | 12 +++++-- .../cmake/cortex-a15.toolchain.cmake | 32 +++++++++++++++++++ mindspore-lite/src/CMakeLists.txt | 3 +- mindspore-lite/src/executor/CMakeLists.txt | 3 +- mindspore-lite/test/CMakeLists.txt | 4 ++- mindspore-lite/tools/benchmark/CMakeLists.txt | 2 +- scripts/build/build_lite.sh | 8 +++++ 7 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 mindspore-lite/cmake/cortex-a15.toolchain.cmake diff --git a/mindspore-lite/CMakeLists.txt b/mindspore-lite/CMakeLists.txt index c9249ade..c5f73f0b 100644 --- a/mindspore-lite/CMakeLists.txt +++ b/mindspore-lite/CMakeLists.txt @@ -343,6 +343,12 @@ elseif(TOOLCHAIN_NAME STREQUAL "ohos") add_compile_definitions(MS_COMPILE_OHOS) 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") +elseif(TOOLCHAIN_NAME STREQUAL "cortex-a15") + if((${MSLITE_REGISTRY_DEVICE} STREQUAL "ft78")) + set(TARGET_FT78 on) + elseif((${MSLITE_REGISTRY_DEVICE} STREQUAL "ft04")) + set(TARGET_FT04 on) + endif() endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3.0 @@ -683,7 +689,7 @@ if(PLATFORM_ARM64) endif() elseif(PLATFORM_ARM32) set(RUNTIME_COMPONENT_NAME "android-aarch32") - if(TARGET_HIMIX200) + if(TARGET_HIMIX200 OR TARGET_FT04 OR TARGET_FT78) set(RUNTIME_COMPONENT_NAME "linux-aarch32") elseif(TARGET_OHOS_LITE) set(RUNTIME_COMPONENT_NAME "ohos-aarch32") @@ -984,7 +990,9 @@ if(MSLITE_ENABLE_MINDRT) endif() if(PLATFORM_ARM32) - add_definitions(-mfloat-abi=softfp -mfpu=neon) + if(NOT TARGET_FT04 AND NOT TARGET_FT78) + add_definitions(-mfloat-abi=softfp -mfpu=neon) + endif() add_compile_definitions(ENABLE_ARM32) add_compile_definitions(ENABLE_ARM) endif() diff --git a/mindspore-lite/cmake/cortex-a15.toolchain.cmake b/mindspore-lite/cmake/cortex-a15.toolchain.cmake new file mode 100644 index 00000000..92e1c79b --- /dev/null +++ b/mindspore-lite/cmake/cortex-a15.toolchain.cmake @@ -0,0 +1,32 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +find_program(arm-linux-gnueabihf-gcc_EXE arm-linux-gnueabihf-gcc) +if(NOT arm-linux-gnueabihf-gcc_EXE) + message(FATAL_ERROR "Required C COMPILER arm-linux-gnueabihf-gcc not found, " + "please install the package and try building MindSpore again.") +else() + message("Find C COMPILER PATH: ${arm-linux-gnueabihf-gcc_EXE}") +endif() + +find_program(arm-linux-gnueabihf-g++_EXE arm-linux-gnueabihf-g++) +if(NOT arm-linux-gnueabihf-g++_EXE) + message(FATAL_ERROR "Required CXX COMPILER arm-linux-gnueabihf-g++ not found, " + "please install the package and try building MindSpore again.") +else() + message("Find CXX COMPILER PATH: ${arm-linux-gnueabihf-g++_EXE}") +endif() + +set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc") +set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mtune=cortex-a15 -mfpu=neon -mfloat-abi=hard") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mtune=cortex-a15 -mfpu=neon -mfloat-abi=hard") + +# used for flatc compile +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() diff --git a/mindspore-lite/src/CMakeLists.txt b/mindspore-lite/src/CMakeLists.txt index 0e468538..920c8040 100644 --- a/mindspore-lite/src/CMakeLists.txt +++ b/mindspore-lite/src/CMakeLists.txt @@ -453,7 +453,8 @@ if(SUPPORT_NPU) 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_OHOS) + AND NOT TARGET_MIX210 AND NOT TARGET_OHOS_LITE AND NOT MACHINE_LINUX_ARM64 + AND NOT TARGET_OHOS AND NOT TARGET_FT78 AND NOT TARGET_FT04) if(NOT TARGET_AOS_ARM) target_link_libraries(mindspore-lite log) target_link_libraries(mindspore-lite_static log) diff --git a/mindspore-lite/src/executor/CMakeLists.txt b/mindspore-lite/src/executor/CMakeLists.txt index 268378b3..7429b888 100644 --- a/mindspore-lite/src/executor/CMakeLists.txt +++ b/mindspore-lite/src/executor/CMakeLists.txt @@ -229,7 +229,8 @@ if(NOT MSLITE_SIMPLEST_CLOUD_INFERENCE) 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_FT78 AND NOT TARGET_FT04) target_link_libraries(lite-unified-executor log) endif() if(MSLITE_MINDDATA_IMPLEMENT STREQUAL "lite" AND NOT diff --git a/mindspore-lite/test/CMakeLists.txt b/mindspore-lite/test/CMakeLists.txt index 86ec7d50..88489c5c 100644 --- a/mindspore-lite/test/CMakeLists.txt +++ b/mindspore-lite/test/CMakeLists.txt @@ -190,7 +190,9 @@ if(MSLITE_ENABLE_TRAIN) endif() if(PLATFORM_ARM AND NOT (MSLITE_ENABLE_CLOUD_FUSION_INFERENCE OR MSLITE_ENABLE_CLOUD_INFERENCE)) - target_link_libraries(lite-test log) + if(NOT TARGET_FT78 AND NOT TARGET_FT04) + target_link_libraries(lite-test log) + endif() else() target_link_libraries(lite-test mindspore::securec pthread) endif() diff --git a/mindspore-lite/tools/benchmark/CMakeLists.txt b/mindspore-lite/tools/benchmark/CMakeLists.txt index 580bc63c..b6b2c186 100644 --- a/mindspore-lite/tools/benchmark/CMakeLists.txt +++ b/mindspore-lite/tools/benchmark/CMakeLists.txt @@ -49,7 +49,7 @@ else() if(SUPPORT_NPU AND ANDROID_STL STREQUAL "c++_static") set(BENCHMARK_LINK_LIB ${BENCHMARK_LINK_LIB} c++_shared) endif() - if(TARGET_AOS_ARM) + if(TARGET_AOS_ARM OR TARGET_FT78 OR TARGET_FT04) set(BENCHMARK_LINK_LIB ${BENCHMARK_LINK_LIB} pthread) endif() elseif(NOT MSVC) diff --git a/scripts/build/build_lite.sh b/scripts/build/build_lite.sh index 5ef24a8d..e978b565 100755 --- a/scripts/build/build_lite.sh +++ b/scripts/build/build_lite.sh @@ -389,6 +389,8 @@ build_lite() { MSLITE_REGISTRY_DEVICE=Hi3516D elif [[ "${MSLITE_MICRO_PLATFORM}" == cortex-m* && "${local_lite_platform}" == "x86_64" ]]; then TOOLCHAIN_NAME=${MSLITE_MICRO_PLATFORM} + elif [[ ("${MSLITE_REGISTRY_DEVICE}" == "ft04" || "${MSLITE_REGISTRY_DEVICE}" == "ft78") && "${local_lite_platform}" == "arm32" ]]; then + TOOLCHAIN_NAME="cortex-a15" fi machine=`uname -m` @@ -418,6 +420,12 @@ build_lite() { 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" + elif [[ "${TOOLCHAIN_NAME}" == "cortex-a15" ]]; then + # ft04&ft78 : Linux-aarch32 + CMAKE_TOOLCHAIN_FILE=${LITE_BASEPATH}/cmake/cortex-a15.toolchain.cmake + LITE_CMAKE_ARGS="${LITE_CMAKE_ARGS} -DTOOLCHAIN_NAME=cortex-a15" + 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 -- Gitee