- 在 `.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,并更新相关编译配置
74 lines
2.4 KiB
CMake
74 lines
2.4 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
||
|
||
cmake_minimum_required(VERSION 3.13)
|
||
project(SQIsign VERSION 2.0 LANGUAGES C ASM)
|
||
|
||
set(SQISIGN_SO_VERSION "0")
|
||
set(CMAKE_C_STANDARD 11)
|
||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||
|
||
include(CTest)
|
||
|
||
option(ENABLE_STRICT "Build with strict compile options." ON)
|
||
option(ENABLE_TESTS "Enable compilation of tests." ON)
|
||
option(ENABLE_CT_TESTING "Enable compilation for constant time testing." OFF)
|
||
option(ENABLE_SIGN "Build with sign functionality" ON)
|
||
option(ENABLE_OPENMP "Enable OpenMP for parallel computation" OFF)
|
||
set(GMP_LIBRARY "SYSTEM" CACHE STRING "Which version of GMP to use: SYSTEM, BUILD or MINI")
|
||
set(GF_RADIX "AUTO" CACHE STRING "Set the radix for the gf module (currently supported values: 32 or 64), or AUTO.")
|
||
|
||
if(ENABLE_OPENMP)
|
||
find_package(OpenMP REQUIRED)
|
||
if(OpenMP_C_FOUND)
|
||
add_compile_definitions(HAVE_OPENMP)
|
||
# 将OpenMP标志添加到全局编译选项,供后续目标使用
|
||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
|
||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS}")
|
||
endif()
|
||
endif()
|
||
|
||
if (NOT DEFINED SQISIGN_BUILD_TYPE)
|
||
SET(SQISIGN_BUILD_TYPE "ref")
|
||
endif()
|
||
|
||
if (${SQISIGN_BUILD_TYPE} MATCHES "ref")
|
||
add_compile_definitions(SQISIGN_BUILD_TYPE_REF SQISIGN_GF_IMPL_REF)
|
||
elseif (${SQISIGN_BUILD_TYPE} MATCHES "opt")
|
||
add_compile_definitions(SQISIGN_BUILD_TYPE_OPT SQISIGN_GF_IMPL_REF)
|
||
elseif (${SQISIGN_BUILD_TYPE} MATCHES "broadwell")
|
||
add_compile_definitions(SQISIGN_BUILD_TYPE_BROADWELL SQISIGN_GF_IMPL_BROADWELL)
|
||
elseif (${SQISIGN_BUILD_TYPE} MATCHES "arm64crypto")
|
||
add_compile_definitions(SQISIGN_BUILD_TYPE_ARM64CRYPTO SQISIGN_GF_IMPL_REF)
|
||
endif()
|
||
|
||
SET(SVARIANT_S "lvl1;lvl3;lvl5")
|
||
|
||
include(.cmake/flags.cmake)
|
||
include(.cmake/sanitizers.cmake)
|
||
include(.cmake/target.cmake)
|
||
include(.cmake/arm_optimization.cmake)
|
||
|
||
if(ENABLE_SIGN)
|
||
include(.cmake/gmpconfig.cmake)
|
||
add_compile_definitions(ENABLE_SIGN)
|
||
endif()
|
||
|
||
set(BM_BINS "" CACHE INTERNAL "List of benchmark binaries")
|
||
|
||
set(SELECT_IMPL_TYPE ${PROJECT_SOURCE_DIR}/.cmake/impl_type.cmake)
|
||
set(SELECT_SQISIGN_VARIANT ${PROJECT_SOURCE_DIR}/.cmake/sqisign_variant.cmake)
|
||
|
||
set(INC_PUBLIC ${PROJECT_SOURCE_DIR}/include)
|
||
|
||
add_subdirectory(src)
|
||
add_subdirectory(apps)
|
||
add_subdirectory(test)
|
||
|
||
include(.cmake/bm.cmake)
|
||
|
||
#if(ENABLE_TESTS)
|
||
# enable_testing()
|
||
# add_subdirectory(test)
|
||
#endif()
|