blob: 51e887feebe3f7031b548db6a796c448fff5406e [file] [log] [blame]
# SPDX-License-Identifier: MIT
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
add_subdirectory(common)
# initialize KEM|SIG_OBJS for --warn-uninitialized
set(KEM_OBJS "")
set(SIG_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()
##### 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_DILITHIUM)
add_subdirectory(sig/dilithium)
set(SIG_OBJS ${SIG_OBJS} ${DILITHIUM_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()
##### OQS_COPY_FROM_UPSTREAM_FRAGMENT_ADD_ALG_OBJECTS_END
add_library(oqs kem/kem.c
${KEM_OBJS}
sig/sig.c
${SIG_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})
target_link_libraries(oqs PRIVATE ${OPENSSL_CRYPTO_LIBRARY})
target_link_libraries(oqs-internal PRIVATE ${OPENSSL_CRYPTO_LIBRARY})
endif()
target_include_directories(oqs
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
target_include_directories(oqs-internal
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
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 5
# 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}/cmake/liboqsTargets.cmake"
NAMESPACE OQS::
)