59 lines
2.7 KiB
CMake
59 lines
2.7 KiB
CMake
IF(NOT DEFINED ARCHS)
|
|
set(ARCHS ${CMAKE_SYSTEM_PROCESSOR})
|
|
ENDIF()
|
|
FILE(GLOB MNN_AArch32_SRC ${CMAKE_CURRENT_LIST_DIR}/arm32/*.[sS])
|
|
FILE(GLOB MNN_AArch64_SRC ${CMAKE_CURRENT_LIST_DIR}/arm64/*.[sS])
|
|
|
|
FILE(GLOB MNN_NEON_SRC ${CMAKE_CURRENT_LIST_DIR}/CommonOptFunctionNeon.cpp)
|
|
if (MNN_SUPPORT_BF16)
|
|
FILE(GLOB MNN_NEON_SRC ${MNN_NEON_SRC} ${CMAKE_CURRENT_LIST_DIR}/CommonNeonBF16.cpp)
|
|
FILE(GLOB MNN_AArch32_SRC ${MNN_AArch32_SRC} ${CMAKE_CURRENT_LIST_DIR}/arm32/bf16/*.[sS])
|
|
FILE(GLOB MNN_AArch64_SRC ${MNN_AArch64_SRC} ${CMAKE_CURRENT_LIST_DIR}/arm64/bf16/*.[sS])
|
|
endif()
|
|
|
|
if (MNN_LOW_MEMORY)
|
|
FILE(GLOB MNN_AArch64_SRC ${MNN_AArch64_SRC} ${CMAKE_CURRENT_LIST_DIR}/arm64/low_memory/*.[sS])
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^armv7" OR ARCHS MATCHES "^armv7(;armv7s)?")
|
|
message(STATUS "Enabling AArch32 Assemblies")
|
|
add_library(MNNARM32 OBJECT ${MNN_AArch32_SRC} ${MNN_NEON_SRC})
|
|
target_include_directories(MNNARM32 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/)
|
|
list(APPEND MNN_OBJECTS_TO_LINK $<TARGET_OBJECTS:MNNARM32>)
|
|
list(APPEND MNN_TARGETS MNNARM32)
|
|
add_definitions(-DMNN_USE_NEON)
|
|
target_compile_options(MNNARM32 PRIVATE -D__arm__)
|
|
if (MNN_SUPPORT_BF16)
|
|
target_compile_options(MNNARM32 PRIVATE -DMNN_SUPPORT_BF16)
|
|
endif()
|
|
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64" OR ARCHS STREQUAL "arm64" OR ARCHS STREQUAL "ARM64")
|
|
message(STATUS "Enabling AArch64 Assemblies")
|
|
|
|
if (MNN_KLEIDIAI)
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/KleidiAI.cmake)
|
|
download_kleidiai_and_collect_sources()
|
|
if(MNN_KLEIDIAI_DEFAULT_ON)
|
|
add_definitions(-DMNN_DEFAULT_USE_KLEIDIAI)
|
|
endif()
|
|
endif()
|
|
|
|
if (MNN_SME2)
|
|
add_definitions(-DMNN_SME2)
|
|
FILE(GLOB MNN_SME2_AArch64_SRC ${MNN_SME2_AArch64_SRC} ${CMAKE_CURRENT_LIST_DIR}/arm64/sme2_asm/*.[sS])
|
|
#set_source_files_properties(${MNN_SME2_AArch64_SRC} PROPERTIES COMPILE_OPTIONS "-fno-tree-vectorize;-march=armv8.6-a+sve+sve2+sme+sme2+fp16")
|
|
set_source_files_properties(${MNN_SME2_SRCS_ASM_FP16} PROPERTIES COMPILE_OPTIONS "-fno-tree-vectorize;-march=armv8.2-a+fp16")
|
|
endif()
|
|
add_library(MNNARM64 OBJECT ${MNN_AArch64_SRC} ${MNN_NEON_SRC} ${MNN_SOURCES_KLEIDIAI} ${KLEIDIAI_FILES_SME2} ${MNN_SME2_AArch64_SRC})
|
|
target_include_directories(MNNARM64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/)
|
|
list(APPEND MNN_OBJECTS_TO_LINK $<TARGET_OBJECTS:MNNARM64>)
|
|
list(APPEND MNN_TARGETS MNNARM64)
|
|
add_definitions(-DMNN_USE_NEON)
|
|
target_compile_options(MNNARM64 PRIVATE -D__aarch64__)
|
|
if (MNN_SUPPORT_BF16)
|
|
target_compile_options(MNNARM64 PRIVATE -DMNN_SUPPORT_BF16)
|
|
endif()
|
|
|
|
else()
|
|
# Building fat binary requires multiple separate builds and lipo-by-hand under CMake's design
|
|
endif()
|