@ -28,7 +28,9 @@
cmake_minimum_required ( VERSION 2.8.7 )
set ( randomx_sources
project ( RandomX )
set ( randomx_sources
s r c / a e s _ h a s h . c p p
s r c / a r g o n 2 _ r e f . c
s r c / a r g o n 2 _ s s s e 3 . c
@ -94,32 +96,50 @@ function(add_flag flag)
endfunction ( )
# x 8 6 - 6 4
if ( ARCH_ID STREQUAL "x86_64" OR ARCH_ID STREQUAL "x86-64" OR ARCH_ID STREQUAL "amd64" )
if ( ARCH_ID STREQUAL "x86_64" OR ARCH_ID STREQUAL "x86-64" OR ARCH_ID STREQUAL "amd64" )
list ( APPEND randomx_sources
s r c / j i t _ c o m p i l e r _ x 8 6 _ s t a t i c . S
s r c / j i t _ c o m p i l e r _ x 8 6 . c p p )
# c h e a t b e c a u s e c m a k e a n d c c a c h e h a t e e a c h o t h e r
set_property ( SOURCE src/jit_compiler_x86_static.S PROPERTY LANGUAGE C )
set_property ( SOURCE src/jit_compiler_x86_static.S PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.asm )
if ( ARCH STREQUAL "native" )
add_flag ( "-march=native" )
if ( MSVC )
enable_language ( ASM_MASM )
list ( APPEND randomx_sources src/jit_compiler_x86_static.asm )
set_property ( SOURCE src/jit_compiler_x86_static.asm PROPERTY LANGUAGE ASM_MASM )
set_source_files_properties ( src/argon2_avx2.c COMPILE_FLAGS /arch:AVX2 )
add_custom_command ( OUTPUT ${ CMAKE_CURRENT_SOURCE_DIR } /src/asm/configuration.asm
C O M M A N D p o w e r s h e l l - E x e c u t i o n P o l i c y B y p a s s - F i l e h 2 i n c . p s 1 . . \ \ s r c \ \ c o n f i g u r a t i o n . h > . . \ \ s r c \ \ a s m \ \ c o n f i g u r a t i o n . a s m S E T E R R O R L E V E L = 0
C O M M E N T " G e n e r a t i n g c o n f i g u r a t i o n . a s m a t $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / v c x p r o j )
add_custom_target ( generate-asm
D E P E N D S $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / a s m / c o n f i g u r a t i o n . a s m )
else ( )
# d e f a u l t b u i l d h a s h a r d w a r e A E S enabled ( software AES can be selected at runtime )
add_flag ( "-maes" )
check_c_compiler_flag ( -mssse3 HAVE_SSSE3 )
if ( HAVE_SSSE3 )
set_source_files_properties ( src/argon2_ssse3.c COMPILE_FLAGS -mssse3 )
endif ( )
check_c_compiler_flag ( -mavx2 HAVE_AVX2 )
if ( HAVE_AVX2 )
set_source_files_properties ( src/argon2_avx2.c COMPILE_FLAGS -mavx2 )
list ( APPEND randomx_sources src/jit_compiler_x86_static.S )
# c h e a t b e c a u s e c m a k e a n d c c a c h e h a t e e a c h o t h e r
set_property ( SOURCE src/jit_compiler_x86_static.S PROPERTY LANGUAGE C )
set_property ( SOURCE src/jit_compiler_x86_static.S PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.asm )
if ( ARCH STREQUAL "native" )
add_flag ( "-march=native" )
else ( )
# d e f a u l t b u i l d h a s h a r d w a r e A E S enabled ( software AES can be selected at runtime )
add_flag ( "-maes" )
check_c_compiler_flag ( -mssse3 HAVE_SSSE3 )
if ( HAVE_SSSE3 )
set_source_files_properties ( src/argon2_ssse3.c COMPILE_FLAGS -mssse3 )
endif ( )
check_c_compiler_flag ( -mavx2 HAVE_AVX2 )
if ( HAVE_AVX2 )
set_source_files_properties ( src/argon2_avx2.c COMPILE_FLAGS -mavx2 )
endif ( )
endif ( )
endif ( )
endif ( )
# P o w e r P C
if ( ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le" )
if ( ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le" )
if ( ARCH STREQUAL "native" )
add_flag ( "-mcpu=native" )
endif ( )
@ -127,7 +147,7 @@ if (ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le")
endif ( )
# A R M v 8
if ( ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64" OR ARM_ID STREQUAL "armv8-a" )
if ( ARM_ID STREQUAL "aarch64" OR ARM_ID STREQUAL "arm64" OR ARM_ID STREQUAL "armv8-a" )
list ( APPEND randomx_sources
s r c / j i t _ c o m p i l e r _ a 6 4 _ s t a t i c . S
s r c / j i t _ c o m p i l e r _ a 6 4 . c p p )
@ -152,14 +172,22 @@ endif()
set ( RANDOMX_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE STRING "RandomX Include path" )
add_library ( randomx
$ { r a n d o m x _ s o u r c e s } )
add_library ( randomx ${ randomx_sources } )
if ( TARGET generate-asm )
add_dependencies ( randomx generate-asm )
endif ( )
set_property ( TARGET randomx PROPERTY POSITION_INDEPENDENT_CODE ON )
set_property ( TARGET randomx PROPERTY CXX_STANDARD 11 )
set_property ( TARGET randomx PROPERTY CXX_STANDARD_REQUIRED ON )
set_property ( TARGET randomx PROPERTY PUBLIC_HEADER src/randomx.h )
include ( GNUInstallDirs )
install ( TARGETS randomx
A R C H I V E D E S T I N A T I O N l i b
L I B R A R Y D E S T I N A T I O N l i b )
L I B R A R Y D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R }
A R C H I V E D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R }
P U B L I C _ H E A D E R D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } )
add_executable ( randomx-tests
s r c / t e s t s / t e s t s . c p p )
@ -176,7 +204,7 @@ target_link_libraries(randomx-codegen
set_property ( TARGET randomx-codegen PROPERTY POSITION_INDEPENDENT_CODE ON )
set_property ( TARGET randomx-codegen PROPERTY CXX_STANDARD 11 )
if ( NOT Threads_FOUND AND UNIX AND NOT APPLE )
if ( NOT Threads_FOUND AND UNIX AND NOT APPLE )
set ( THREADS_PREFER_PTHREAD_FLAG ON )
find_package ( Threads )
endif ( )