diff options
| -rw-r--r-- | ports/libsodium/CMakeLists.txt | 731 | ||||
| -rw-r--r-- | ports/libsodium/CONTROL | 5 | ||||
| -rw-r--r-- | ports/libsodium/portfile.cmake | 36 | ||||
| -rw-r--r-- | ports/libsodium/sodiumConfig.cmake.in | 62 | ||||
| -rw-r--r-- | ports/libsodium/vcpkg.json | 17 | ||||
| -rw-r--r-- | versions/baseline.json | 2 | ||||
| -rw-r--r-- | versions/l-/libsodium.json | 5 |
7 files changed, 598 insertions, 260 deletions
diff --git a/ports/libsodium/CMakeLists.txt b/ports/libsodium/CMakeLists.txt index 9c074a2b1..88836cc2f 100644 --- a/ports/libsodium/CMakeLists.txt +++ b/ports/libsodium/CMakeLists.txt @@ -38,6 +38,7 @@ option(ENABLE_BLOCKING_RANDOM "Enable blocking random" OFF) option(ENABLE_MINIMAL "Only compile the minimum set of functions required for the high-level API" OFF)
option(ENABLE_PTHREADS "Use pthreads library" ON)
option(ENABLE_RETPOLINE "Use return trampolines for indirect calls" OFF)
+option(ENABLE_NATIVE_OPTIMIZATIONS "Optimize for the native CPU - The resulting library will be faster but not portable" OFF)
if (ENABLE_MINIMAL)
set(SODIUM_LIBRARY_MINIMAL_DEF "#define SODIUM_LIBRARY_MINIMAL 1")
@@ -48,35 +49,7 @@ configure_file( ${CMAKE_BINARY_DIR}/sodium/version.h
)
-file(GLOB sodium_headers
- ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/*.h
- ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium.h
- ${CMAKE_BINARY_DIR}/sodium/version.h
-)
-
-if (UNIX)
- file(GLOB_RECURSE sodium_sources
- ${PROJECT_SOURCE_DIR}/src/libsodium/*.c
- ${PROJECT_SOURCE_DIR}/src/libsodium/*.S # HAVE_AVX_ASM
- )
-else ()
- file(GLOB_RECURSE sodium_sources
- ${PROJECT_SOURCE_DIR}/src/libsodium/*.c
- )
-endif ()
-
-if (MSVC)
- enable_language(RC)
-
- list(APPEND sodium_sources
- builds/msvc/resource.rc
- )
-endif ()
-
-add_library(${PROJECT_NAME}
- ${sodium_headers}
- ${sodium_sources}
-)
+add_library(${PROJECT_NAME})
set_target_properties(${PROJECT_NAME}
PROPERTIES
@@ -84,22 +57,35 @@ set_target_properties(${PROJECT_NAME} OUTPUT_NAME "lib${PROJECT_NAME}"
)
-test_big_endian(IS_BIG_ENDIAN)
+if (MSVC)
-if (IS_BIG_ENDIAN)
- target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_BIG_ENDIAN)
-else ()
- target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_LITTLE_ENDIAN)
-endif ()
+ target_include_directories(${PROJECT_NAME}
+ PRIVATE
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium>
+ $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/sodium>
+ )
-macro (sodium_check_func func var)
- check_function_exists(${func} ${var})
- if (${var})
- target_compile_definitions(${PROJECT_NAME} PRIVATE ${var}=1)
- endif ()
-endmacro ()
+ enable_language(RC)
+
+ # see libsodium.vcxproj for reference
+ # - omitted "<ClInclude Include="src\libsodium\include\sodium\version.h" />" in favour of "${CMAKE_BINARY_DIR}/sodium/version.h"
+ file(GLOB_RECURSE sodium_headers
+ ${CMAKE_BINARY_DIR}/sodium/version.h
+ ${PROJECT_SOURCE_DIR}/builds/msvc/resource.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/*.h
+ )
+
+ file(GLOB_RECURSE sodium_sources
+ ${PROJECT_SOURCE_DIR}/builds/msvc/resource.rc
+ ${PROJECT_SOURCE_DIR}/src/libsodium/*.c
+ )
+
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${sodium_headers}
+ ${sodium_sources}
+ )
-if (MSVC)
target_compile_options(${PROJECT_NAME}
PRIVATE
/D_CONSOLE
@@ -116,35 +102,34 @@ if (MSVC) PUBLIC
advapi32
)
-else ()
- if (ENABLE_BLOCKING_RANDOM)
- target_compile_definitions(${PROJECT_NAME} PRIVATE USE_BLOCKING_RANDOM)
- endif ()
- if (ENABLE_PTHREADS)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_PTHREAD)
- target_compile_options(${PROJECT_NAME} PRIVATE -ftls-model=local-dynamic)
- target_compile_options(${PROJECT_NAME} PUBLIC -pthread)
- endif ()
-
- if (ENABLE_SSP)
- target_compile_options(${PROJECT_NAME} PRIVATE -fstack-protector-all)
- endif ()
-
- if (ENABLE_PIE)
- target_compile_options(${PROJECT_NAME} PRIVATE -fPIE)
- endif ()
+else ()
- if (ENABLE_RETPOLINE)
- target_compile_options(${PROJECT_NAME}
- PRIVATE
- -mindirect-branch=thunk-inline
- -mindirect-branch-register
- )
- endif ()
+ # use interface libs to track common flags and definitions across all targets
+ add_library(${PROJECT_NAME}_config_private INTERFACE)
+ add_library(${PROJECT_NAME}_config_public INTERFACE)
+
+ # use interface libs to track special flags only required for certain objects
+ add_library(${PROJECT_NAME}_aesni_config INTERFACE)
+ add_library(${PROJECT_NAME}_avx_config INTERFACE)
+ add_library(${PROJECT_NAME}_avx2_config INTERFACE)
+ add_library(${PROJECT_NAME}_avx512f_config INTERFACE)
+ add_library(${PROJECT_NAME}_mmx_config INTERFACE)
+ add_library(${PROJECT_NAME}_pclmul_config INTERFACE)
+ add_library(${PROJECT_NAME}_rdrand_config INTERFACE)
+ add_library(${PROJECT_NAME}_sse2_config INTERFACE)
+ add_library(${PROJECT_NAME}_sse3_config INTERFACE)
+ add_library(${PROJECT_NAME}_sse41_config INTERFACE)
+ add_library(${PROJECT_NAME}_ssse3_config INTERFACE)
+
+ target_include_directories(${PROJECT_NAME}_config_private
+ INTERFACE
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium>
+ $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/sodium>
+ )
- target_compile_options(${PROJECT_NAME}
- PRIVATE
+ target_compile_options(${PROJECT_NAME}_config_private
+ INTERFACE
-flax-vector-conversions
-fvisibility=hidden
-fPIC
@@ -184,18 +169,62 @@ else () if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR
CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
- target_compile_options(${PROJECT_NAME}
- PRIVATE
+ target_compile_options(${PROJECT_NAME}_config_private
+ INTERFACE
-Wno-unknown-warning-option
-Wshorten-64-to-32
)
endif ()
+ # see configure.ac for reference
+ if (ENABLE_BLOCKING_RANDOM)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE USE_BLOCKING_RANDOM)
+ endif ()
+
+ if (ENABLE_PTHREADS)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_PTHREAD)
+ target_compile_options(${PROJECT_NAME}_config_private INTERFACE -ftls-model=local-dynamic)
+ target_compile_options(${PROJECT_NAME}_config_public INTERFACE -pthread)
+ endif ()
+
+ if (ENABLE_SSP)
+ target_compile_options(${PROJECT_NAME}_config_private INTERFACE -fstack-protector-all)
+ endif ()
+
+ if (ENABLE_PIE)
+ target_compile_options(${PROJECT_NAME}_config_private INTERFACE -fPIE)
+ endif ()
+
+ if (ENABLE_RETPOLINE)
+ target_compile_options(${PROJECT_NAME}_config_private
+ INTERFACE
+ -mindirect-branch=thunk-inline
+ -mindirect-branch-register
+ )
+ endif ()
+
+ if (ENABLE_NATIVE_OPTIMIZATIONS)
+ target_compile_options(${PROJECT_NAME}_config_private
+ INTERFACE
+ -ftree-vectorize
+ -ftree-slp-vectorize
+ -fomit-frame-pointer
+ -march=native
+ )
+ endif ()
+
check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
if (HAVE_SYS_MMAN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_SYS_MMAN_H)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_SYS_MMAN_H)
endif ()
+ macro (sodium_check_func func var)
+ check_function_exists(${func} ${var})
+ if (${var})
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE ${var}=1)
+ endif ()
+ endmacro ()
+
sodium_check_func(arc4random HAVE_SAFE_ARC4RANDOM)
sodium_check_func(mmap HAVE_MMAP)
sodium_check_func(mlock HAVE_MLOCK)
@@ -215,15 +244,15 @@ else () #include <mmintrin.h>
int main(void)
{
- __m64 x = _mm_setzero_si64();
+ __m64 x = _mm_setzero_si64();
}
"
HAVE_MMINTRIN_H
)
if (HAVE_MMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_MMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mmmx)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_MMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_mmx_config INTERFACE -mmmx)
endif ()
check_c_source_runs(
@@ -235,16 +264,16 @@ else () #include <emmintrin.h>
int main(void) {
- __m128d x = _mm_setzero_pd();
- __m128i z = _mm_srli_epi64(_mm_setzero_si128(), 26);
+ __m128d x = _mm_setzero_pd();
+ __m128i z = _mm_srli_epi64(_mm_setzero_si128(), 26);
}
"
HAVE_EMMINTRIN_H
)
if (HAVE_EMMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_EMMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -msse2)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_EMMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_sse2_config INTERFACE -msse2)
endif ()
check_c_source_runs(
@@ -252,15 +281,15 @@ else () #pragma GCC target(\"sse3\")
#include <pmmintrin.h>
int main(void) {
- __m128 x = _mm_addsub_ps(_mm_cvtpd_ps(_mm_setzero_pd()), _mm_cvtpd_ps(_mm_setzero_pd()));
+ __m128 x = _mm_addsub_ps(_mm_cvtpd_ps(_mm_setzero_pd()), _mm_cvtpd_ps(_mm_setzero_pd()));
}
"
HAVE_PMMINTRIN_H
)
if (HAVE_PMMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_PMMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -msse3)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_PMMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_sse3_config INTERFACE -msse3)
endif ()
check_c_source_runs(
@@ -268,15 +297,15 @@ else () #pragma GCC target(\"ssse3\")
#include <tmmintrin.h>
int main(void) {
- __m64 x = _mm_abs_pi32(_m_from_int(0));
+ __m64 x = _mm_abs_pi32(_m_from_int(0));
}
"
HAVE_TMMINTRIN_H
)
if (HAVE_TMMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TMMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mssse3)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_TMMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_ssse3_config INTERFACE -mssse3)
endif ()
check_c_source_runs(
@@ -284,15 +313,15 @@ else () #pragma GCC target(\"sse4.1\")
#include <smmintrin.h>
int main(void) {
- __m128i x = _mm_minpos_epu16(_mm_setzero_si128());
+ __m128i x = _mm_minpos_epu16(_mm_setzero_si128());
}
"
HAVE_SMMINTRIN_H
)
if (HAVE_SMMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_SMMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -msse4.1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_SMMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_sse41_config INTERFACE -msse4.1)
endif ()
check_c_source_runs(
@@ -303,15 +332,15 @@ else () #pragma GCC target(\"avx\")
#include <immintrin.h>
int main(void) {
- _mm256_zeroall();
+ _mm256_zeroall();
}
"
HAVE_AVXINTRIN_H
)
if (HAVE_AVXINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVXINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mavx)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_AVXINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_avx_config INTERFACE -mavx)
endif ()
check_c_source_runs(
@@ -322,17 +351,17 @@ else () #pragma GCC target(\"avx2\")
#include <immintrin.h>
int main(void) {
- __m256 x = _mm256_set1_ps(3.14);
- __m256 y = _mm256_permutevar8x32_ps(x, _mm256_set1_epi32(42));
- return _mm256_movemask_ps(_mm256_cmp_ps(x, y, _CMP_NEQ_OQ));
+ __m256 x = _mm256_set1_ps(3.14);
+ __m256 y = _mm256_permutevar8x32_ps(x, _mm256_set1_epi32(42));
+ return _mm256_movemask_ps(_mm256_cmp_ps(x, y, _CMP_NEQ_OQ));
}
"
HAVE_AVX2INTRIN_H
)
if (HAVE_AVX2INTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX2INTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mavx2)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_AVX2INTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_avx2_config INTERFACE -mavx2)
check_c_source_runs(
"
@@ -342,15 +371,15 @@ else () #pragma GCC target(\"avx2\")
#include <immintrin.h>
int main(void) {
- __m256i y = _mm256_broadcastsi128_si256(_mm_setzero_si128());
+ __m256i y = _mm256_broadcastsi128_si256(_mm_setzero_si128());
}
"
_mm256_broadcastsi128_si256_DEFINED
)
if (NOT _mm256_broadcastsi128_si256_DEFINED)
- target_compile_definitions(${PROJECT_NAME}
- PRIVATE
+ target_compile_definitions(${PROJECT_NAME}_config_private
+ INTERFACE
_mm256_broadcastsi128_si256=_mm_broadcastsi128_si256
)
endif ()
@@ -375,20 +404,18 @@ else () # error Compiler AVX512 support may be broken
# endif
#endif
-
+
int main(void) {
- __m512i x = _mm512_setzero_epi32();
- __m512i y = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), x);
+ __m512i x = _mm512_setzero_epi32();
+ __m512i y = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), x);
}
"
HAVE_AVX512FINTRIN_H
)
if (HAVE_AVX512FINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX512FINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mavx512f)
- else ()
- target_compile_options(${PROJECT_NAME} PRIVATE -mno-avx512f)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_AVX512FINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_avx512f_config INTERFACE -mavx512f)
endif ()
check_c_source_runs(
@@ -401,16 +428,17 @@ else () #include <wmmintrin.h>
int main(void) {
- __m128i x = _mm_aesimc_si128(_mm_setzero_si128());
- __m128i y = _mm_clmulepi64_si128(_mm_setzero_si128(), _mm_setzero_si128(), 0);
+ __m128i x = _mm_aesimc_si128(_mm_setzero_si128());
+ __m128i y = _mm_clmulepi64_si128(_mm_setzero_si128(), _mm_setzero_si128(), 0);
}
"
HAVE_WMMINTRIN_H
)
if (HAVE_WMMINTRIN_H)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WMMINTRIN_H=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -maes -mpclmul)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_WMMINTRIN_H=1)
+ target_compile_options(${PROJECT_NAME}_aesni_config INTERFACE -maes)
+ target_compile_options(${PROJECT_NAME}_pclmul_config INTERFACE -mpclmul)
endif ()
check_c_source_runs(
@@ -422,16 +450,16 @@ else () #include <immintrin.h>
int main(void) {
- unsigned long long x;
- _rdrand64_step(&x);
+ unsigned long long x;
+ _rdrand64_step(&x);
}
"
HAVE_RDRAND
)
if (HAVE_RDRAND)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_RDRAND=1)
- target_compile_options(${PROJECT_NAME} PRIVATE -mrdrnd)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_RDRAND=1)
+ target_compile_options(${PROJECT_NAME}_rdrand_config INTERFACE -mrdrnd)
endif ()
check_c_source_runs(
@@ -439,29 +467,29 @@ else () #include <intrin.h>
int main(void) {
- (void) _xgetbv(0);
+ (void) _xgetbv(0);
}
"
HAVE__XGETBV
)
if (HAVE__XGETBV)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE__XGETBV=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE__XGETBV=1)
endif ()
check_c_source_runs(
"
int main(void) {
- int a = 42;
- int *pnt = &a;
- __asm__ __volatile__ (\"\" : : \"r\"(pnt) : \"memory\");
+ int a = 42;
+ int *pnt = &a;
+ __asm__ __volatile__ (\"\" : : \"r\"(pnt) : \"memory\");
}
"
HAVE_INLINE_ASM
)
if (HAVE_INLINE_ASM)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_INLINE_ASM=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_INLINE_ASM=1)
endif ()
check_c_source_runs(
@@ -475,8 +503,8 @@ else () #else
# error !x86_64
#endif
- unsigned char i = 0, o = 0, t;
- __asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \n\"
+ unsigned char i = 0, o = 0, t;
+ __asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \n\"
\"movb (%[i]), %[t] \n\"
\"addb %[t], (%[o]) \n\"
: [t] \"=&r\"(t)
@@ -488,7 +516,7 @@ else () )
if (HAVE_AMD64_ASM)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AMD64_ASM=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_AMD64_ASM=1)
endif ()
check_c_source_runs(
@@ -502,14 +530,14 @@ else () #else
# error !x86_64
#endif
- __asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\");
+ __asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\");
}
"
HAVE_AVX_ASM
)
if (HAVE_AVX_ASM)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX_ASM=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_AVX_ASM=1)
endif ()
check_c_source_runs(
@@ -534,27 +562,27 @@ else () typedef unsigned uint128_t __attribute__((mode(TI)));
#endif
void fcontract(uint128_t *t) {
- *t += 0x8000000000000 - 1;
- *t *= *t;
- *t >>= 84;
+ *t += 0x8000000000000 - 1;
+ *t *= *t;
+ *t >>= 84;
}
int main(void) {
- (void) fcontract;
+ (void) fcontract;
}
"
HAVE_TI_MODE
)
if (HAVE_TI_MODE)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TI_MODE=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_TI_MODE=1)
endif ()
check_c_source_runs(
"
int main(void) {
- unsigned int cpu_info[4];
- __asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" :
+ unsigned int cpu_info[4];
+ __asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" :
\"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]),
\"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :
\"0\" (0U), \"2\" (0U));
@@ -564,7 +592,7 @@ else () )
if (HAVE_CPUID)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_CPUID=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_CPUID=1)
endif ()
endif ()
@@ -581,22 +609,22 @@ else () )
if (HAVE_WEAK_SYMBOLS)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WEAK_SYMBOLS=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_WEAK_SYMBOLS=1)
endif ()
check_c_source_runs(
"
int main(void) {
- static volatile int _sodium_lock;
- __sync_lock_test_and_set(&_sodium_lock, 1);
- __sync_lock_release(&_sodium_lock);
+ static volatile int _sodium_lock;
+ __sync_lock_test_and_set(&_sodium_lock, 1);
+ __sync_lock_release(&_sodium_lock);
}
"
HAVE_ATOMIC_OPS
)
if (HAVE_ATOMIC_OPS)
- target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_ATOMIC_OPS=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_ATOMIC_OPS=1)
endif ()
check_c_source_runs(
@@ -604,23 +632,376 @@ else () #include <limits.h>
#include <stdint.h>
int main(void) {
- (void) SIZE_MAX;
- (void) UINT64_MAX;
+ (void) SIZE_MAX;
+ (void) UINT64_MAX;
}
"
STDC_LIMIT_MACROS_REQUIRED
)
if (STDC_LIMIT_MACROS_REQUIRED)
- target_compile_definitions(${PROJECT_NAME}
- PRIVATE
+ target_compile_definitions(${PROJECT_NAME}_config_private
+ INTERFACE
__STDC_LIMIT_MACROS
__STDC_CONSTANT_MACROS
)
endif ()
# include/sodium/private/common.h
- target_compile_definitions(${PROJECT_NAME} PRIVATE CONFIGURED=1)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE CONFIGURED=1)
+
+ test_big_endian(IS_BIG_ENDIAN)
+
+ if (IS_BIG_ENDIAN)
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE NATIVE_BIG_ENDIAN)
+ else ()
+ target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE NATIVE_LITTLE_ENDIAN)
+ endif ()
+
+ # see src/libsodium/Makefile.am for reference
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${CMAKE_BINARY_DIR}/sodium/version.h
+
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_auth/crypto_auth.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box_easy.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box_seal.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/hchacha20/core_hchacha20.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/crypto_generichash.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/generichash_blake2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse41.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-avx2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_hash/crypto_hash.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_hash/sha256/hash_sha256.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_hash/sha512/hash_sha512.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_kdf/crypto_kdf.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_kx/crypto_kx.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-core.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-core.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blake2b-long.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blake2b-long.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-ref.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/crypto_pwhash.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/crypto_scalarmult.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_secretbox/crypto_secretbox.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/crypto_shorthash.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash_ref.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/crypto_sign.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/sign_ed25519.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/keypair.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/open.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/sign.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/stream_chacha20.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/stream_chacha20.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/crypto_stream.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/stream_salsa20.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/stream_salsa20.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_verify/sodium/verify.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/chacha20_ietf_ext.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/common.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/implementations.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/mutex.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/sse2_64_32.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/randombytes/randombytes.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/sodium/codecs.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/sodium/core.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/sodium/runtime.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/sodium/utils.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/sodium/version.c
+ )
+
+ if (HAVE_TI_MODE)
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/base.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/base2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/constants.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h
+ )
+ else ()
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/constants.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h
+ )
+ endif ()
+
+ if (HAVE_AMD64_ASM)
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h
+ )
+ else ()
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.h
+ )
+ endif ()
+
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base.S
+ )
+
+ if (HAVE_AVX_ASM)
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S
+ )
+ endif ()
+
+ if (NOT ENABLE_MINIMAL)
+ target_sources(${PROJECT_NAME}
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/core_ed25519.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/core_ristretto255.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_scalarmult/ristretto255/ref10/scalarmult_ristretto255_ref10.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa208/stream_salsa208.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c
+ )
+ endif ()
+
+ add_library(${PROJECT_NAME}_rdrand
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/randombytes/internal/randombytes_internal_random.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c
+ )
+
+ target_link_libraries(${PROJECT_NAME}_rdrand
+ PRIVATE
+ ${PROJECT_NAME}_rdrand_config
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ )
+
+ add_library(${PROJECT_NAME}_aesni
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c
+ )
+
+ target_link_libraries(${PROJECT_NAME}_aesni
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ ${PROJECT_NAME}_ssse3_config
+ ${PROJECT_NAME}_aesni_config
+ ${PROJECT_NAME}_pclmul_config
+ )
+
+ add_library(${PROJECT_NAME}_sse2
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.h
+ )
+
+ if (NOT ENABLE_MINIMAL)
+ target_sources(${PROJECT_NAME}_sse2
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c
+ )
+ endif ()
+
+ if (NOT HAVE_AMD64_ASM)
+ target_sources(${PROJECT_NAME}_sse2
+ PRIVATE
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u4.h
+ )
+ endif ()
+
+ target_link_libraries(${PROJECT_NAME}_sse2
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ )
+
+ add_library(${PROJECT_NAME}_ssse3
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u0.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u1.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u4.h
+ )
+
+ target_link_libraries(${PROJECT_NAME}_ssse3
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ ${PROJECT_NAME}_ssse3_config
+ )
+
+ add_library(${PROJECT_NAME}_sse41
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h
+ )
+
+ target_link_libraries(${PROJECT_NAME}_sse41
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ ${PROJECT_NAME}_ssse3_config
+ ${PROJECT_NAME}_sse41_config
+ )
+
+ add_library(${PROJECT_NAME}_avx2
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-avx2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u8.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u4.h
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u8.h
+ )
+
+ target_link_libraries(${PROJECT_NAME}_avx2
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ ${PROJECT_NAME}_ssse3_config
+ ${PROJECT_NAME}_sse41_config
+ ${PROJECT_NAME}_avx_config
+ ${PROJECT_NAME}_avx2_config
+ )
+
+ add_library(${PROJECT_NAME}_avx512f
+ OBJECT
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx512f.c
+ ${PROJECT_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-avx512f.h
+ )
+
+ target_link_libraries(${PROJECT_NAME}_avx512f
+ PRIVATE
+ ${PROJECT_NAME}_config_public
+ ${PROJECT_NAME}_config_private
+ ${PROJECT_NAME}_sse2_config
+ ${PROJECT_NAME}_ssse3_config
+ ${PROJECT_NAME}_sse41_config
+ ${PROJECT_NAME}_avx_config
+ ${PROJECT_NAME}_avx2_config
+ ${PROJECT_NAME}_avx512f_config
+ )
+
+ target_link_libraries(${PROJECT_NAME}
+ PRIVATE
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_rdrand>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_aesni>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_sse2>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_ssse3>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_sse41>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_avx2>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_avx512f>"
+ "$<BUILD_INTERFACE:${PROJECT_NAME}_config_private>"
+ PUBLIC
+ ${PROJECT_NAME}_config_public
+ )
+
endif ()
if (BUILD_SHARED_LIBS)
@@ -631,19 +1012,22 @@ if (BUILD_SHARED_LIBS) )
endif ()
else ()
- target_compile_definitions(${PROJECT_NAME}
- PUBLIC
- SODIUM_STATIC
- )
+ if (MSVC)
+ target_compile_definitions(${PROJECT_NAME}
+ PUBLIC
+ SODIUM_STATIC
+ )
+ else ()
+ target_compile_definitions(${PROJECT_NAME}_config_public
+ INTERFACE
+ SODIUM_STATIC
+ )
+ endif( )
endif ()
-target_include_directories(${PROJECT_NAME}
- PRIVATE
- $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium>
- $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/sodium>
-)
-
if (BUILD_TESTING)
+ enable_testing()
+
file(GLOB sodium_test_sources ${PROJECT_SOURCE_DIR}/test/default/*.c)
foreach (test_src ${sodium_test_sources})
@@ -690,26 +1074,31 @@ install(FILES ${CMAKE_BINARY_DIR}/sodium/version.h DESTINATION include/sodium
)
-install(TARGETS ${PROJECT_NAME}
- EXPORT ${PROJECT_NAME}-targets
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
-)
+if (MSVC)
+ install(TARGETS ${PROJECT_NAME}
+ EXPORT ${PROJECT_NAME}-targets
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ )
+else ()
+ install(
+ TARGETS
+ ${PROJECT_NAME}
+ ${PROJECT_NAME}_config_public
+ EXPORT ${PROJECT_NAME}-targets
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ )
+endif ()
install(EXPORT ${PROJECT_NAME}-targets
FILE unofficial-${PROJECT_NAME}Targets.cmake
NAMESPACE unofficial-${PROJECT_NAME}::
- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/unofficial-${PROJECT_NAME}
-)
-
-set(TARGET_NAME unofficial-${PROJECT_NAME}::${PROJECT_NAME})
-
-configure_package_config_file(
- ${PROJECT_NAME}Config.cmake.in
- ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}Config.cmake
- INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
+ DESTINATION share/unofficial-${PROJECT_NAME}
)
write_basic_package_version_file(
@@ -718,13 +1107,10 @@ write_basic_package_version_file( COMPATIBILITY AnyNewerVersion
)
-unset(TARGET_NAME)
-
install(
FILES
- ${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}ConfigVersion.cmake
- DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/unofficial-${PROJECT_NAME}
+ DESTINATION share/unofficial-${PROJECT_NAME}
)
# References:
@@ -744,3 +1130,4 @@ install( # https://stackoverflow.com/questions/15132185/mixing-c-and-assembly-sources-and-build-with-cmake
# https://stackoverflow.com/questions/647892/how-to-check-header-files-and-library-functions-in-cmake-like-it-is-done-in-auto
# https://stackoverflow.com/questions/31038963/how-do-you-rename-a-library-filename-in-cmake
+# https://gitlab.kitware.com/cmake/cmake/-/issues/15415
diff --git a/ports/libsodium/CONTROL b/ports/libsodium/CONTROL deleted file mode 100644 index 813f4dcb1..000000000 --- a/ports/libsodium/CONTROL +++ /dev/null @@ -1,5 +0,0 @@ -Source: libsodium -Version: 1.0.18 -Port-Version: 3 -Description: A modern and easy-to-use crypto library -Homepage: https://github.com/jedisct1/libsodium diff --git a/ports/libsodium/portfile.cmake b/ports/libsodium/portfile.cmake index e2d832383..f4afdc197 100644 --- a/ports/libsodium/portfile.cmake +++ b/ports/libsodium/portfile.cmake @@ -6,50 +6,38 @@ vcpkg_from_github( HEAD_REF master ) -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt - ${SOURCE_PATH}/CMakeLists.txt - COPYONLY -) +file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}) -configure_file( - ${CMAKE_CURRENT_LIST_DIR}/sodiumConfig.cmake.in - ${SOURCE_PATH}/sodiumConfig.cmake.in - COPYONLY -) - -vcpkg_configure_cmake( +vcpkg_cmake_configure( SOURCE_PATH ${SOURCE_PATH} PREFER_NINJA OPTIONS -DBUILD_TESTING=OFF ) -vcpkg_install_cmake() +vcpkg_cmake_install() vcpkg_copy_pdbs() -vcpkg_fixup_cmake_targets( - CONFIG_PATH lib/cmake/unofficial-sodium - TARGET_PATH share/unofficial-sodium +vcpkg_cmake_config_fixup( + PACKAGE_NAME unofficial-sodium ) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include + ${CURRENT_PACKAGES_DIR}/debug/share ) file(REMOVE ${CURRENT_PACKAGES_DIR}/include/Makefile.am) -if (VCPKG_LIBRARY_LINKAGE STREQUAL "static") - vcpkg_replace_string( - ${CURRENT_PACKAGES_DIR}/include/sodium/export.h - "#ifdef SODIUM_STATIC" - "#if 1 //#ifdef SODIUM_STATIC" - ) -endif () - configure_file( ${SOURCE_PATH}/LICENSE ${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright COPYONLY ) + +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/sodiumConfig.cmake.in + ${CURRENT_PACKAGES_DIR}/share/unofficial-sodium/unofficial-sodiumConfig.cmake + @ONLY +) diff --git a/ports/libsodium/sodiumConfig.cmake.in b/ports/libsodium/sodiumConfig.cmake.in index d416e2bca..a3ec1ba8f 100644 --- a/ports/libsodium/sodiumConfig.cmake.in +++ b/ports/libsodium/sodiumConfig.cmake.in @@ -1,61 +1,7 @@ -# sodium cmake module
-# This module sets the following variables in your project:
-#
-# sodium_FOUND - true if sodium found on the system
-# sodium_INCLUDE_DIR - the directory containing sodium headers
-# sodium_LIBRARY_DEBUG
-# sodium_LIBRARY_RELEASE
-# sodium_LIBRARIES
-# sodium_VERSION
-#
-include(FindPackageHandleStandardArgs)
-include(SelectLibraryConfigurations)
-
-@PACKAGE_INIT@
-
-if (NOT TARGET @TARGET_NAME@)
- include("${CMAKE_CURRENT_LIST_DIR}/unofficial-@PROJECT_NAME@Targets.cmake")
-
- set(@PROJECT_NAME@_VERSION @VERSION@)
-
- get_target_property(@PROJECT_NAME@_INCLUDE_DIR @TARGET_NAME@ INTERFACE_INCLUDE_DIRECTORIES)
-
- get_target_property(@PROJECT_NAME@_LIBRARY_DEBUG @TARGET_NAME@ IMPORTED_IMPLIB_DEBUG)
- if (@PROJECT_NAME@_LIBRARY_DEBUG MATCHES ".*-NOTFOUND")
- get_target_property(@PROJECT_NAME@_LIBRARY_DEBUG @TARGET_NAME@ IMPORTED_LOCATION_DEBUG)
- else ()
- get_target_property(@PROJECT_NAME@_DLL_DEBUG @TARGET_NAME@ IMPORTED_LOCATION_DEBUG)
- endif ()
-
- get_target_property(@PROJECT_NAME@_LIBRARY_RELEASE @TARGET_NAME@ IMPORTED_IMPLIB_RELEASE)
- if (@PROJECT_NAME@_LIBRARY_RELEASE MATCHES ".*-NOTFOUND")
- get_target_property(@PROJECT_NAME@_LIBRARY_RELEASE @TARGET_NAME@ IMPORTED_LOCATION_RELEASE)
- else ()
- get_target_property(@PROJECT_NAME@_DLL_RELEASE @TARGET_NAME@ IMPORTED_LOCATION_RELEASE)
- endif ()
-
- select_library_configurations(@PROJECT_NAME@)
-endif ()
-
-find_package_handle_standard_args(
- @PROJECT_NAME@
- REQUIRED_VARS
- @PROJECT_NAME@_INCLUDE_DIR
- @PROJECT_NAME@_LIBRARIES
- VERSION_VAR
- @PROJECT_NAME@_VERSION
-)
-
-mark_as_advanced(@PROJECT_NAME@_INCLUDE_DIR)
-
-if (WIN32)
- mark_as_advanced(@PROJECT_NAME@_DLL_DEBUG)
- mark_as_advanced(@PROJECT_NAME@_DLL_RELEASE)
+if("@VCPKG_LIBRARY_LINKAGE@" STREQUAL "static" AND NOT WIN32)
+ include(CMakeFindDependencyMacro)
+ find_dependency(Threads)
endif()
-
-# References:
-# https://github.com/jedisct1/libsodium/blob/master/contrib/Findsodium.cmake
-# https://github.com/QuantStack/xeus/blob/master/xeusConfig.cmake.in
-# https://github.com/zeromq/libzmq/blob/master/builds/cmake/ZeroMQConfig.cmake.in
+include(${CMAKE_CURRENT_LIST_DIR}/unofficial-sodiumTargets.cmake)
diff --git a/ports/libsodium/vcpkg.json b/ports/libsodium/vcpkg.json new file mode 100644 index 000000000..7c12a7fed --- /dev/null +++ b/ports/libsodium/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "libsodium", + "version-string": "1.0.18", + "port-version": 4, + "description": "A modern and easy-to-use crypto library", + "homepage": "https://github.com/jedisct1/libsodium", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ] +} diff --git a/versions/baseline.json b/versions/baseline.json index a4cb5e6fa..a7ac25ae1 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -3434,7 +3434,7 @@ }, "libsodium": { "baseline": "1.0.18", - "port-version": 3 + "port-version": 4 }, "libsoundio": { "baseline": "2.0.0-3", diff --git a/versions/l-/libsodium.json b/versions/l-/libsodium.json index 5180f8086..a32fb9901 100644 --- a/versions/l-/libsodium.json +++ b/versions/l-/libsodium.json @@ -1,6 +1,11 @@ { "versions": [ { + "git-tree": "6ec1ee39e69052d50e773857064d2d06968ee8c3", + "version-string": "1.0.18", + "port-version": 4 + }, + { "git-tree": "fc00e8b0dba7ee227aa5d53860c1b5cfe92b8819", "version-string": "1.0.18", "port-version": 3 |
