ucissl / CMakeLists.txt
Jack698's picture
Upload folder using huggingface_hub
efadae0 verified
cmake_minimum_required(VERSION 3.10)
project(UnifiedCryptoInterface VERSION 1.0.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
option(USE_OPENSSL "Build with OpenSSL support" ON)
option(USE_LIBOQS "Build with LibOQS support" ON)
option(USE_GMSSL "Build with GmSSL support" ON)
option(BUILD_PROVIDER "Build OpenSSL Provider" ON)
option(BUILD_EXAMPLES "Build example programs" ON)
option(BUILD_TESTS "Build test programs" ON)
include_directories(${CMAKE_SOURCE_DIR}/include)
set(UCI_SOURCES
src/unified_crypto_interface.c
src/algorithm_registry.c
src/openssl_adapter.c
src/classic_crypto_adapter.c
src/pqc_adapter.c
src/hybrid_crypto.c
)
if(USE_OPENSSL)
find_package(OpenSSL)
if(OPENSSL_FOUND)
message(STATUS "Found OpenSSL: ${OPENSSL_VERSION}")
include_directories(${OPENSSL_INCLUDE_DIR})
add_definitions(-DHAVE_OPENSSL)
set(CRYPTO_LIBS ${CRYPTO_LIBS} ${OPENSSL_CRYPTO_LIBRARY})
list(APPEND UCI_SOURCES src/openssl_oqs_helper.c)
else()
message(WARNING "OpenSSL not found, building without OpenSSL support")
endif()
endif()
if(USE_LIBOQS)
find_path(LIBOQS_INCLUDE_DIR oqs/oqs.h
HINTS ${CMAKE_SOURCE_DIR}/libs/liboqs/build/include
)
find_library(LIBOQS_LIBRARY oqs
HINTS ${CMAKE_SOURCE_DIR}/libs/liboqs/build/lib
)
if(LIBOQS_INCLUDE_DIR AND LIBOQS_LIBRARY)
message(STATUS "Found LibOQS: ${LIBOQS_LIBRARY}")
include_directories(${LIBOQS_INCLUDE_DIR})
add_definitions(-DHAVE_LIBOQS)
set(CRYPTO_LIBS ${CRYPTO_LIBS} ${LIBOQS_LIBRARY})
else()
message(WARNING "LibOQS not found, building without post-quantum support")
endif()
endif()
if(USE_GMSSL)
find_path(GMSSL_INCLUDE_DIR gmssl/sm2.h
HINTS ${CMAKE_SOURCE_DIR}/libs/GmSSL/include
)
find_library(GMSSL_LIBRARY gmssl
HINTS ${CMAKE_SOURCE_DIR}/libs/GmSSL/build/lib
)
if(GMSSL_INCLUDE_DIR AND GMSSL_LIBRARY)
message(STATUS "Found GmSSL: ${GMSSL_LIBRARY}")
include_directories(${GMSSL_INCLUDE_DIR})
add_definitions(-DHAVE_GMSSL)
set(CRYPTO_LIBS ${CRYPTO_LIBS} ${GMSSL_LIBRARY})
else()
message(WARNING "GmSSL not found, building without GmSSL support")
endif()
endif()
add_library(uci SHARED ${UCI_SOURCES})
add_library(uci_static STATIC ${UCI_SOURCES})
set_target_properties(uci_static PROPERTIES OUTPUT_NAME uci)
target_link_libraries(uci ${CRYPTO_LIBS})
target_link_libraries(uci_static ${CRYPTO_LIBS})
if(BUILD_PROVIDER AND USE_OPENSSL AND OPENSSL_FOUND)
set(UCI_PROVIDER_SOURCES
src/uci_provider.c
src/uci_provider_sig.c
src/uci_provider_kem.c
src/uci_provider_keymgmt.c
)
add_library(uciprovider MODULE ${UCI_PROVIDER_SOURCES})
target_link_libraries(uciprovider uci ${CRYPTO_LIBS})
set_target_properties(uciprovider PROPERTIES
PREFIX ""
OUTPUT_NAME "uci"
)
execute_process(
COMMAND ${OPENSSL_EXECUTABLE} version -d
OUTPUT_VARIABLE OPENSSL_DIR_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX REPLACE "^OPENSSLDIR: \"(.*)\"$" "\\1" OPENSSL_DIR "${OPENSSL_DIR_OUTPUT}")
set(PROVIDER_INSTALL_DIR "${OPENSSL_DIR}/ossl-modules" CACHE PATH "OpenSSL provider install directory")
message(STATUS "OpenSSL Provider will be built")
message(STATUS "Provider install directory: ${PROVIDER_INSTALL_DIR}")
install(TARGETS uciprovider
LIBRARY DESTINATION ${PROVIDER_INSTALL_DIR}
)
endif()
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
install(TARGETS uci uci_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(DIRECTORY include/
DESTINATION include
FILES_MATCHING PATTERN "*.h"
)