2025-11-25 22:58:37 +08:00
|
|
|
# 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 <arm_neon.h>
|
|
|
|
|
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()
|
2025-11-26 15:51:27 +08:00
|
|
|
|
|
|
|
|
# CPU特定优化
|
|
|
|
|
# 根据实际部署平台选择合适的CPU型号
|
|
|
|
|
add_compile_options(-mtune=cortex-a76) # 默认使用cortex-a76
|
|
|
|
|
|
|
|
|
|
# 更多ARM64优化选项
|
|
|
|
|
add_compile_options(
|
|
|
|
|
-moutline-atomics # 内联原子操作
|
|
|
|
|
-mstrict-align # 严格对齐优化
|
|
|
|
|
)
|
|
|
|
|
|
2025-11-25 22:58:37 +08:00
|
|
|
else()
|
|
|
|
|
# ARM32架构
|
|
|
|
|
add_compile_options(-march=armv7-a -mfpu=neon)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# 通用ARM优化选项
|
2025-11-26 15:51:27 +08:00
|
|
|
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 # 树向量化
|
|
|
|
|
)
|
2025-11-25 22:58:37 +08:00
|
|
|
|
|
|
|
|
# 启用链接时优化(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()
|