# SPDX-License-Identifier: Apache-2.0 # ARM架构优化配置文件 # 检查是否为ARM架构 if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") # 启用NEON指令集优化 if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64") # ARM64架构 add_compile_options(-march=armv8-a+simd) # 如果支持 crypto 扩展,则启用 include(CheckCSourceCompiles) check_c_source_compiles(" #include int main() { uint8x16_t a = vdupq_n_u8(0); uint8x16_t b = vaeseq_u8(a, vdupq_n_u8(0)); return 0; }" HAVE_ARM64_CRYPTO) if (HAVE_ARM64_CRYPTO) add_compile_options(-march=armv8-a+crypto) add_compile_definitions(HAVE_ARM64_CRYPTO) endif() else() # ARM32架构 add_compile_options(-march=armv7-a -mfpu=neon) endif() # 通用ARM优化选项 # 启用循环展开和其他优化 add_compile_options(-O3 -funroll-loops) # 启用链接时优化(LTO) include(CheckIPOSupported) check_ipo_supported(RESULT result) if(result) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # 检查编译器是否支持 thin LTO include(CheckCCompilerFlag) # check_c_compiler_flag("-flto=thin" HAS_THIN_LTO) # if(HAS_THIN_LTO) # add_compile_options(-flto=thin) # else() # # 回退到普通 LTO # add_compile_options(-flto) # endif() add_compile_options(-flto=auto) endif() # 启用快速数学运算(可能影响精度) # add_compile_options(-ffast-math) # 针对特定CPU的优化 # 可以根据目标设备替换为具体的CPU型号,如"cortex-a72"等 add_compile_options(-mtune=cortex-a76) message(STATUS "ARM optimizations enabled for ${CMAKE_SYSTEM_PROCESSOR}") # 添加NEON支持的定义 add_compile_definitions(HAVE_NEON) endif()