Added selection for optimized Argon2 implementation.
This commit is contained in:
parent
1c00721de3
commit
3022f19eda
12 changed files with 258 additions and 77 deletions
83
src/3rdparty/argon2/CMakeLists.txt
vendored
83
src/3rdparty/argon2/CMakeLists.txt
vendored
|
@ -39,57 +39,54 @@ set_property(TARGET argon2 APPEND PROPERTY
|
|||
COMPATIBLE_INTERFACE_STRING ARGON2_MAJOR_VERSION
|
||||
)
|
||||
|
||||
#if (CMAKE_C_COMPILER_ID MATCHES MSVC)
|
||||
if (CMAKE_C_COMPILER_ID MATCHES MSVC)
|
||||
|
||||
#elseif (NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# function(add_feature_impl FEATURE GCC_FLAG DEF)
|
||||
# add_library(argon2-${FEATURE} STATIC
|
||||
# arch/x86_64/lib/argon2-${FEATURE}.c
|
||||
# )
|
||||
# target_link_libraries(argon2-${FEATURE} PRIVATE argon2-internal)
|
||||
# set_target_properties(argon2-${FEATURE}
|
||||
# PROPERTIES POSITION_INDEPENDENT_CODE True
|
||||
# )
|
||||
elseif (NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
function(add_feature_impl FEATURE GCC_FLAG DEF)
|
||||
add_library(argon2-${FEATURE} STATIC arch/x86_64/lib/argon2-${FEATURE}.c)
|
||||
target_link_libraries(argon2-${FEATURE} PRIVATE argon2-internal)
|
||||
set_target_properties(argon2-${FEATURE} PROPERTIES POSITION_INDEPENDENT_CODE True)
|
||||
|
||||
# message("-- Detecting feature '${FEATURE}'...")
|
||||
# file(READ arch/x86_64/src/test-feature-${FEATURE}.c SOURCE_CODE)
|
||||
message("-- argon2: detecting feature '${FEATURE}'...")
|
||||
file(READ arch/x86_64/src/test-feature-${FEATURE}.c SOURCE_CODE)
|
||||
|
||||
# # try without flag:
|
||||
# check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_NOFLAG)
|
||||
# set(HAS_FEATURE ${FEATURE_${FEATURE}_NOFLAG})
|
||||
# if(NOT "${HAS_FEATURE}")
|
||||
# # try with -m<feature> flag:
|
||||
# set(CMAKE_REQUIRED_FLAGS ${GCC_FLAG})
|
||||
# check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_FLAG)
|
||||
# set(CMAKE_REQUIRED_FLAGS "")
|
||||
# try without flag:
|
||||
check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_NOFLAG)
|
||||
set(HAS_FEATURE ${FEATURE_${FEATURE}_NOFLAG})
|
||||
if (NOT "${HAS_FEATURE}")
|
||||
# try with -m<feature> flag:
|
||||
set(CMAKE_REQUIRED_FLAGS ${GCC_FLAG})
|
||||
check_c_source_compiles("${SOURCE_CODE}" FEATURE_${FEATURE}_FLAG)
|
||||
set(CMAKE_REQUIRED_FLAGS "")
|
||||
|
||||
# set(HAS_FEATURE ${FEATURE_${FEATURE}_FLAG})
|
||||
# if(${HAS_FEATURE})
|
||||
# target_compile_options(argon2-${FEATURE} PRIVATE ${GCC_FLAG})
|
||||
# endif()
|
||||
# endif()
|
||||
set(HAS_FEATURE ${FEATURE_${FEATURE}_FLAG})
|
||||
if (${HAS_FEATURE})
|
||||
target_compile_options(argon2-${FEATURE} PRIVATE ${GCC_FLAG})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# if(${HAS_FEATURE})
|
||||
# message("-- Feature '${FEATURE}' detected!")
|
||||
# target_compile_definitions(argon2-${FEATURE} PRIVATE ${DEF})
|
||||
# endif()
|
||||
# target_link_libraries(argon2 PUBLIC argon2-${FEATURE})
|
||||
# endfunction()
|
||||
if (${HAS_FEATURE})
|
||||
message("-- argon2: feature '${FEATURE}' detected!")
|
||||
target_compile_definitions(argon2-${FEATURE} PRIVATE ${DEF})
|
||||
endif()
|
||||
|
||||
# target_include_directories(argon2-internal INTERFACE arch/x86_64/lib)
|
||||
target_link_libraries(argon2 PUBLIC argon2-${FEATURE})
|
||||
endfunction()
|
||||
|
||||
# add_feature_impl(sse2 -msse2 HAVE_SSE2)
|
||||
# add_feature_impl(ssse3 -mssse3 HAVE_SSSE3)
|
||||
# add_feature_impl(xop -mxop HAVE_XOP)
|
||||
# add_feature_impl(avx2 -mavx2 HAVE_AVX2)
|
||||
# add_feature_impl(avx512f -mavx512f HAVE_AVX512F)
|
||||
target_include_directories(argon2-internal INTERFACE arch/x86_64/lib)
|
||||
|
||||
# target_sources(argon2 PRIVATE
|
||||
# arch/x86_64/lib/argon2-arch.c
|
||||
# arch/x86_64/lib/cpu-flags.c
|
||||
# )
|
||||
#else()
|
||||
add_feature_impl(sse2 -msse2 HAVE_SSE2)
|
||||
add_feature_impl(ssse3 -mssse3 HAVE_SSSE3)
|
||||
add_feature_impl(xop -mxop HAVE_XOP)
|
||||
add_feature_impl(avx2 -mavx2 HAVE_AVX2)
|
||||
add_feature_impl(avx512f -mavx512f HAVE_AVX512F)
|
||||
|
||||
target_sources(argon2 PRIVATE
|
||||
arch/x86_64/lib/argon2-arch.c
|
||||
arch/x86_64/lib/cpu-flags.c
|
||||
)
|
||||
else()
|
||||
target_sources(argon2 PRIVATE
|
||||
arch/generic/lib/argon2-arch.c
|
||||
)
|
||||
#endif()
|
||||
endif()
|
||||
|
|
2
src/3rdparty/argon2/include/argon2.h
vendored
2
src/3rdparty/argon2/include/argon2.h
vendored
|
@ -431,6 +431,8 @@ ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost,
|
|||
* string
|
||||
*/
|
||||
ARGON2_PUBLIC void argon2_select_impl(FILE *out, const char *prefix);
|
||||
ARGON2_PUBLIC const char *argon2_get_impl_name();
|
||||
ARGON2_PUBLIC int argon2_select_impl_by_name(const char *name);
|
||||
|
||||
/* signals support for passing preallocated memory: */
|
||||
#define ARGON2_PREALLOCATED_MEMORY
|
||||
|
|
28
src/3rdparty/argon2/lib/impl-select.c
vendored
28
src/3rdparty/argon2/lib/impl-select.c
vendored
|
@ -16,7 +16,7 @@
|
|||
#define BENCH_MEM_BLOCKS 512
|
||||
|
||||
static argon2_impl selected_argon_impl = {
|
||||
"(default)", NULL, fill_segment_default
|
||||
"default", NULL, fill_segment_default
|
||||
};
|
||||
|
||||
/* the benchmark routine is not thread-safe, so we can use a global var here: */
|
||||
|
@ -118,3 +118,29 @@ void argon2_select_impl(FILE *out, const char *prefix)
|
|||
}
|
||||
select_impl(out, prefix);
|
||||
}
|
||||
|
||||
const char *argon2_get_impl_name()
|
||||
{
|
||||
return selected_argon_impl.name;
|
||||
}
|
||||
|
||||
|
||||
int argon2_select_impl_by_name(const char *name)
|
||||
{
|
||||
argon2_impl_list impls;
|
||||
unsigned int i;
|
||||
|
||||
argon2_get_impl_list(&impls);
|
||||
|
||||
for (i = 0; i < impls.count; i++) {
|
||||
const argon2_impl *impl = &impls.entries[i];
|
||||
|
||||
if (strcmp(impl->name, name) == 0) {
|
||||
selected_argon_impl = *impl;
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue