91 lines
2.8 KiB
CMake
91 lines
2.8 KiB
CMake
# libsodium CMake wrapper
|
|
# This file should be placed in vendor/libsodium/ alongside the libsodium source
|
|
# After running: git submodule add https://github.com/jedisct1/libsodium.git libsodium
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
|
|
# Check if libsodium source exists
|
|
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/libsodium/include/sodium.h")
|
|
message(FATAL_ERROR
|
|
"libsodium source not found. Please run:\n"
|
|
" cd vendor/libsodium\n"
|
|
" git submodule add https://github.com/jedisct1/libsodium.git .\n"
|
|
"Or download libsodium and extract to vendor/libsodium/"
|
|
)
|
|
endif()
|
|
|
|
project(sodium C)
|
|
|
|
set(SODIUM_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/libsodium")
|
|
|
|
# Generate version.h from version.h.in
|
|
set(VERSION "1.0.20")
|
|
set(SODIUM_LIBRARY_VERSION_MAJOR 26)
|
|
set(SODIUM_LIBRARY_VERSION_MINOR 2)
|
|
set(SODIUM_LIBRARY_MINIMAL_DEF "")
|
|
configure_file(
|
|
"${SODIUM_SRC_DIR}/include/sodium/version.h.in"
|
|
"${SODIUM_SRC_DIR}/include/sodium/version.h"
|
|
)
|
|
|
|
# Collect all source files
|
|
file(GLOB_RECURSE SODIUM_SOURCES
|
|
"${SODIUM_SRC_DIR}/crypto_aead/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_auth/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_box/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_core/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_generichash/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_hash/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_kdf/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_kx/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_onetimeauth/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_pwhash/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_scalarmult/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_secretbox/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_secretstream/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_shorthash/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_sign/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_stream/*.c"
|
|
"${SODIUM_SRC_DIR}/crypto_verify/*.c"
|
|
"${SODIUM_SRC_DIR}/randombytes/*.c"
|
|
"${SODIUM_SRC_DIR}/sodium/*.c"
|
|
)
|
|
|
|
# Create static library
|
|
add_library(sodium STATIC ${SODIUM_SOURCES})
|
|
|
|
# Include directories
|
|
target_include_directories(sodium PUBLIC
|
|
"${SODIUM_SRC_DIR}/include"
|
|
"${SODIUM_SRC_DIR}/include/sodium"
|
|
)
|
|
|
|
target_include_directories(sodium PRIVATE
|
|
"${SODIUM_SRC_DIR}"
|
|
"${SODIUM_SRC_DIR}/crypto_onetimeauth/poly1305"
|
|
"${SODIUM_SRC_DIR}/crypto_onetimeauth/poly1305/donna"
|
|
"${SODIUM_SRC_DIR}/crypto_stream/chacha20"
|
|
"${SODIUM_SRC_DIR}/crypto_stream/chacha20/ref"
|
|
"${SODIUM_SRC_DIR}/crypto_stream/salsa20"
|
|
"${SODIUM_SRC_DIR}/crypto_stream/salsa20/ref"
|
|
)
|
|
|
|
# Platform-specific definitions
|
|
if(WIN32)
|
|
target_compile_definitions(sodium PRIVATE
|
|
SODIUM_STATIC
|
|
SODIUM_EXPORT=
|
|
_CRT_SECURE_NO_WARNINGS
|
|
inline=__inline
|
|
)
|
|
else()
|
|
target_compile_definitions(sodium PRIVATE
|
|
SODIUM_STATIC
|
|
SODIUM_EXPORT=
|
|
HAVE_INLINE
|
|
)
|
|
endif()
|
|
|
|
# Export for consumers
|
|
target_compile_definitions(sodium PUBLIC SODIUM_STATIC)
|