initial version of SQIsign
Co-authored-by: Jorge Chavez-Saab <jorgechavezsaab@gmail.com> Co-authored-by: Maria Corte-Real Santos <36373796+mariascrs@users.noreply.github.com> Co-authored-by: Luca De Feo <github@defeo.lu> Co-authored-by: Jonathan Komada Eriksen <jonathan.eriksen97@gmail.com> Co-authored-by: Basil Hess <bhe@zurich.ibm.com> Co-authored-by: Antonin Leroux <18654258+tonioecto@users.noreply.github.com> Co-authored-by: Patrick Longa <plonga@microsoft.com> Co-authored-by: Lorenz Panny <lorenz@yx7.cc> Co-authored-by: Francisco Rodríguez-Henríquez <francisco.rodriguez@tii.ae> Co-authored-by: Sina Schaeffler <108983332+syndrakon@users.noreply.github.com> Co-authored-by: Benjamin Wesolowski <19474926+Calodeon@users.noreply.github.com>
This commit is contained in:
42
.cmake/flags.cmake
Normal file
42
.cmake/flags.cmake
Normal file
@@ -0,0 +1,42 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostdlib")
|
||||
endif()
|
||||
|
||||
if (SOURCE_PATH)
|
||||
set(SOURCE_FINAL_PATH ${SOURCE_PATH})
|
||||
else()
|
||||
set(SOURCE_FINAL_PATH ${PROJECT_BINARY_DIR}/src)
|
||||
endif()
|
||||
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(CheckSymbolExists)
|
||||
include(CMakePushCheckState)
|
||||
|
||||
set(STRICT_OPTIONS_CPP )
|
||||
set(STRICT_OPTIONS_C )
|
||||
set(STRICT_OPTIONS_CXX )
|
||||
if(MSVC)
|
||||
if(ENABLE_STRICT)
|
||||
set(STRICT_OPTIONS_CPP "${STRICT_OPTIONS_CPP} /WX /Zc:__cplusplus")
|
||||
endif()
|
||||
else()
|
||||
set(STRICT_OPTIONS_CXX "${STRICT_OPTIONS_CXX} -std=c++14 -O2")
|
||||
set(STRICT_OPTIONS_CPP "${STRICT_OPTIONS_CPP} -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-missing-field-initializers")
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(STRICT_OPTIONS_C "${STRICT_OPTIONS_C} -O3")
|
||||
endif()
|
||||
set(STRICT_OPTIONS_C "${STRICT_OPTIONS_C} -std=c99 -Wno-error=strict-prototypes -fvisibility=hidden -funroll-loops -Wno-error=implicit-function-declaration -Wno-error=attributes")
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set(STRICT_OPTIONS_CPP "${STRICT_OPTIONS_CPP} -Wno-error=unknown-warning-option -Qunused-arguments -Wno-tautological-compare")
|
||||
set(STRICT_OPTIONS_CPP "${STRICT_OPTIONS_CPP} -Wno-unused-function -Wno-pass-failed")
|
||||
endif()
|
||||
if(ENABLE_STRICT)
|
||||
set(STRICT_OPTIONS_C "${STRICT_OPTIONS_C} -Werror -Wextra -Wno-unused-parameter -fno-strict-aliasing")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${STRICT_OPTIONS_C}")
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STRICT_OPTIONS_CXX} ${STRICT_OPTIONS_CPP}")
|
||||
36
.cmake/gmpconfig.cmake
Normal file
36
.cmake/gmpconfig.cmake
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
if (ENABLE_GMP_BUILD)
|
||||
# Download and build own libgmp version
|
||||
if (POLICY CMP0135)
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
SET(GMP_BUILD_CONFIG_ARGS "" CACHE STRING "Some user-specified gmp config options")
|
||||
option(ENABLE_GMP_STATIC "Option to statically link. Default is dynamic linking" OFF)
|
||||
|
||||
if (ENABLE_GMP_STATIC)
|
||||
set(GMP_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
else()
|
||||
set(GMP_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
|
||||
message("${GMP_BUILD_CONFIG_ARGS}")
|
||||
include(ExternalProject)
|
||||
find_program(MAKE_EXE NAMES make gmake nmake)
|
||||
set(libgmp_INSTALL_DIR "${CMAKE_BINARY_DIR}/libgmp")
|
||||
ExternalProject_Add(libgmp_external
|
||||
PREFIX ${libgmp_INSTALL_DIR}
|
||||
URL https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
|
||||
URL_HASH SHA256=fd4829912cddd12f84181c3451cc752be224643e87fac497b69edddadc49b4f2
|
||||
CONFIGURE_COMMAND ${libgmp_INSTALL_DIR}/src/libgmp_external/configure --prefix=${libgmp_INSTALL_DIR} ${GMP_BUILD_CONFIG_ARGS}
|
||||
BUILD_COMMAND ${MAKE_EXE} -j8
|
||||
INSTALL_COMMAND ${MAKE_EXE} install
|
||||
)
|
||||
|
||||
set(GMP ${libgmp_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gmp${GMP_LIB_SUFFIX})
|
||||
include_directories(${libgmp_INSTALL_DIR}/include)
|
||||
else()
|
||||
# use system gmp version
|
||||
find_library(GMP gmp)
|
||||
find_path(GMP_INCLUDE gmp.h)
|
||||
include_directories(${GMP_INCLUDE})
|
||||
endif()
|
||||
11
.cmake/impl_type.cmake
Normal file
11
.cmake/impl_type.cmake
Normal file
@@ -0,0 +1,11 @@
|
||||
get_filename_component(CCSD_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
string(TOUPPER ${CCSD_NAME} CCSD_NAME_UPPER)
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/broadwell AND SQISIGN_BUILD_TYPE MATCHES "broadwell")
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/broadwell)
|
||||
elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/opt AND SQISIGN_BUILD_TYPE MATCHES "opt")
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/opt)
|
||||
elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/ref)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ref)
|
||||
else()
|
||||
message(FATAL_ERROR "No matching implementation found")
|
||||
endif()
|
||||
40
.cmake/sanitizers.cmake
Normal file
40
.cmake/sanitizers.cmake
Normal file
@@ -0,0 +1,40 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# AddressSanitizer
|
||||
set(CMAKE_C_FLAGS_ASAN
|
||||
"-fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer -g -O1"
|
||||
CACHE STRING "Flags used by the C compiler during AddressSanitizer builds."
|
||||
FORCE)
|
||||
|
||||
# LeakSanitizer
|
||||
set(CMAKE_C_FLAGS_LSAN
|
||||
"-fsanitize=leak -fno-omit-frame-pointer -g -O1"
|
||||
CACHE STRING "Flags used by the C compiler during LeakSanitizer builds."
|
||||
FORCE)
|
||||
|
||||
# MemorySanitizer
|
||||
set(CMAKE_C_FLAGS_MSAN
|
||||
"-fsanitize=memory -fno-optimize-sibling-calls -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1"
|
||||
CACHE STRING "Flags used by the C compiler during MemorySanitizer builds."
|
||||
FORCE)
|
||||
|
||||
# UndefinedBehaviour
|
||||
set(CMAKE_C_FLAGS_UBSAN
|
||||
"-fsanitize=undefined"
|
||||
CACHE STRING "Flags used by the C compiler during UndefinedBehaviourSanitizer builds."
|
||||
FORCE)
|
||||
|
||||
set(CMAKE_C_FLAGS_COVERAGE
|
||||
"-fprofile-arcs -ftest-coverage"
|
||||
CACHE STRING "Flags used by the C compiler during Coverage builds."
|
||||
FORCE)
|
||||
|
||||
set(CMAKE_C_FLAGS_PERF
|
||||
"-ggdb"
|
||||
CACHE STRING "Flags used for profiling with perf or pprof."
|
||||
FORCE)
|
||||
|
||||
set(CMAKE_C_FLAGS_GPROF
|
||||
"-g -pg"
|
||||
CACHE STRING "Flags used for profiling with gprof."
|
||||
FORCE)
|
||||
26
.cmake/sqisign_variant.cmake
Normal file
26
.cmake/sqisign_variant.cmake
Normal file
@@ -0,0 +1,26 @@
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/generic)
|
||||
set(LIB_${CCSD_NAME_UPPER} sqisign_${CCSD_NAME}_generic CACHE INTERNAL "LIB")
|
||||
set(INC_${CCSD_NAME_UPPER} ${CMAKE_CURRENT_SOURCE_DIR}/generic/include CACHE INTERNAL "LIB")
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/generic)
|
||||
FOREACH(SVARIANT ${SVARIANT_S})
|
||||
string(TOUPPER ${SVARIANT} SVARIANT_UPPER)
|
||||
string(TOLOWER ${SVARIANT} SVARIANT_LOWER)
|
||||
set(LIB_${CCSD_NAME_UPPER}_${SVARIANT_UPPER} ${LIB_${CCSD_NAME_UPPER}} CACHE INTERNAL "LIB")
|
||||
set(INC_${CCSD_NAME_UPPER}_${SVARIANT_UPPER} ${INC_${CCSD_NAME_UPPER}} CACHE INTERNAL "INC")
|
||||
ENDFOREACH()
|
||||
else()
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
set(INC_${CCSD_NAME_UPPER} ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "LIB")
|
||||
endif()
|
||||
FOREACH(SVARIANT ${SVARIANT_S})
|
||||
string(TOUPPER ${SVARIANT} SVARIANT_UPPER)
|
||||
string(TOLOWER ${SVARIANT} SVARIANT_LOWER)
|
||||
set(LIB_${CCSD_NAME_UPPER}_${SVARIANT_UPPER} sqisign_${CCSD_NAME}_${SVARIANT} CACHE INTERNAL "LIB")
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${SVARIANT})
|
||||
set(INC_${CCSD_NAME_UPPER}_${SVARIANT_UPPER} ${CMAKE_CURRENT_SOURCE_DIR}/${SVARIANT}/include CACHE INTERNAL "INC")
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${SVARIANT})
|
||||
else()
|
||||
message(FATAL_ERROR "No matching implementation found for variant ${SVARIANT}")
|
||||
endif()
|
||||
ENDFOREACH()
|
||||
endif()
|
||||
39
.cmake/target.cmake
Normal file
39
.cmake/target.cmake
Normal file
@@ -0,0 +1,39 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64")
|
||||
add_definitions(-DTARGET_ARM64)
|
||||
add_definitions(-DRADIX_64)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
|
||||
add_definitions(-DTARGET_ARM)
|
||||
add_definitions(-DRADIX_32)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
|
||||
add_definitions(-DTARGET_AMD64)
|
||||
add_definitions(-DRADIX_64)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i386" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686")
|
||||
add_definitions(-DTARGET_X86)
|
||||
add_definitions(-DRADIX_32)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(s390x.*|S390X.*)")
|
||||
add_definitions(-DTARGET_S390X)
|
||||
add_definitions(-DTARGET_BIG_ENDIAN)
|
||||
add_definitions(-DRADIX_64)
|
||||
else()
|
||||
add_definitions(-DTARGET_OTHER)
|
||||
add_definitions(-DRADIX_64)
|
||||
message("Warning: system architecture not detected, defaulting to 64 bit")
|
||||
endif()
|
||||
|
||||
if (UNIX)
|
||||
add_definitions(-DTARGET_OS_UNIX)
|
||||
else()
|
||||
add_definitions(-DTARGET_OS_OTHER)
|
||||
endif()
|
||||
|
||||
set(C_OPT_FLAGS "")
|
||||
|
||||
if ((NOT DEFINED SQISIGN_BUILD_TYPE))
|
||||
set(SQISIGN_BUILD_TYPE opt)
|
||||
endif()
|
||||
|
||||
if ((NOT DEFINED SQISIGN_TEST_REPS))
|
||||
set(SQISIGN_TEST_REPS 1000)
|
||||
endif()
|
||||
17
.cmake/target_docs.cmake
Normal file
17
.cmake/target_docs.cmake
Normal file
@@ -0,0 +1,17 @@
|
||||
# Find Doxygen
|
||||
find_package(Doxygen)
|
||||
|
||||
# Check if Doxygen is found
|
||||
if(DOXYGEN_FOUND)
|
||||
# Set input and output directories
|
||||
set(DOXYGEN_CONF ${PROJECT_SOURCE_DIR}/Doxyfile)
|
||||
|
||||
# Add a target to generate Doxygen documentation using 'make doc'
|
||||
add_custom_target(doc
|
||||
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONF}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
COMMENT "Generating API documentation with Doxygen"
|
||||
VERBATIM )
|
||||
else()
|
||||
message(FATAL_ERROR "Doxygen not found - can't generate docs.")
|
||||
endif(DOXYGEN_FOUND)
|
||||
Reference in New Issue
Block a user