You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
5.1 KiB
201 lines
5.1 KiB
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(libsrtp2 LANGUAGES C)
|
|
|
|
set(PACKAGE_VERSION 2.3.0)
|
|
set(PACKAGE_STRING "${CMAKE_PROJECT_NAME} ${PACKAGE_VERSION}")
|
|
|
|
include(TestBigEndian)
|
|
include(CheckIncludeFile)
|
|
include(CheckFunctionExists)
|
|
include(CheckTypeSize)
|
|
include(CheckCSourceCompiles)
|
|
|
|
test_big_endian(WORDS_BIGENDIAN)
|
|
|
|
check_include_file(arpa/inet.h HAVE_ARPA_INET_H)
|
|
check_include_file(byteswap.h HAVE_BYTESWAP_H)
|
|
check_include_file(inttypes.h HAVE_INTTYPES_H)
|
|
check_include_file(machine/types.h HAVE_MACHINE_TYPES_H)
|
|
check_include_file(netinet/in.h HAVE_NETINET_IN_H)
|
|
check_include_file(stdint.h HAVE_STDINT_H)
|
|
check_include_file(stdlib.h HAVE_STDLIB_H)
|
|
check_include_file(sys/int_types.h HAVE_SYS_INT_TYPES_H)
|
|
check_include_file(sys/socket.h HAVE_SYS_SOCKET_H)
|
|
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
|
check_include_file(unistd.h HAVE_UNISTD_H)
|
|
check_include_file(windows.h HAVE_WINDOWS_H)
|
|
check_include_file(winsock2.h HAVE_WINSOCK2_H)
|
|
|
|
check_function_exists(sigaction HAVE_SIGACTION)
|
|
check_function_exists(inet_aton HAVE_INET_ATON)
|
|
check_function_exists(usleep HAVE_USLEEP)
|
|
|
|
check_type_size(uint8_t UINT8_T)
|
|
check_type_size(uint16_t UINT16_T)
|
|
check_type_size(uint32_t UINT32_T)
|
|
check_type_size(uint64_t UINT64_T)
|
|
check_type_size(int32_t INT32_T)
|
|
check_type_size("unsigned long" SIZEOF_UNSIGNED_LONG)
|
|
check_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG)
|
|
|
|
check_c_source_compiles("inline void func(); void func() { } int main() { func(); return 0; }" HAVE_INLINE)
|
|
if(NOT HAVE_INLINE)
|
|
check_c_source_compiles("__inline void func(); void func() { } int main() { func(); return 0; }" HAVE___INLINE)
|
|
endif()
|
|
|
|
set(ENABLE_DEBUG_LOGGING OFF CACHE BOOL "Enable debug logging in all modules")
|
|
set(ERR_REPORTING_STDOUT OFF CACHE BOOL "Enable logging to stdout")
|
|
set(ERR_REPORTING_FILE "" CACHE FILEPATH "Use file for logging")
|
|
set(ENABLE_OPENSSL OFF CACHE BOOL "Enable OpenSSL crypto engine")
|
|
set(TEST_APPS ON CACHE BOOL "Build test applications")
|
|
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
|
|
|
if(ENABLE_OPENSSL)
|
|
find_package(OpenSSL REQUIRED)
|
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
endif()
|
|
set(OPENSSL ${ENABLE_OPENSSL} CACHE BOOL INTERNAL)
|
|
set(GCM ${ENABLE_OPENSSL} CACHE BOOL INTERNAL)
|
|
|
|
set(CONFIG_FILE_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
|
include_directories(${CONFIG_FILE_DIR})
|
|
|
|
configure_file(config_in_cmake.h ${CONFIG_FILE_DIR}/config.h)
|
|
add_definitions(-DHAVE_CONFIG_H)
|
|
|
|
set(SOURCES_C
|
|
srtp/ekt.c
|
|
srtp/srtp.c
|
|
)
|
|
|
|
set(CIPHERS_SOURCES_C
|
|
crypto/cipher/cipher.c
|
|
crypto/cipher/null_cipher.c
|
|
)
|
|
|
|
if(ENABLE_OPENSSL)
|
|
list(APPEND CIPHERS_SOURCES_C
|
|
crypto/cipher/aes_icm_ossl.c
|
|
crypto/cipher/aes_gcm_ossl.c
|
|
)
|
|
else()
|
|
list(APPEND CIPHERS_SOURCES_C
|
|
crypto/cipher/aes.c
|
|
crypto/cipher/aes_icm.c
|
|
)
|
|
endif()
|
|
|
|
set(HASHES_SOURCES_C
|
|
crypto/hash/auth.c
|
|
crypto/hash/null_auth.c
|
|
)
|
|
|
|
if(ENABLE_OPENSSL)
|
|
list(APPEND HASHES_SOURCES_C
|
|
crypto/hash/hmac_ossl.c
|
|
)
|
|
else()
|
|
list(APPEND HASHES_SOURCES_C
|
|
crypto/hash/hmac.c
|
|
crypto/hash/sha1.c
|
|
)
|
|
endif()
|
|
|
|
set(KERNEL_SOURCES_C
|
|
crypto/kernel/alloc.c
|
|
crypto/kernel/crypto_kernel.c
|
|
crypto/kernel/err.c
|
|
crypto/kernel/key.c
|
|
)
|
|
|
|
set(MATH_SOURCES_C
|
|
crypto/math/datatypes.c
|
|
crypto/math/stat.c
|
|
)
|
|
|
|
set(REPLAY_SOURCES_C
|
|
crypto/replay/rdb.c
|
|
crypto/replay/rdbx.c
|
|
crypto/replay/ut_sim.c
|
|
)
|
|
|
|
set(SOURCES_H
|
|
crypto/include/aes.h
|
|
crypto/include/aes_icm.h
|
|
crypto/include/alloc.h
|
|
crypto/include/auth.h
|
|
crypto/include/cipher.h
|
|
crypto/include/cipher_types.h
|
|
crypto/include/crypto_kernel.h
|
|
crypto/include/crypto_types.h
|
|
crypto/include/datatypes.h
|
|
crypto/include/err.h
|
|
crypto/include/hmac.h
|
|
crypto/include/integers.h
|
|
crypto/include/key.h
|
|
crypto/include/null_auth.h
|
|
crypto/include/null_cipher.h
|
|
crypto/include/rdb.h
|
|
crypto/include/rdbx.h
|
|
crypto/include/sha1.h
|
|
crypto/include/stat.h
|
|
include/srtp.h
|
|
include/srtp_priv.h
|
|
include/ut_sim.h
|
|
${CONFIG_FILE_DIR}/config.h
|
|
)
|
|
|
|
if(BUILD_SHARED_LIBS AND WIN32)
|
|
list(APPEND SOURCES_C
|
|
srtp.def
|
|
)
|
|
endif()
|
|
|
|
source_group("src" FILES ${SOURCES_C})
|
|
source_group("src\\Ciphers" FILES ${CIPHERS_SOURCES_C})
|
|
source_group("src\\Hashes" FILES ${HASHES_SOURCES_C})
|
|
source_group("src\\Kernel" FILES ${KERNEL_SOURCES_C})
|
|
source_group("src\\Math" FILES ${MATH_SOURCES_C})
|
|
source_group("src\\Replay" FILES ${REPLAY_SOURCES_C})
|
|
source_group("include" FILES ${SOURCES_H})
|
|
|
|
add_library(srtp2
|
|
${SOURCES_C}
|
|
${CIPHERS_SOURCES_C}
|
|
${HASHES_SOURCES_C}
|
|
${KERNEL_SOURCES_C}
|
|
${MATH_SOURCES_C}
|
|
${REPLAY_SOURCES_C}
|
|
${SOURCES_H}
|
|
)
|
|
|
|
target_include_directories(srtp2 PUBLIC crypto/include include)
|
|
if(ENABLE_OPENSSL)
|
|
target_link_libraries(srtp2 OpenSSL::Crypto)
|
|
endif()
|
|
if(WIN32)
|
|
target_link_libraries(srtp2 ws2_32)
|
|
endif()
|
|
|
|
install(TARGETS srtp2 DESTINATION lib)
|
|
install(FILES include/srtp.h crypto/include/auth.h
|
|
crypto/include/cipher.h
|
|
crypto/include/cipher_types.h
|
|
DESTINATION include/srtp2)
|
|
|
|
if(TEST_APPS)
|
|
enable_testing()
|
|
|
|
if(NOT (BUILD_SHARED_LIBS AND WIN32))
|
|
add_executable(test_srtp test/test_srtp.c)
|
|
target_link_libraries(test_srtp srtp2)
|
|
add_test(test_srtp test_srtp)
|
|
endif()
|
|
|
|
add_executable(srtp_driver test/srtp_driver.c
|
|
test/util.c test/getopt_s.c)
|
|
target_link_libraries(srtp_driver srtp2)
|
|
add_test(srtp_driver srtp_driver -v)
|
|
endif()
|