# SPDX-License-Identifier: MIT include(GNUInstallDirs) include(CMakePackageConfigHelpers) add_subdirectory(common) # initialize KEM|SIG_OBJS for --warn-uninitialized set(KEM_OBJS "") set(SIG_OBJS "") set(SIG_STFL_OBJS "") if(${OQS_ENABLE_KEM_BIKE}) add_subdirectory(kem/bike) set(KEM_OBJS ${KEM_OBJS} ${BIKE_OBJS}) endif() if(${OQS_ENABLE_KEM_FRODOKEM}) add_subdirectory(kem/frodokem) set(KEM_OBJS ${KEM_OBJS} ${FRODOKEM_OBJS}) endif() if(OQS_ENABLE_KEM_NTRUPRIME) add_subdirectory(kem/ntruprime) set(KEM_OBJS ${KEM_OBJS} ${NTRUPRIME_OBJS}) endif() if(OQS_ENABLE_KEM_NTRU) add_subdirectory(kem/ntru) set(KEM_OBJS ${KEM_OBJS} ${NTRU_OBJS}) endif() ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_OBJECTS_START if(OQS_ENABLE_KEM_CLASSIC_MCELIECE) add_subdirectory(kem/classic_mceliece) set(KEM_OBJS ${KEM_OBJS} ${CLASSIC_MCELIECE_OBJS}) endif() if(OQS_ENABLE_KEM_HQC) add_subdirectory(kem/hqc) set(KEM_OBJS ${KEM_OBJS} ${HQC_OBJS}) endif() if(OQS_ENABLE_KEM_KYBER) add_subdirectory(kem/kyber) set(KEM_OBJS ${KEM_OBJS} ${KYBER_OBJS}) endif() if(OQS_ENABLE_KEM_ML_KEM) add_subdirectory(kem/ml_kem) set(KEM_OBJS ${KEM_OBJS} ${ML_KEM_OBJS}) endif() if(OQS_ENABLE_SIG_ML_DSA) add_subdirectory(sig/ml_dsa) set(SIG_OBJS ${SIG_OBJS} ${ML_DSA_OBJS}) endif() if(OQS_ENABLE_SIG_FALCON) add_subdirectory(sig/falcon) set(SIG_OBJS ${SIG_OBJS} ${FALCON_OBJS}) endif() if(OQS_ENABLE_SIG_SPHINCS) add_subdirectory(sig/sphincs) set(SIG_OBJS ${SIG_OBJS} ${SPHINCS_OBJS}) endif() if(OQS_ENABLE_SIG_MAYO) add_subdirectory(sig/mayo) set(SIG_OBJS ${SIG_OBJS} ${MAYO_OBJS}) endif() if(OQS_ENABLE_SIG_CROSS) add_subdirectory(sig/cross) set(SIG_OBJS ${SIG_OBJS} ${CROSS_OBJS}) endif() if(OQS_ENABLE_SIG_UOV) add_subdirectory(sig/uov) set(SIG_OBJS ${SIG_OBJS} ${UOV_OBJS}) endif() if(OQS_ENABLE_SIG_SNOVA) add_subdirectory(sig/snova) set(SIG_OBJS ${SIG_OBJS} ${SNOVA_OBJS}) endif() ##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_OBJECTS_END if(OQS_ENABLE_SIG_SLH_DSA) add_subdirectory(sig/slh_dsa) set(SIG_OBJS ${SIG_OBJS} ${SLH_DSA_OBJS}) endif() if(OQS_ENABLE_SIG_STFL_XMSS) add_subdirectory(sig_stfl/xmss) set(SIG_STFL_OBJS ${SIG_STFL_OBJS} ${XMSS_OBJS}) endif() if(OQS_ENABLE_SIG_STFL_LMS) add_subdirectory(sig_stfl/lms) set(SIG_STFL_OBJS ${SIG_STFL_OBJS} ${LMS_OBJS}) endif() add_library(oqs kem/kem.c ${KEM_OBJS} sig/sig.c ${SIG_OBJS} sig_stfl/sig_stfl.c ${SIG_STFL_OBJS} ${COMMON_OBJS}) # Internal library to be used only by test programs add_library(oqs-internal STATIC ${INTERNAL_OBJS}) if(DEFINED SANITIZER_LD_FLAGS) target_link_libraries(oqs PUBLIC ${SANITIZER_LD_FLAGS}) target_link_libraries(oqs-internal PUBLIC ${SANITIZER_LD_FLAGS}) endif() if(${OQS_USE_OPENSSL}) if(${OQS_DLOPEN_OPENSSL}) target_link_libraries(oqs PRIVATE ${CMAKE_DL_LIBS}) target_link_libraries(oqs-internal PRIVATE ${CMAKE_DL_LIBS}) else() target_link_libraries(oqs PRIVATE ${OPENSSL_CRYPTO_LIBRARY}) target_link_libraries(oqs-internal PRIVATE ${OPENSSL_CRYPTO_LIBRARY}) endif() endif() if(${OQS_USE_CUPQC}) set_property(TARGET oqs PROPERTY CUDA_RESOLVE_DEVICE_SYMBOLS ON) target_link_libraries(oqs PRIVATE cupqc) target_link_options(oqs PRIVATE $) endif() if(${OQS_USE_ICICLE}) target_link_libraries(oqs PRIVATE icicle::icicle_pqc_package) endif() target_include_directories(oqs PUBLIC "$" "$" ) target_include_directories(oqs-internal PUBLIC "$" "$" ) if(MINGW) target_link_options(oqs-internal PRIVATE -Wl,--export-all-symbols) endif() set_target_properties(oqs PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" VERSION ${OQS_VERSION_TEXT} SOVERSION 8 # For Windows DLLs RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") set_target_properties(oqs-internal PROPERTIES C_VISIBILITY_PRESET default ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib" # For Windows DLLs RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/liboqsConfig.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/liboqs ) # generate the version file for the config file write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/liboqsConfigVersion.cmake" VERSION "${OQS_VERSION_TEXT}" COMPATIBILITY AnyNewerVersion ) if(OQS_USE_OPENSSL) set(_oqs_pkgconfig_requires_private openssl) endif() # generate pkg-config file configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/liboqs.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liboqs.pc @ONLY ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/liboqsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/liboqsConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/liboqs" ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/liboqs.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) install(TARGETS oqs EXPORT liboqsTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/oqs ) install(EXPORT liboqsTargets FILE liboqsTargets.cmake NAMESPACE OQS:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/liboqs ) install(FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/oqs) export(EXPORT liboqsTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/liboqsTargets.cmake" NAMESPACE OQS:: )