mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-01-14 12:28:14 +08:00
[libsodium] Migrate build system to CMake (#5600)
This commit is contained in:
parent
f47866c4c4
commit
35009e4966
742
ports/libsodium/CMakeLists.txt
Normal file
742
ports/libsodium/CMakeLists.txt
Normal file
@ -0,0 +1,742 @@
|
||||
cmake_minimum_required(VERSION 3.9)
|
||||
|
||||
file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/configure.ac config_ac_contents)
|
||||
|
||||
foreach (line ${config_ac_contents})
|
||||
if (line MATCHES "AC_INIT\\(\\[libsodium\\],\\[([0-9.]+)\\],")
|
||||
set(VERSION ${CMAKE_MATCH_1})
|
||||
elseif (line MATCHES "SODIUM_LIBRARY_VERSION_(MAJOR|MINOR)=([0-9]+)")
|
||||
set(SODIUM_LIBRARY_VERSION_${CMAKE_MATCH_1} ${CMAKE_MATCH_2})
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
message("VERSION: ${VERSION}")
|
||||
message("SODIUM_LIBRARY_VERSION_MAJOR: ${SODIUM_LIBRARY_VERSION_MAJOR}")
|
||||
message("SODIUM_LIBRARY_VERSION_MINOR: ${SODIUM_LIBRARY_VERSION_MINOR}")
|
||||
|
||||
project(sodium VERSION ${VERSION} LANGUAGES C ASM)
|
||||
|
||||
include(CheckCSourceCompiles)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckIncludeFile)
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(CTest)
|
||||
include(GNUInstallDirs)
|
||||
include(TestBigEndian)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
|
||||
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build shared library" ${BUILD_SHARED_LIBS})
|
||||
option(ENABLE_SSP "Compile with -fstack-protector" ON)
|
||||
option(ENABLE_PIE "Compile with -fPIE" ON)
|
||||
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)
|
||||
|
||||
if (ENABLE_MINIMAL)
|
||||
set(SODIUM_LIBRARY_MINIMAL_DEF "#define SODIUM_LIBRARY_MINIMAL 1")
|
||||
endif ()
|
||||
|
||||
configure_file(
|
||||
src/libsodium/include/sodium/version.h.in
|
||||
${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}
|
||||
)
|
||||
|
||||
set_target_properties(${PROJECT_NAME}
|
||||
PROPERTIES
|
||||
PREFIX ""
|
||||
OUTPUT_NAME "lib${PROJECT_NAME}"
|
||||
)
|
||||
|
||||
test_big_endian(IS_BIG_ENDIAN)
|
||||
|
||||
if (IS_BIG_ENDIAN)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_BIG_ENDIAN)
|
||||
else ()
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE NATIVE_LITTLE_ENDIAN)
|
||||
endif ()
|
||||
|
||||
macro (sodium_check_func func var)
|
||||
check_function_exists(${func} ${var})
|
||||
if (${var})
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE ${var}=1)
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
/D_CONSOLE
|
||||
/D_CRT_SECURE_NO_WARNINGS
|
||||
/DCPU_UNALIGNED_ACCESS=1
|
||||
/MP
|
||||
/Dinline=__inline
|
||||
/wd4068 # Unknown pragma
|
||||
/wd4197
|
||||
/wd4244 # Macro redefinition
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
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 ()
|
||||
|
||||
if (ENABLE_RETPOLINE)
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
-mindirect-branch=thunk-inline
|
||||
-mindirect-branch-register
|
||||
)
|
||||
endif ()
|
||||
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
-flax-vector-conversions
|
||||
-fvisibility=hidden
|
||||
-fPIC
|
||||
-fwrapv
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wbad-function-cast
|
||||
-Wcast-qual
|
||||
#-Wdiv-by-zero
|
||||
-Wduplicated-branches
|
||||
-Wduplicated-cond
|
||||
-Wfloat-equal
|
||||
-Wformat=2
|
||||
-Wlogical-op
|
||||
-Wmaybe-uninitialized
|
||||
-Wmisleading-indentation
|
||||
-Wmissing-declarations
|
||||
-Wmissing-prototypes
|
||||
-Wnested-externs
|
||||
#-Wno-type-limits
|
||||
#-Wno-unknown-pragmas
|
||||
-Wnormalized=id
|
||||
-Wnull-dereference
|
||||
-Wold-style-declaration
|
||||
-Wpointer-arith
|
||||
-Wredundant-decls
|
||||
-Wrestrict
|
||||
#-Wsometimes-uninitialized
|
||||
-Wstrict-prototypes
|
||||
-Wswitch-enum
|
||||
#-Wvariable-decl
|
||||
-Wwrite-strings
|
||||
-Wl,-z,relro
|
||||
-Wl,-z,now
|
||||
-Wl,-z,noexecstack
|
||||
)
|
||||
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR
|
||||
CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
-Wno-unknown-warning-option
|
||||
-Wshorten-64-to-32
|
||||
)
|
||||
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)
|
||||
endif ()
|
||||
|
||||
sodium_check_func(arc4random HAVE_SAFE_ARC4RANDOM)
|
||||
sodium_check_func(mmap HAVE_MMAP)
|
||||
sodium_check_func(mlock HAVE_MLOCK)
|
||||
sodium_check_func(madvise HAVE_MADVISE)
|
||||
sodium_check_func(mprotect HAVE_MPROTECT)
|
||||
sodium_check_func(memset_s HAVE_MEMSET_S)
|
||||
sodium_check_func(explicit_bzero HAVE_EXPLICIT_BZERO)
|
||||
sodium_check_func(explicit_memset HAVE_EXPLICIT_MEMSET)
|
||||
sodium_check_func(nanosleep HAVE_NANOSLEEP)
|
||||
sodium_check_func(posix_memalign HAVE_POSIX_MEMALIGN)
|
||||
sodium_check_func(getpid HAVE_GETPID)
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#pragma GCC target(\"mmx\")
|
||||
#include <mmintrin.h>
|
||||
int main(void)
|
||||
{
|
||||
__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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#pragma GCC target(\"sse2\")
|
||||
#ifndef __SSE2__
|
||||
# define __SSE2__
|
||||
#endif
|
||||
|
||||
#include <emmintrin.h>
|
||||
int main(void) {
|
||||
__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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#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()));
|
||||
}
|
||||
"
|
||||
HAVE_PMMINTRIN_H
|
||||
)
|
||||
|
||||
if (HAVE_PMMINTRIN_H)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_PMMINTRIN_H=1)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -msse3)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#pragma GCC target(\"ssse3\")
|
||||
#include <tmmintrin.h>
|
||||
int main(void) {
|
||||
__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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#pragma GCC target(\"sse4.1\")
|
||||
#include <smmintrin.h>
|
||||
int main(void) {
|
||||
__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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding AVX opcodes
|
||||
#endif
|
||||
#pragma GCC target(\"avx\")
|
||||
#include <immintrin.h>
|
||||
int main(void) {
|
||||
_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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding AVX2 opcodes
|
||||
#endif
|
||||
#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));
|
||||
}
|
||||
"
|
||||
HAVE_AVX2INTRIN_H
|
||||
)
|
||||
|
||||
if (HAVE_AVX2INTRIN_H)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX2INTRIN_H=1)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -mavx2)
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding AVX2 opcodes
|
||||
#endif
|
||||
#pragma GCC target(\"avx2\")
|
||||
#include <immintrin.h>
|
||||
int main(void) {
|
||||
__m256i y = _mm256_broadcastsi128_si256(_mm_setzero_si128());
|
||||
}
|
||||
"
|
||||
_mm256_broadcastsi128_si256_DEFINED
|
||||
)
|
||||
|
||||
if (NOT _mm256_broadcastsi128_si256_DEFINED)
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
_mm256_broadcastsi128_si256=_mm_broadcastsi128_si256
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding AVX512F opcodes
|
||||
#endif
|
||||
#pragma GCC target(\"avx512f\")
|
||||
#include <immintrin.h>
|
||||
|
||||
#ifndef __AVX512F__
|
||||
# error No AVX512 support
|
||||
#elif defined(__clang__)
|
||||
# if __clang_major__ < 4
|
||||
# error Compiler AVX512 support may be broken
|
||||
# endif
|
||||
#elif defined(__GNUC__)
|
||||
# if __GNUC__ < 6
|
||||
# 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);
|
||||
}
|
||||
"
|
||||
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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding AESNI opcodes
|
||||
#endif
|
||||
#pragma GCC target(\"aes\")
|
||||
#pragma GCC target(\"pclmul\")
|
||||
#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);
|
||||
}
|
||||
"
|
||||
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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#ifdef __native_client__
|
||||
# error NativeClient detected - Avoiding RDRAND opcodes
|
||||
#endif
|
||||
#pragma GCC target(\"rdrnd\")
|
||||
#include <immintrin.h>
|
||||
|
||||
int main(void) {
|
||||
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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#include <intrin.h>
|
||||
|
||||
int main(void) {
|
||||
(void) _xgetbv(0);
|
||||
}
|
||||
"
|
||||
HAVE__XGETBV
|
||||
)
|
||||
|
||||
if (HAVE__XGETBV)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE__XGETBV=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
int main(void) {
|
||||
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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
int main(void) {
|
||||
#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)
|
||||
# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)
|
||||
# error Windows x86_64 calling conventions are not supported yet
|
||||
# endif
|
||||
/* neat */
|
||||
#else
|
||||
# error !x86_64
|
||||
#endif
|
||||
unsigned char i = 0, o = 0, t;
|
||||
__asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \n\"
|
||||
\"movb (%[i]), %[t] \n\"
|
||||
\"addb %[t], (%[o]) \n\"
|
||||
: [t] \"=&r\"(t)
|
||||
: [o] \"D\"(&o), [i] \"S\"(&i)
|
||||
: \"memory\", \"flags\", \"cc\");
|
||||
}
|
||||
"
|
||||
HAVE_AMD64_ASM
|
||||
)
|
||||
|
||||
if (HAVE_AMD64_ASM)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AMD64_ASM=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
int main(void) {
|
||||
#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)
|
||||
# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)
|
||||
# error Windows x86_64 calling conventions are not supported yet
|
||||
# endif
|
||||
/* neat */
|
||||
#else
|
||||
# error !x86_64
|
||||
#endif
|
||||
__asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\");
|
||||
}
|
||||
"
|
||||
HAVE_AVX_ASM
|
||||
)
|
||||
|
||||
if (HAVE_AVX_ASM)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_AVX_ASM=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#if !defined(__clang__) && !defined(__GNUC__) && !defined(__SIZEOF_INT128__)
|
||||
# error mode(TI) is a gcc extension, and __int128 is not available
|
||||
#endif
|
||||
#if defined(__clang__) && !defined(__x86_64__) && !defined(__aarch64__)
|
||||
# error clang does not properly handle the 128-bit type on 32-bit systems
|
||||
#endif
|
||||
#ifndef NATIVE_LITTLE_ENDIAN
|
||||
# error libsodium currently expects a little endian CPU for the 128-bit type
|
||||
#endif
|
||||
#ifdef __EMSCRIPTEN__
|
||||
# error emscripten currently doesn't support some operations on integers larger than 64 bits
|
||||
#endif
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#if defined(__SIZEOF_INT128__)
|
||||
typedef unsigned __int128 uint128_t;
|
||||
#else
|
||||
typedef unsigned uint128_t __attribute__((mode(TI)));
|
||||
#endif
|
||||
void fcontract(uint128_t *t) {
|
||||
*t += 0x8000000000000 - 1;
|
||||
*t *= *t;
|
||||
*t >>= 84;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
(void) fcontract;
|
||||
}
|
||||
"
|
||||
HAVE_TI_MODE
|
||||
)
|
||||
|
||||
if (HAVE_TI_MODE)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_TI_MODE=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
int main(void) {
|
||||
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));
|
||||
}
|
||||
"
|
||||
HAVE_CPUID
|
||||
)
|
||||
|
||||
if (HAVE_CPUID)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_CPUID=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#if !defined(__ELF__) && !defined(__APPLE_CC__)
|
||||
# error Support for weak symbols may not be available
|
||||
#endif
|
||||
__attribute__((weak)) void __dummy(void *x) { }
|
||||
void f(void *x) { __dummy(x); }
|
||||
int main(void) {}
|
||||
"
|
||||
HAVE_WEAK_SYMBOLS
|
||||
)
|
||||
|
||||
if (HAVE_WEAK_SYMBOLS)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_WEAK_SYMBOLS=1)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
int main(void) {
|
||||
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)
|
||||
endif ()
|
||||
|
||||
check_c_source_compiles(
|
||||
"
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
int main(void) {
|
||||
(void) SIZE_MAX;
|
||||
(void) UINT64_MAX;
|
||||
}
|
||||
"
|
||||
STDC_LIMIT_MACROS_REQUIRED
|
||||
)
|
||||
|
||||
if (STDC_LIMIT_MACROS_REQUIRED)
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
__STDC_LIMIT_MACROS
|
||||
__STDC_CONSTANT_MACROS
|
||||
)
|
||||
endif ()
|
||||
|
||||
# include/sodium/private/common.h
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE CONFIGURED=1)
|
||||
endif ()
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
if (MSVC)
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
SODIUM_DLL_EXPORT
|
||||
)
|
||||
endif ()
|
||||
else ()
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PUBLIC
|
||||
SODIUM_STATIC
|
||||
)
|
||||
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)
|
||||
file(GLOB sodium_test_sources ${PROJECT_SOURCE_DIR}/test/default/*.c)
|
||||
|
||||
foreach (test_src ${sodium_test_sources})
|
||||
get_filename_component(test_name ${test_src} NAME_WE)
|
||||
|
||||
add_executable(${test_name} ${test_src})
|
||||
|
||||
if (MSVC)
|
||||
target_compile_definitions(${test_name} PRIVATE _CRT_SECURE_NO_WARNINGS)
|
||||
endif ()
|
||||
|
||||
target_include_directories(${test_name}
|
||||
PRIVATE
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include>
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/libsodium/include/sodium>
|
||||
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
|
||||
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/test/quirks>
|
||||
)
|
||||
|
||||
target_link_libraries(${test_name} PRIVATE ${PROJECT_NAME})
|
||||
|
||||
add_custom_command(TARGET ${test_name} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${CMAKE_CURRENT_LIST_DIR}/test/default/${test_name}.exp"
|
||||
$<TARGET_FILE_DIR:${test_name}>)
|
||||
|
||||
add_test(
|
||||
NAME ${test_name}
|
||||
COMMAND ${test_name}
|
||||
WORKING_DIRECTORY $<TARGET_FILE_DIR:${test_name}>
|
||||
)
|
||||
endforeach ()
|
||||
endif ()
|
||||
|
||||
install(DIRECTORY src/libsodium/include/
|
||||
DESTINATION include/
|
||||
USE_SOURCE_PERMISSIONS
|
||||
PATTERN "*.h"
|
||||
PATTERN "*.h.in" EXCLUDE
|
||||
REGEX "private($|/)" EXCLUDE
|
||||
)
|
||||
|
||||
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}
|
||||
)
|
||||
|
||||
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}
|
||||
)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/unofficial-${PROJECT_NAME}ConfigVersion.cmake
|
||||
VERSION ${VERSION}
|
||||
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}
|
||||
)
|
||||
|
||||
# References:
|
||||
# https://github.com/boost-cmake/bcm/wiki/Cmake-best-practices-and-guidelines
|
||||
# https://github.com/jedisct1/libsodium/pull/74/files
|
||||
# https://github.com/jedisct1/libsodium/pull/156/files
|
||||
# https://github.com/jedisct1/libsodium/pull/181/files
|
||||
# https://github.com/jedisct1/libsodium/issues/378
|
||||
# https://github.com/jedisct1/libsodium/issues/636
|
||||
# https://github.com/jedisct1/libsodium/issues/771
|
||||
# https://github.com/jedisct1/libsodium/blob/gyp/sodium.gyp
|
||||
# https://github.com/imefisto/cmake-libsodium
|
||||
# https://github.com/Cyberunner23/libsodium-CMake
|
||||
# https://stackoverflow.com/questions/29901352/appending-to-cmake-c-flags
|
||||
# https://stackoverflow.com/questions/986426/what-do-stdc-limit-macros-and-stdc-constant-macros-mean
|
||||
# https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
|
||||
# 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
|
@ -1,3 +1,3 @@
|
||||
Source: libsodium
|
||||
Version: 1.0.17-1
|
||||
Version: 1.0.17-2
|
||||
Description: A modern and easy-to-use crypto library
|
||||
|
@ -1,16 +0,0 @@
|
||||
diff --git a/msvc-scripts/sodium.props b/msvc-scripts/sodium.props
|
||||
index 41e1e47..3126455 100644
|
||||
--- a/msvc-scripts/sodium.props
|
||||
+++ b/msvc-scripts/sodium.props
|
||||
@@ -17,9 +17,9 @@
|
||||
<PreBuildEvent>
|
||||
<Message>Process .in files</Message>
|
||||
</PreBuildEvent>
|
||||
- <PostBuildEvent>
|
||||
+ <!-- <PostBuildEvent>
|
||||
<Command>"$(SolutionDir)/test/default/wintest.bat" $(Configuration) $(Platform)</Command>
|
||||
- </PostBuildEvent>
|
||||
+ </PostBuildEvent> -->
|
||||
<PostBuildEvent>
|
||||
<Message>Run the test suite</Message>
|
||||
</PostBuildEvent>
|
@ -6,73 +6,52 @@ vcpkg_from_github(
|
||||
REF 1.0.17
|
||||
SHA512 faf6ab57d113b6b1614b51390823a646f059018327b6f493e9e918a908652d0932a75a1a6683032b7a3869f516f387d67acdf944568387feddff7b2f5b6e77d6
|
||||
HEAD_REF master
|
||||
PATCHES
|
||||
"disable-tests.patch"
|
||||
)
|
||||
|
||||
if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
||||
set(LIBSODIUM_RELEASE_CONFIGURATION ReleaseDLL)
|
||||
set(LIBSODIUM_DEBUG_CONFIGURATION DebugDLL)
|
||||
else()
|
||||
set(LIBSODIUM_RELEASE_CONFIGURATION Release)
|
||||
set(LIBSODIUM_DEBUG_CONFIGURATION Debug)
|
||||
endif()
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt
|
||||
${SOURCE_PATH}/CMakeLists.txt
|
||||
COPYONLY
|
||||
)
|
||||
|
||||
IF(VCPKG_TARGET_ARCHITECTURE MATCHES "x86")
|
||||
SET(BUILD_ARCH "Win32")
|
||||
ELSE()
|
||||
SET(BUILD_ARCH ${VCPKG_TARGET_ARCHITECTURE})
|
||||
ENDIF()
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/sodiumConfig.cmake.in
|
||||
${SOURCE_PATH}/sodiumConfig.cmake.in
|
||||
COPYONLY
|
||||
)
|
||||
|
||||
vcpkg_build_msbuild(
|
||||
PROJECT_PATH ${SOURCE_PATH}/libsodium.vcxproj
|
||||
RELEASE_CONFIGURATION ${LIBSODIUM_RELEASE_CONFIGURATION}
|
||||
DEBUG_CONFIGURATION ${LIBSODIUM_DEBUG_CONFIGURATION}
|
||||
vcpkg_configure_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
PREFER_NINJA
|
||||
OPTIONS
|
||||
/p:ForceImportBeforeCppTargets=${SOURCE_PATH}/builds/msvc/properties/${BUILD_ARCH}.props
|
||||
-DBUILD_TESTING=OFF
|
||||
)
|
||||
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/src/libsodium/include/sodium.h
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/include
|
||||
)
|
||||
|
||||
file(GLOB LIBSODIUM_HEADERS "${SOURCE_PATH}/src/libsodium/include/sodium/*.h")
|
||||
file(INSTALL
|
||||
${LIBSODIUM_HEADERS}
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/include/sodium
|
||||
)
|
||||
|
||||
if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
|
||||
file(READ ${CURRENT_PACKAGES_DIR}/include/sodium/export.h _contents)
|
||||
string(REPLACE "#ifdef SODIUM_STATIC" "#if 1 //#ifdef SODIUM_STATIC" _contents "${_contents}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/include/sodium/export.h "${_contents}")
|
||||
endif ()
|
||||
|
||||
if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/Build/${LIBSODIUM_RELEASE_CONFIGURATION}/${BUILD_ARCH}/libsodium.dll
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/bin
|
||||
)
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/Build/${LIBSODIUM_DEBUG_CONFIGURATION}/${BUILD_ARCH}/libsodium.dll
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin
|
||||
)
|
||||
endif()
|
||||
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/Build/${LIBSODIUM_RELEASE_CONFIGURATION}/${BUILD_ARCH}/libsodium.lib
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/lib
|
||||
)
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/Build/${LIBSODIUM_DEBUG_CONFIGURATION}/${BUILD_ARCH}/libsodium.lib
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
|
||||
)
|
||||
vcpkg_install_cmake()
|
||||
|
||||
vcpkg_copy_pdbs()
|
||||
|
||||
file(INSTALL
|
||||
${SOURCE_PATH}/LICENSE
|
||||
DESTINATION ${CURRENT_PACKAGES_DIR}/share/libsodium
|
||||
RENAME copyright
|
||||
vcpkg_fixup_cmake_targets(
|
||||
CONFIG_PATH lib/cmake/unofficial-sodium
|
||||
TARGET_PATH share/unofficial-sodium
|
||||
)
|
||||
|
||||
file(REMOVE_RECURSE
|
||||
${CURRENT_PACKAGES_DIR}/debug/include
|
||||
)
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
#vcpkg_test_cmake(PACKAGE_NAME unofficial-sodium)
|
||||
|
61
ports/libsodium/sodiumConfig.cmake.in
Normal file
61
ports/libsodium/sodiumConfig.cmake.in
Normal file
@ -0,0 +1,61 @@
|
||||
# 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)
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user