diff --git a/modules/FindLibsodium.cmake b/modules/FindLibsodium.cmake deleted file mode 100644 index ebe3748f..00000000 --- a/modules/FindLibsodium.cmake +++ /dev/null @@ -1,86 +0,0 @@ -#.rst: -# FindLibsodium -# -------- -# -# Find the native mbemtls includes and library. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# :: -# -# Libsodium_INCLUDE_DIRS - where to find uv.h, etc. -# Libsodium_LIBRARIES - List of all libraries when using mbemtls. -# Libsodium_FOUND - True if mbemtls found. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# :: -# -# sodium::sodium -# -# Hints -# ^^^^^ -# -# A user may set ``LIBSODIUM_ROOT`` to a mbemtls installation root to tell this -# module where to look. - -# ============================================================================= -# Copyright 2021 atframework. -# -# Distributed under the Apache License Version 2.0 (the "License"); see accompanying file LICENSE for details. - -unset(_LIBSODIUM_SEARCH_ROOT_INC) -unset(_LIBSODIUM_SEARCH_ROOT_LIB) - -# Search LIBSODIUM_ROOT first if it is set. -if(Libsodium_ROOT) - set(LIBSODIUM_ROOT ${Libsodium_ROOT}) -endif() - -if(LIBSODIUM_ROOT) - set(_LIBSODIUM_SEARCH_ROOT_INC PATHS ${LIBSODIUM_ROOT} ${LIBSODIUM_ROOT}/include NO_DEFAULT_PATH) - set(_LIBSODIUM_SEARCH_ROOT_LIB PATHS ${LIBSODIUM_ROOT} ${LIBSODIUM_ROOT}/lib NO_DEFAULT_PATH) -endif() - -# Normal search. -set(Libsodium_NAMES sodium libsodium) - -# Try each search configuration. -find_path(Libsodium_INCLUDE_DIRS NAMES sodium.h ${_LIBSODIUM_SEARCH_ROOT_INC}) -find_library(Libsodium_LIBRARIES NAMES ${Libsodium_NAMES} ${_LIBSODIUM_SEARCH_ROOT_LIB}) - -mark_as_advanced(Libsodium_INCLUDE_DIRS Libsodium_LIBRARIES) - -# handle the QUIETLY and REQUIRED arguments and set Libsodium_FOUND to TRUE if all listed variables are TRUE -include("FindPackageHandleStandardArgs") -find_package_handle_standard_args( - Libsodium - REQUIRED_VARS Libsodium_INCLUDE_DIRS Libsodium_LIBRARIES - FOUND_VAR Libsodium_FOUND) - -if(Libsodium_FOUND) - set(LIBSODIUM_FOUND ${Libsodium_FOUND}) - if(NOT TARGET libsodium::libsodium) - add_library(libsodium::libsodium UNKNOWN IMPORTED) - set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Libsodium_INCLUDE_DIRS}") - set_target_properties(libsodium::libsodium PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C;CXX;ASM" - IMPORTED_LOCATION "${Libsodium_LIBRARIES}") - if(MSVC) - target_link_libraries(libsodium::libsodium PUBLIC advapi32) - else() - find_package(Threads) - if(CMAKE_USE_PTHREADS_INIT) - if(TARGET Threads::Threads) - list(APPEND libsodium::libsodium Threads::Threads) - endif() - endif() - endif() - endif() -endif() diff --git a/modules/Findsodium.cmake b/modules/Findsodium.cmake new file mode 100644 index 00000000..8a6eb593 --- /dev/null +++ b/modules/Findsodium.cmake @@ -0,0 +1,278 @@ +# Written in 2016 by Henrik Steffen Gaßmann +# +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication along with +# this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +# ############################################################################## +# Tries to find the local libsodium installation. +# +# On Windows the sodium_DIR environment variable is used as a default hint which +# can be overridden by setting the corresponding cmake variable. +# +# Once done the following variables will be defined: +# +# sodium_FOUND sodium_INCLUDE_DIR sodium_LIBRARY_DEBUG sodium_LIBRARY_RELEASE +# sodium_VERSION_STRING +# +# Furthermore an imported "sodium" target is created. +# + +if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(_GCC_COMPATIBLE 1) +endif() + +# static library option +if(NOT DEFINED sodium_USE_STATIC_LIBS) + option(sodium_USE_STATIC_LIBS "enable to statically link against sodium" OFF) +endif() +if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) + unset(sodium_LIBRARY CACHE) + unset(sodium_LIBRARY_DEBUG CACHE) + unset(sodium_LIBRARY_RELEASE CACHE) + unset(sodium_DLL_DEBUG CACHE) + unset(sodium_DLL_RELEASE CACHE) + set(sodium_USE_STATIC_LIBS_LAST + ${sodium_USE_STATIC_LIBS} + CACHE INTERNAL "internal change tracking variable") +endif() + +# ###################################################################################################################### +# UNIX +if(UNIX) + # import pkg-config + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(sodium_PKG QUIET libsodium) + endif() + + if(sodium_USE_STATIC_LIBS) + if(sodium_PKG_STATIC_LIBRARIES) + foreach(_libname ${sodium_PKG_STATIC_LIBRARIES}) + if(NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending with .a + list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a") + endif() + endforeach() + list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES) + else() + # if pkgconfig for libsodium doesn't provide static lib info, then override PKG_STATIC here.. + set(sodium_PKG_STATIC_LIBRARIES libsodium.a) + endif() + + set(XPREFIX sodium_PKG_STATIC) + else() + if(sodium_PKG_LIBRARIES STREQUAL "") + set(sodium_PKG_LIBRARIES sodium) + endif() + + set(XPREFIX sodium_PKG) + endif() + + find_path(sodium_INCLUDE_DIR sodium.h HINTS ${${XPREFIX}_INCLUDE_DIRS}) + find_library( + sodium_LIBRARY_DEBUG + NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS}) + find_library( + sodium_LIBRARY_RELEASE + NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS}) + + # #################################################################################################################### + # Windows +elseif(WIN32) + set(sodium_DIR + "$ENV{sodium_DIR}" + CACHE FILEPATH "sodium install directory") + mark_as_advanced(sodium_DIR) + + find_path( + sodium_INCLUDE_DIR sodium.h + HINTS ${sodium_DIR} + PATH_SUFFIXES include) + + if(MSVC) + # detect target architecture + file( + WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.c" + [=[ + #if defined _M_IX86 + #error ARCH_VALUE x86_32 + #elif defined _M_X64 + #error ARCH_VALUE x86_64 + #endif + #error ARCH_VALUE unknown + ]=]) + try_compile( + _UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_CURRENT_BINARY_DIR}/arch.c" + OUTPUT_VARIABLE _COMPILATION_LOG) + string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") + + # construct library path + if(_TARGET_ARCH STREQUAL "x86_32") + string(APPEND _PLATFORM_PATH "Win32") + elseif(_TARGET_ARCH STREQUAL "x86_64") + string(APPEND _PLATFORM_PATH "x64") + else() + message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") + endif() + string(APPEND _PLATFORM_PATH "/$$CONFIG$$") + + if(MSVC_VERSION LESS 1900) + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") + else() + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") + endif() + string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") + + if(sodium_USE_STATIC_LIBS) + string(APPEND _PLATFORM_PATH "/static") + else() + string(APPEND _PLATFORM_PATH "/dynamic") + endif() + + string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") + string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") + + find_library( + sodium_LIBRARY_DEBUG libsodium.lib + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}) + find_library( + sodium_LIBRARY_RELEASE libsodium.lib + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}) + if(NOT sodium_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") + find_library( + sodium_DLL_DEBUG libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}) + find_library( + sodium_DLL_RELEASE libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK}) + endif() + + elseif(_GCC_COMPATIBLE) + if(sodium_USE_STATIC_LIBS) + find_library( + sodium_LIBRARY_DEBUG libsodium.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib) + find_library( + sodium_LIBRARY_RELEASE libsodium.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib) + else() + find_library( + sodium_LIBRARY_DEBUG libsodium.dll.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib) + find_library( + sodium_LIBRARY_RELEASE libsodium.dll.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib) + + file( + GLOB _DLL + LIST_DIRECTORIES false + RELATIVE "${sodium_DIR}/bin" + "${sodium_DIR}/bin/libsodium*.dll") + find_library( + sodium_DLL_DEBUG ${_DLL} libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES bin) + find_library( + sodium_DLL_RELEASE ${_DLL} libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES bin) + endif() + else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") + endif() + + # #################################################################################################################### + # unsupported +else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") +endif() + +# ###################################################################################################################### +# common stuff + +# extract sodium version +if(sodium_INCLUDE_DIR) + set(_VERSION_HEADER "${sodium_INCLUDE_DIR}/sodium/version.h") + if(EXISTS "${_VERSION_HEADER}") + file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) + string(REGEX REPLACE ".*define[ \t]+SODIUM_VERSION_STRING[^\"]+\"([^\"]+)\".*" "\\1" sodium_VERSION_STRING + "${_VERSION_HEADER_CONTENT}") + set(sodium_VERSION_STRING "${sodium_VERSION_STRING}") + endif() +endif() + +# communicate results +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + sodium + REQUIRED_VARS sodium_LIBRARY_RELEASE sodium_LIBRARY_DEBUG sodium_INCLUDE_DIR + VERSION_VAR sodium_VERSION_STRING) + +if(NOT sodium_FOUND) + return() +endif() + +# mark file paths as advanced +mark_as_advanced(sodium_INCLUDE_DIR) +mark_as_advanced(sodium_LIBRARY_DEBUG) +mark_as_advanced(sodium_LIBRARY_RELEASE) +if(WIN32) + mark_as_advanced(sodium_DLL_DEBUG) + mark_as_advanced(sodium_DLL_RELEASE) +endif() + +# create imported target +if(sodium_USE_STATIC_LIBS) + set(_LIB_TYPE STATIC) +else() + set(_LIB_TYPE SHARED) +endif() +add_library(sodium ${_LIB_TYPE} IMPORTED) + +set_target_properties(sodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C") + +if(sodium_USE_STATIC_LIBS) + set_target_properties( + sodium + PROPERTIES INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" + IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" + IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}") +else() + if(UNIX) + set_target_properties(sodium PROPERTIES IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" IMPORTED_LOCATION_DEBUG + "${sodium_LIBRARY_DEBUG}") + elseif(WIN32) + set_target_properties(sodium PROPERTIES IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}" IMPORTED_IMPLIB_DEBUG + "${sodium_LIBRARY_DEBUG}") + if(NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) + set_target_properties(sodium PROPERTIES IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}") + endif() + if(NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) + set_target_properties( + sodium + PROPERTIES IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}") + endif() + endif() +endif() diff --git a/ports/ssl/libsodium/build-script/CMakeLists.txt b/ports/ssl/libsodium/build-script/CMakeLists.txt deleted file mode 100644 index 119f700d..00000000 --- a/ports/ssl/libsodium/build-script/CMakeLists.txt +++ /dev/null @@ -1,1021 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -cmake_policy(SET CMP0022 NEW) -cmake_policy(SET CMP0054 NEW) -cmake_policy(SET CMP0067 NEW) -cmake_policy(SET CMP0074 NEW) -cmake_policy(SET CMP0091 NEW) -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.19.0") - cmake_policy(SET CMP0111 NEW) -endif() - -set(LIBSODIUM_SOURCE_DIR - "${CMAKE_CURRENT_LIST_DIR}" - CACHE PATH "Source path of libsodium") - -#[===[.md: -# See https://github.com/microsoft/vcpkg/blob/master/ports/libsodium/CMakeLists.txt -# Replace: -# PROJECT_SOURCE_DIR->LIBSODIUM_SOURCE_DIR -# CMAKE_CURRENT_LIST_DIR->LIBSODIUM_SOURCE_DIR -#]===] - -include(CheckCSourceRuns) - -file(STRINGS "${LIBSODIUM_SOURCE_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( - libsodium - 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) -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") -endif() - -configure_file(src/libsodium/include/sodium/version.h.in ${CMAKE_BINARY_DIR}/sodium/version.h) - -add_library(${PROJECT_NAME}) - -set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" OUTPUT_NAME "lib${PROJECT_NAME}") - -if(MSVC) - - target_include_directories( - ${PROJECT_NAME} PRIVATE $ - $) - - enable_language(RC) - - # see libsodium.vcxproj for reference - omitted "" in - # favour of "${CMAKE_BINARY_DIR}/sodium/version.h" - file(GLOB_RECURSE sodium_headers ${CMAKE_BINARY_DIR}/sodium/version.h ${LIBSODIUM_SOURCE_DIR}/builds/msvc/resource.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/*.h) - - file(GLOB_RECURSE sodium_sources ${LIBSODIUM_SOURCE_DIR}/builds/msvc/resource.rc - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/*.c) - - target_sources(${PROJECT_NAME} PRIVATE ${sodium_headers} ${sodium_sources}) - - 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() - - # 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 $ - $) - - target_compile_options( - ${PROJECT_NAME}_config_private - INTERFACE -flax-vector-conversions - -fvisibility=hidden - -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) - - if(NOT MINGW) - target_compile_options(${PROJECT_NAME}_config_private INTERFACE -fPIC -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack) - endif() - - if(MINGW) - target_compile_options(${PROJECT_NAME}_config_private INTERFACE -fno-asynchronous-unwind-tables) - target_link_options(${PROJECT_NAME}_config_private INTERFACE -Wl,--dynamicbase -Wl,--high-entropy-va -Wl,--nxcompat) - endif() - - if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang") - 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 AND NOT MINGW) - target_compile_options(${PROJECT_NAME}_config_private INTERFACE -fstack-protector-all) - endif() - - if(ENABLE_PIE AND NOT MINGW) - 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}_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) - 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) - - if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64) - check_c_source_runs( - " - #pragma GCC target(\"mmx\") - #include - int main(void) - { - __m64 x = _mm_setzero_si64(); - } - " - HAVE_MMINTRIN_H) - - if(HAVE_MMINTRIN_H) - 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( - " - #pragma GCC target(\"sse2\") - #ifndef __SSE2__ - # define __SSE2__ - #endif - - #include - 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}_config_private INTERFACE HAVE_EMMINTRIN_H=1) - target_compile_options(${PROJECT_NAME}_sse2_config INTERFACE -msse2) - endif() - - check_c_source_runs( - " - #pragma GCC target(\"sse3\") - #include - 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}_config_private INTERFACE HAVE_PMMINTRIN_H=1) - target_compile_options(${PROJECT_NAME}_sse3_config INTERFACE -msse3) - endif() - - check_c_source_runs( - " - #pragma GCC target(\"ssse3\") - #include - int main(void) { - __m64 x = _mm_abs_pi32(_m_from_int(0)); - } - " - HAVE_TMMINTRIN_H) - - if(HAVE_TMMINTRIN_H) - 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( - " - #pragma GCC target(\"sse4.1\") - #include - int main(void) { - __m128i x = _mm_minpos_epu16(_mm_setzero_si128()); - } - " - HAVE_SMMINTRIN_H) - - if(HAVE_SMMINTRIN_H) - 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( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding AVX opcodes - #endif - #pragma GCC target(\"avx\") - #include - int main(void) { - _mm256_zeroall(); - } - " - HAVE_AVXINTRIN_H) - - if(HAVE_AVXINTRIN_H) - 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( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding AVX2 opcodes - #endif - #pragma GCC target(\"avx2\") - #include - 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}_config_private INTERFACE HAVE_AVX2INTRIN_H=1) - target_compile_options(${PROJECT_NAME}_avx2_config INTERFACE -mavx2) - - check_c_source_runs( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding AVX2 opcodes - #endif - #pragma GCC target(\"avx2\") - #include - 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}_config_private - INTERFACE _mm256_broadcastsi128_si256=_mm_broadcastsi128_si256) - endif() - endif() - - check_c_source_runs( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding AVX512F opcodes - #endif - #pragma GCC target(\"avx512f\") - #include - - #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}_config_private INTERFACE HAVE_AVX512FINTRIN_H=1) - target_compile_options(${PROJECT_NAME}_avx512f_config INTERFACE -mavx512f) - endif() - - check_c_source_runs( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding AESNI opcodes - #endif - #pragma GCC target(\"aes\") - #pragma GCC target(\"pclmul\") - #include - 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}_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( - " - #ifdef __native_client__ - # error NativeClient detected - Avoiding RDRAND opcodes - #endif - #pragma GCC target(\"rdrnd\") - #include - int main(void) { - unsigned long long x; - _rdrand64_step(&x); - } - " - HAVE_RDRAND) - - if(HAVE_RDRAND) - 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( - " - #include - int main(void) { - (void) _xgetbv(0); - } - " - HAVE__XGETBV) - - if(HAVE__XGETBV) - 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\"); - } - " - HAVE_INLINE_ASM) - - if(HAVE_INLINE_ASM) - target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_INLINE_ASM=1) - endif() - - check_c_source_runs( - " - 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}_config_private INTERFACE HAVE_AMD64_ASM=1) - endif() - - check_c_source_runs( - " - 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}_config_private INTERFACE HAVE_AVX_ASM=1) - endif() - - check_c_source_runs( - " - #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 - #include - #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}_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\" : - \"=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}_config_private INTERFACE HAVE_CPUID=1) - endif() - endif() - - check_c_source_runs( - " - #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}_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); - } - " - HAVE_ATOMIC_OPS) - - if(HAVE_ATOMIC_OPS) - target_compile_definitions(${PROJECT_NAME}_config_private INTERFACE HAVE_ATOMIC_OPS=1) - endif() - - check_c_source_runs( - " - #include - #include - int main(void) { - (void) SIZE_MAX; - (void) UINT64_MAX; - } - " - STDC_LIMIT_MACROS_REQUIRED) - - if(STDC_LIMIT_MACROS_REQUIRED) - 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}_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 - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_auth/crypto_auth.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box_easy.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/crypto_box_seal.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/hchacha20/core_hchacha20.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/crypto_generichash.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/generichash_blake2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse41.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-avx2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_hash/crypto_hash.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_hash/sha256/hash_sha256.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_hash/sha512/hash_sha512.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_kdf/crypto_kdf.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_kx/crypto_kx.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-core.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-core.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blake2b-long.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blake2b-long.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-ref.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/crypto_pwhash.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/crypto_scalarmult.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_secretbox/crypto_secretbox.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/crypto_shorthash.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash_ref.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/crypto_sign.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/sign_ed25519.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/keypair.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/open.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/sign.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/sign_ed25519_ref10.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/stream_chacha20.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/stream_chacha20.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/crypto_stream.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/stream_salsa20.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/stream_salsa20.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_verify/sodium/verify.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/chacha20_ietf_ext.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/common.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/implementations.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/mutex.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/sse2_64_32.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/randombytes/randombytes.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/sodium/codecs.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/sodium/core.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/sodium/runtime.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/sodium/utils.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/sodium/version.c) - - if(HAVE_TI_MODE) - target_sources( - ${PROJECT_NAME} - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/base.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/base2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/constants.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_51/fe.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10_fe_51.h) - else() - target_sources( - ${PROJECT_NAME} - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/base2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/constants.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/ref10/fe_25_5/fe.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/private/ed25519_ref10_fe_25_5.h) - endif() - - if(HAVE_AMD64_ASM) - target_sources( - ${PROJECT_NAME} - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h) - else() - target_sources( - ${PROJECT_NAME} PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.h) - endif() - - target_sources( - ${PROJECT_NAME} - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base.S) - - if(HAVE_AVX_ASM) - target_sources( - ${PROJECT_NAME} - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S) - endif() - - if(NOT ENABLE_MINIMAL) - target_sources( - ${PROJECT_NAME} - PRIVATE - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/core_ed25519.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_core/ed25519/core_ristretto255.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_scalarmult/ristretto255/ref10/scalarmult_ristretto255_ref10.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa208/stream_salsa208.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c) - endif() - - add_library( - ${PROJECT_NAME}_rdrand OBJECT - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/randombytes/internal/randombytes_internal_random.c - ${LIBSODIUM_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 - ${LIBSODIUM_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 ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.h) - - if(NOT ENABLE_MINIMAL) - target_sources( - ${PROJECT_NAME}_sse2 - PRIVATE - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c) - endif() - - if(NOT HAVE_AMD64_ASM) - target_sources( - ${PROJECT_NAME}_sse2 - PRIVATE ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h - ${LIBSODIUM_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 - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u0.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u1.h - ${LIBSODIUM_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 - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.c - ${LIBSODIUM_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 - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/blamka-round-avx2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/chacha20/dolbeau/u8.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_stream/salsa20/xmm6int/u4.h - ${LIBSODIUM_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 - ${LIBSODIUM_SOURCE_DIR}/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx512f.c - ${LIBSODIUM_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 "$" - "$" - "$" - "$" - "$" - "$" - "$" - "$" - PUBLIC ${PROJECT_NAME}_config_public) - -endif() - -if(BUILD_SHARED_LIBS) - if(MSVC) - target_compile_definitions(${PROJECT_NAME} PRIVATE SODIUM_DLL_EXPORT) - endif() -else() - if(MSVC) - target_compile_definitions(${PROJECT_NAME} PUBLIC SODIUM_STATIC) - else() - target_compile_definitions(${PROJECT_NAME}_config_public INTERFACE SODIUM_STATIC) - endif() -endif() - -if(BUILD_TESTING) - enable_testing() - - file(GLOB sodium_test_sources ${LIBSODIUM_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 $ - $ - $ $) - - target_link_libraries(${test_name} PRIVATE ${PROJECT_NAME}) - - add_custom_command( - TARGET ${test_name} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LIBSODIUM_SOURCE_DIR}/test/default/${test_name}.exp" - $) - - add_test( - NAME ${test_name} - COMMAND ${test_name} - WORKING_DIRECTORY $) - endforeach() -endif() - -install( - DIRECTORY src/libsodium/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - USE_SOURCE_PERMISSIONS - PATTERN "*.h" - PATTERN "*.h.in" EXCLUDE - REGEX "private($|/)" EXCLUDE) - -install(FILES ${CMAKE_BINARY_DIR}/sodium/version.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sodium") - -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_LIBDIR}/cmake/${PROJECT_NAME}") -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_LIBDIR}/cmake/${PROJECT_NAME}") -endif() - -install( - EXPORT ${PROJECT_NAME}-targets - FILE ${PROJECT_NAME}-target.cmake - NAMESPACE ${PROJECT_NAME}:: - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") - -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" - VERSION ${VERSION} - COMPATIBILITY AnyNewerVersion) - -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${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 -# https://gitlab.kitware.com/cmake/cmake/-/issues/15415 diff --git a/ports/ssl/libsodium/build-script/libsodium-config.cmake.in b/ports/ssl/libsodium/build-script/libsodium-config.cmake.in deleted file mode 100644 index 608daa44..00000000 --- a/ports/ssl/libsodium/build-script/libsodium-config.cmake.in +++ /dev/null @@ -1,3 +0,0 @@ -@PACKAGE_INIT@ - -include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-target.cmake") diff --git a/ports/ssl/libsodium/libsodium.cmake b/ports/ssl/libsodium/libsodium.cmake index b8c5a13c..4c93fa5e 100644 --- a/ports/ssl/libsodium/libsodium.cmake +++ b/ports/ssl/libsodium/libsodium.cmake @@ -1,34 +1,39 @@ include_guard(DIRECTORY) # =========== third party libsodium ================== - -macro(PROJECT_THIRD_PARTY_LIBSODIUM_IMPORT) +function(PROJECT_THIRD_PARTY_LIBSODIUM_IMPORT) if(TARGET sodium) # Official Findsodium.cmake message(STATUS "Dependency(${PROJECT_NAME}): Libsodium found target sodium") - set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME sodium) + project_third_party_export_port_set(libsodium LINK_NAME sodium) elseif(TARGET unofficial-sodium::sodium) # vcpkg porting message(STATUS "Dependency(${PROJECT_NAME}): Libsodium found target unofficial-sodium::sodium") - set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME unofficial-sodium::sodium) + project_third_party_export_port_set(libsodium LINK_NAME unofficial-sodium::sodium) elseif(TARGET libsodium::libsodium) # Our porting message(STATUS "Dependency(${PROJECT_NAME}): Libsodium found target libsodium::libsodium") - set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME libsodium::libsodium) + project_third_party_export_port_set(libsodium LINK_NAME libsodium::libsodium) endif() if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME) project_build_tools_patch_default_imported_config( sodium unofficial-sodium::sodium unofficial-sodium::sodium_config_public libsodium::libsodium libsodium::libsodium_config_public) endif() -endmacro() +endfunction() -# Try to use lua-config.cmake if(NOT TARGET sodium AND NOT TARGET unofficial-sodium::sodium AND NOT TARGET libsodium::libsodium) - find_package(sodium QUIET) - if(NOT TARGET sodium) - find_package(libsodium QUIET CONFIG) - if(NOT TARGET unofficial-sodium::sodium AND NOT TARGET libsodium::libsodium) - find_package(unofficial-sodium QUIET CONFIG) + if(VCPKG_TOOLCHAIN) + find_package(unofficial-sodium QUIET CONFIG) + if(NOT TARGET unofficial-sodium::sodium) + find_package(sodium QUIET) + endif() + else() + find_package(sodium QUIET) + if(NOT TARGET sodium) + find_package(libsodium QUIET CONFIG) + if(NOT TARGET unofficial-sodium::sodium AND NOT TARGET libsodium::libsodium) + find_package(unofficial-sodium QUIET CONFIG) + endif() endif() endif() if(TARGET sodium @@ -45,7 +50,7 @@ if(NOT TARGET sodium project_third_party_port_declare( libsodium VERSION - "1.0.20-RELEASE" + "1.0.21-RELEASE" GIT_URL "https://github.com/jedisct1/libsodium.git" BUILD_OPTIONS @@ -56,43 +61,338 @@ if(NOT TARGET sodium ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}" "libsodium" "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}") - # Redirect source path - list( - APPEND - ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS - "-DLIBSODIUM_SOURCE_DIR=${PROJECT_THIRD_PARTY_PACKAGE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}" - ) - project_third_party_append_build_shared_lib_var( - "libsodium" "" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS BUILD_SHARED_LIBS) - - if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE - AND EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") - list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS GIT_PATCH_FILES - "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR + "${PROJECT_THIRD_PARTY_PACKAGE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}") + + # libsodium does not ship a CMakeLists.txt. On MSVC we build native vcxproj via MSBuild; on Unix we use autotools. + if(MSVC AND NOT MINGW) + # ============ MSVC: MSBuild with vcxproj ============ + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS + URL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GIT_URL}" REPO_DIRECTORY + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}" TAG + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE + AND EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS PATCH_FILES + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") + endif() + project_git_clone_repository(${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS}) + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_GIT_ARGS) + + if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}") + if(NOT EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}") + file(MAKE_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}") + endif() + + # Determine linkage configuration + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED OR BUILD_SHARED_LIBS) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE "DLL") + else() + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE "LIB") + endif() + + # Determine platform + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "x64") + else() + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "Win32") + endif() + if(CMAKE_GENERATOR_PLATFORM) + string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC) + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC STREQUAL "ARM64") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "ARM64") + elseif(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC STREQUAL "ARM") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM "ARM") + endif() + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GEN_PLATFORM_UC) + endif() + + # Select vcxproj path - prefer vs2022 + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH + "builds/msvc/vs2022/libsodium/libsodium.vcxproj") + if(NOT + EXISTS + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH}" + ) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH + "builds/msvc/vs2019/libsodium/libsodium.vcxproj") + endif() + + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG + "Release${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE}") + + # Generate version.h from version.h.in (libsodium requires this before build) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h.in") + if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN}") + file(READ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN}" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT) + # Extract version numbers from ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION e.g. "1.0.21-RELEASE" → + # MAJOR=1, MINOR=0, PATCH=21 + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_MATCH + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_MATCH) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR "${CMAKE_MATCH_1}") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR "${CMAKE_MATCH_2}") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH "${CMAKE_MATCH_3}") + else() + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR "1") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR "0") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH "21") + endif() + + # Extract SODIUM_LIBRARY_VERSION_MAJOR/MINOR from configure.ac + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/configure.ac") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR "26") + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR "3") + if(EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC}") + file(READ "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC}" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT) + string(REGEX MATCH "SODIUM_LIBRARY_VERSION_MAJOR=([0-9]+)" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR_MATCH + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT}") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR_MATCH) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR "${CMAKE_MATCH_1}") + endif() + string(REGEX MATCH "SODIUM_LIBRARY_VERSION_MINOR=([0-9]+)" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR_MATCH + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT}") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR_MATCH) + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR "${CMAKE_MATCH_1}") + endif() + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_AC_CONTENT) + endif() + + string( + REPLACE + "@VERSION@" + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MAJOR}.${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_MINOR}.${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VER_PATCH}" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}") + string( + REPLACE "@SODIUM_LIBRARY_VERSION_MAJOR@" "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MAJOR}" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}") + string( + REPLACE "@SODIUM_LIBRARY_VERSION_MINOR@" "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_VER_MINOR}" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}") + string(REPLACE "@SODIUM_LIBRARY_MINIMAL_DEF@" "" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}") + file(WRITE + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h" + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT}") + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_CONTENT) + endif() + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION_H_IN) + + # Generate build script + file(WRITE "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1" + "\$PSDefaultParameterValues['*:Encoding'] = 'UTF-8'${PROJECT_THIRD_PARTY_BUILDTOOLS_BASH_EOL}" + "\$OutputEncoding = [System.Text.UTF8Encoding]::new()${PROJECT_THIRD_PARTY_BUILDTOOLS_BASH_EOL}") + file(WRITE "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat" + "@echo off${PROJECT_THIRD_PARTY_BUILDTOOLS_EOL}" "chcp 65001${PROJECT_THIRD_PARTY_BUILDTOOLS_EOL}") + project_make_executable("${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1") + project_make_executable("${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat") + + # MSBuild command + project_expand_list_for_command_line_to_file( + BAT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat" + msbuild + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH}" + "/m" + "/v:minimal" + "/p:Configuration=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG}" + "/p:Platform=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM}") + project_expand_list_for_command_line_to_file( + PWSH + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1" + "&" + msbuild + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH}" + "/m" + "/v:minimal" + "/p:Configuration=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG}" + "/p:Platform=${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM}") + + # Run build + if(ATFRAMEWORK_CMAKE_TOOLSET_PWSH) + execute_process( + COMMAND + "${ATFRAMEWORK_CMAKE_TOOLSET_PWSH}" "-NoProfile" "-InputFormat" "None" "-ExecutionPolicy" "Bypass" + "-NonInteractive" "-NoLogo" "-File" + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.ps1" + WORKING_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}" + ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS} + RESULT_VARIABLE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT) + else() + execute_process( + COMMAND "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}/run-build-release.bat" + WORKING_DIRECTORY "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}" + ${ATFRAMEWORK_CMAKE_TOOLSET_EXECUTE_PROCESS_OUTPUT_OPTIONS} + RESULT_VARIABLE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT) + endif() + + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT EQUAL 0) + # Install headers + file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium.h" + DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include") + file(INSTALL "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium" + DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include") + # Install generated version.h + if(NOT EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/version.h") + if(EXISTS + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h") + file(INSTALL + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/src/libsodium/include/sodium/version.h" + DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium") + endif() + endif() + # Remove build artifacts from include + file(REMOVE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/Makefile.am" + "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/version.h.in") + + # Install libraries - MSBuild outputs to + # /bin///// (see + # builds/msvc/properties/Output.props). Use GLOB_RECURSE under /bin/ for robustness since + # PlatformToolset comes from the vcxproj (e.g. v143) and DefaultLinkage is "static"/"dynamic" not "LIB"/"DLL". + file(GLOB_RECURSE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/bin/*.lib") + file(GLOB_RECURSE ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR}/bin/*.dll") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS) + file(INSTALL ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_LIBS} + DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib") + endif() + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS) + file(INSTALL ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_INSTALL_DLLS} + DESTINATION "${PROJECT_THIRD_PARTY_INSTALL_DIR}/bin") + endif() + + # For static builds, patch export.h + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "LIB") + if(EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h") + file(READ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT) + string(REPLACE "#ifdef SODIUM_STATIC" "#if 1" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}") + file(WRITE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}") + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT) + endif() + endif() + + # Create an imported target for find_package compatibility + if(NOT TARGET libsodium::libsodium) + add_library(libsodium::libsodium UNKNOWN IMPORTED) + set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include") + # Find the installed .lib + file(GLOB ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE + "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/libsodium*.lib" + "${PROJECT_THIRD_PARTY_INSTALL_DIR}/lib/sodium*.lib") + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE) + list(GET ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE 0 + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST) + set_target_properties( + libsodium::libsodium PROPERTIES IMPORTED_LOCATION + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST}") + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE_FIRST) + endif() + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LIB_FILE) + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE STREQUAL "LIB") + set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC=1") + endif() + set_target_properties(libsodium::libsodium PROPERTIES INTERFACE_LINK_LIBRARIES "advapi32") + endif() + else() + message(WARNING "Dependency(${PROJECT_NAME}): libsodium MSBuild build failed") + endif() + + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_LINKAGE) + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_PLATFORM) + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_MSBUILD_CONFIG) + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VCXPROJ_SUBPATH) + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_RESULT) + endif() + else() + # ============ Unix/Linux/macOS/MinGW: autotools (configure + make) ============ + set(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS) + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS "--disable-dependency-tracking") + + if(NOT MINGW) + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS "--disable-pie") + endif() + + project_third_party_append_build_shared_lib_var( + "libsodium" "" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS BUILD_SHARED_LIBS) + + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED OR BUILD_SHARED_LIBS) + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS "--enable-shared" + "--disable-static") + else() + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS "--disable-shared" + "--enable-static") + endif() + + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE + AND EXISTS "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS GIT_PATCH_FILES + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_PATCH_FILE}") + endif() + + find_configure_package( + PACKAGE + libsodium + BUILD_WITH_CONFIGURE + AUTOGEN_CONFIGURE + "bash" + "./autogen.sh" + CONFIGURE_FLAGS + ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS} + WORKING_DIRECTORY + "${PROJECT_THIRD_PARTY_PACKAGE_DIR}" + BUILD_DIRECTORY + "${PROJECT_THIRD_PARTY_PACKAGE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}" + PREFIX_DIRECTORY + "${PROJECT_THIRD_PARTY_INSTALL_DIR}" + SRC_DIRECTORY_NAME + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}" + GIT_BRANCH + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}" + GIT_URL + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GIT_URL}") + + # For static builds, patch export.h + if(NOT ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_USE_SHARED AND NOT BUILD_SHARED_LIBS) + if(EXISTS "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h") + file(READ "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" + ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT) + string(REPLACE "#ifdef SODIUM_STATIC" "#if 1" ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}") + file(WRITE "${PROJECT_THIRD_PARTY_INSTALL_DIR}/include/sodium/export.h" + "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT}") + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_EXPORT_H_CONTENT) + endif() + endif() + + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_CONFIGURE_OPTIONS) endif() - find_configure_package( - PACKAGE - libsodium - BUILD_WITH_CMAKE - CMAKE_INHERIT_BUILD_ENV - CMAKE_INHERIT_BUILD_ENV_DISABLE_CXX_FLAGS - CMAKE_FLAGS - ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_OPTIONS} - WORKING_DIRECTORY - "${PROJECT_THIRD_PARTY_PACKAGE_DIR}" - BUILD_DIRECTORY - "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}" - PREFIX_DIRECTORY - "${PROJECT_THIRD_PARTY_INSTALL_DIR}" - SRC_DIRECTORY_NAME - "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}" - PROJECT_DIRECTORY - "${PROJECT_THIRD_PARTY_PACKAGE_DIR}/${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SRC_DIRECTORY_NAME}" - GIT_BRANCH - "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_VERSION}" - GIT_URL - "${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_GIT_URL}") + # Try to find and import again after build + if(NOT TARGET sodium + AND NOT TARGET unofficial-sodium::sodium + AND NOT TARGET libsodium::libsodium) + find_package(sodium QUIET) + if(NOT TARGET sodium) + find_package(libsodium QUIET CONFIG) + endif() + endif() if(TARGET sodium OR TARGET unofficial-sodium::sodium @@ -103,6 +403,8 @@ if(NOT TARGET sodium project_build_tools_print_configure_log("${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_BUILD_DIR}") endif() endif() + + unset(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_SOURCE_DIR) else() project_third_party_libsodium_import() endif() diff --git a/ports/ssl/port.cmake b/ports/ssl/port.cmake index 3692a8ef..b73da34b 100644 --- a/ports/ssl/port.cmake +++ b/ports/ssl/port.cmake @@ -56,8 +56,13 @@ if(NOT OPENSSL_FOUND endif() if(NOT ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_CRYPTO_DISABLED) - find_package(Libsodium QUIET) - if(Libsodium_FOUND) - list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_CRYPT_LINK_NAME ${Libsodium_LIBRARIES}) + if(ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME) + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_CRYPT_LINK_NAME + ${ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_LIBSODIUM_LINK_NAME}) + else() + find_package(sodium QUIET) + if(sodium_FOUND) + list(APPEND ATFRAMEWORK_CMAKE_TOOLSET_THIRD_PARTY_CRYPT_LINK_NAME sodium) + endif() endif() endif()