Files
sqisign_new/.cmake/target.cmake
StarsAC 0c2d61119b feat(compilation): 启用 ARM64 优化与 OpenMP 并行支持
- 在 `.cmake/arm_optimization.cmake` 中增强 ARM64 编译优化选项,包括:
  * 添加 `-mtune=cortex-a76` 和更多特定于 ARM64 的优化标志
  * 启用循环优化、浮点运算优化及链接时优化(LTO)
- 在 `CMakeLists.txt` 中新增 `ENABLE_OPENMP` 选项以启用 OpenMP 支持
- 优化 `randombytes_ctrdrbg.c` 中的 AES 密钥调度和随机数生成逻辑,利用 ARM64 Crypto 扩展提升性能
- 在 `lll_tests.c` 中对关键循环进行展开以降低分支开销
- 在签名密钥生成和提交阶段引入 OpenMP 并行化处理,加快理想采样过程
- 注释掉未使用的机器学习日志函数 `ml_log_ideal_attempt` 实现
- 调整默认 `GF_RADIX` 为 64,并更新相关编译配置
2025-11-26 15:51:27 +08:00

105 lines
3.1 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
include(CheckTypeSize)
function(check_target_feature CODE RUN_RESULT)
set(TEMP_FILE "${CMAKE_BINARY_DIR}/check_target_feature.c")
file(WRITE
${TEMP_FILE}
"int main(void) {
${CODE}
return 0;
}")
try_run(TEMP_RUN_RESULT TEMP_COMPILE_RESULT ${CMAKE_BINARY_DIR} ${TEMP_FILE})
set(${RUN_RESULT} ${TEMP_RUN_RESULT} PARENT_SCOPE)
if (ARGC EQUAL 3)
set(${ARGV2} ${TEMP_COMPILE_RESULT} PARENT_SCOPE)
endif()
file(REMOVE ${TEMP_FILE})
endfunction()
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64")
add_compile_definitions(TARGET_ARM64)
set(RADIX 64)
if (NOT APPLE)
check_target_feature("asm volatile(\"mrs x0, PMCCNTR_EL0\" : : : \"x0\");" CYCCNT)
if (CYCCNT STREQUAL "FAILED_TO_RUN")
message(STATUS "Cycle counter not supported, reverting to fallback measurement")
add_compile_definitions(NO_CYCLE_COUNTER)
endif()
endif()
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
add_compile_definitions(TARGET_ARM)
set(RADIX 32)
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
add_compile_definitions(TARGET_AMD64)
set(RADIX 64)
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686")
add_compile_definitions(TARGET_X86)
set(RADIX 32)
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(s390x.*|S390X.*)")
add_compile_definitions(TARGET_S390X TARGET_BIG_ENDIAN)
set(RADIX 64)
else()
add_compile_definitions(TARGET_OTHER)
set(RADIX 64)
message("Warning: system architecture not detected, defaulting to 64 bit")
endif()
# 修改默认GF_RADIX为64
if (NOT DEFINED GF_RADIX)
set(GF_RADIX 64)
endif()
if (NOT GF_RADIX STREQUAL "AUTO")
if (NOT((GF_RADIX EQUAL 64) OR (GF_RADIX EQUAL 32)))
message(FATAL_ERROR "Currently supported options for GF_RADIX: 32 or 64. Aborting")
endif()
set(RADIX ${GF_RADIX})
endif()
if (NOT DEFINED SQISIGN_BUILD_TYPE)
set(SQISIGN_BUILD_TYPE "ref")
endif()
if (RADIX EQUAL 32)
if (${SQISIGN_BUILD_TYPE} MATCHES "broadwell")
message(FATAL_ERROR "Broadwell implementation not supported in 32-bit build")
endif()
else()
# Testing for unsigned 128-bit integer support
check_type_size("__uint128_t" uint128_t)
if (${HAVE_uint128_t} AND (uint128_t EQUAL 16))
add_compile_definitions(HAVE_UINT128)
elseif(${SQISIGN_BUILD_TYPE} MATCHES "ref")
message(WARNING "Compiler/platform does not support unsigned 128-bit integers, falling back to 32-bit build")
set(RADIX 32)
endif()
endif()
message(STATUS "Using ${RADIX}-bit radix for gf module")
if (RADIX EQUAL 32)
add_compile_definitions(RADIX_32)
elseif (RADIX EQUAL 64)
add_compile_definitions(RADIX_64)
endif()
if (UNIX)
add_compile_definitions(TARGET_OS_UNIX)
else()
add_compile_definitions(TARGET_OS_OTHER)
endif()
set(C_OPT_FLAGS "")
if (NOT DEFINED SQISIGN_TEST_REPS)
set(SQISIGN_TEST_REPS 10)
endif()
add_compile_definitions(SQISIGN_TEST_REPS=${SQISIGN_TEST_REPS})