# 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() # CPU特定优化 # 根据实际部署平台选择合适的CPU型号 add_compile_options(-mtune=cortex-a76) # 默认使用cortex-a76 # 更多ARM64优化选项 add_compile_options( -moutline-atomics # 内联原子操作 -mstrict-align # 严格对齐优化 ) else() # ARM32架构 add_compile_options(-march=armv7-a -mfpu=neon) endif() # 通用ARM优化选项 add_compile_options( -O3 # 最高级别优化 -funroll-loops # 循环展开 -fomit-frame-pointer # 省略帧指针 -frename-registers # 重命名寄存器 -fipa-pta # 点对点分析 -floop-optimize # 循环优化 -fprefetch-loop-arrays # 预取循环数组 -funroll-all-loops # 展开所有循环 -fpeel-loops # 循环剥离 ) # 浮点运算优化 add_compile_options( -ffast-math # 快速数学运算 -ffp-contract=fast # 快速浮点收缩 -funsafe-math-optimizations # 不安全的数学优化 -ftree-vectorize # 树向量化 ) # 启用链接时优化(LTO) include(CheckIPOSupported) check_ipo_supported(RESULT result) if(result) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) add_compile_options(-flto=auto) endif() message(STATUS "ARM optimizations enabled for ${CMAKE_SYSTEM_PROCESSOR}") # 添加NEON支持的定义 add_compile_definitions(HAVE_NEON) endif()