mirror of
				https://git.wownero.com/wownero/RandomWOW.git
				synced 2024-08-15 00:23:14 +00:00 
			
		
		
		
	Fixes for cmake build with visual studio (#144)
* Fixed CMake configuration for visual studio build Added proper asm source and set correct type. * Disabled stadard layout check of randomx_cache for visual studio debug Required to silence static_assert which fails on Visual Studio Debug configuation. * Fixed warning message and defines check * Removed unsupported flags for MSVC compiler * Enabled AVX2 for msvc * Fixed formatting in CmakeLists * Added generation of configuration.asm by CMake for MSVC
This commit is contained in:
		
							parent
							
								
									7e20c8e56e
								
							
						
					
					
						commit
						01914b49cd
					
				
					 2 changed files with 55 additions and 22 deletions
				
			
		|  | @ -28,7 +28,9 @@ | ||||||
| 
 | 
 | ||||||
| cmake_minimum_required(VERSION 2.8.7) | cmake_minimum_required(VERSION 2.8.7) | ||||||
| 
 | 
 | ||||||
| set (randomx_sources | project(RandomX) | ||||||
|  | 
 | ||||||
|  | set(randomx_sources | ||||||
| src/aes_hash.cpp | src/aes_hash.cpp | ||||||
| src/argon2_ref.c | src/argon2_ref.c | ||||||
| src/argon2_ssse3.c | src/argon2_ssse3.c | ||||||
|  | @ -94,32 +96,50 @@ function(add_flag flag) | ||||||
| endfunction() | endfunction() | ||||||
| 
 | 
 | ||||||
| # x86-64 | # x86-64 | ||||||
| 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 |   list(APPEND randomx_sources | ||||||
|     src/jit_compiler_x86_static.S |  | ||||||
|     src/jit_compiler_x86.cpp) |     src/jit_compiler_x86.cpp) | ||||||
|   # cheat because cmake and ccache hate each other |  | ||||||
|   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") |   if(MSVC) | ||||||
|     add_flag("-march=native") |     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 | ||||||
|  |       COMMAND powershell -ExecutionPolicy Bypass -File h2inc.ps1 ..\\src\\configuration.h > ..\\src\\asm\\configuration.asm SET ERRORLEVEL = 0 | ||||||
|  |       COMMENT "Generating configuration.asm at ${CMAKE_CURRENT_SOURCE_DIR}" | ||||||
|  |       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/vcxproj) | ||||||
|  |     add_custom_target(generate-asm | ||||||
|  |       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/asm/configuration.asm) | ||||||
|   else() |   else() | ||||||
|     # default build has hardware AES enabled (software AES can be selected at runtime) |     list(APPEND randomx_sources src/jit_compiler_x86_static.S) | ||||||
|     add_flag("-maes") | 
 | ||||||
|     check_c_compiler_flag(-mssse3 HAVE_SSSE3) |     # cheat because cmake and ccache hate each other | ||||||
|     if(HAVE_SSSE3) |     set_property(SOURCE src/jit_compiler_x86_static.S PROPERTY LANGUAGE C) | ||||||
|       set_source_files_properties(src/argon2_ssse3.c COMPILE_FLAGS -mssse3) |     set_property(SOURCE src/jit_compiler_x86_static.S PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.asm) | ||||||
|     endif() | 
 | ||||||
|     check_c_compiler_flag(-mavx2 HAVE_AVX2) |     if(ARCH STREQUAL "native") | ||||||
|     if(HAVE_AVX2) |       add_flag("-march=native") | ||||||
|       set_source_files_properties(src/argon2_avx2.c COMPILE_FLAGS -mavx2) |     else() | ||||||
|  |       # default build has hardware AES 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() |   endif() | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # PowerPC | # PowerPC | ||||||
| if (ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le") | if(ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le") | ||||||
|   if(ARCH STREQUAL "native") |   if(ARCH STREQUAL "native") | ||||||
|     add_flag("-mcpu=native") |     add_flag("-mcpu=native") | ||||||
|   endif() |   endif() | ||||||
|  | @ -127,7 +147,7 @@ if (ARCH_ID STREQUAL "ppc64" OR ARCH_ID STREQUAL "ppc64le") | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| # ARMv8 | # ARMv8 | ||||||
| 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 |   list(APPEND randomx_sources | ||||||
|     src/jit_compiler_a64_static.S |     src/jit_compiler_a64_static.S | ||||||
|     src/jit_compiler_a64.cpp) |     src/jit_compiler_a64.cpp) | ||||||
|  | @ -152,8 +172,12 @@ endif() | ||||||
| 
 | 
 | ||||||
| set(RANDOMX_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE STRING "RandomX Include path") | set(RANDOMX_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE STRING "RandomX Include path") | ||||||
| 
 | 
 | ||||||
| add_library(randomx | add_library(randomx ${randomx_sources}) | ||||||
|   ${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 POSITION_INDEPENDENT_CODE ON) | ||||||
| set_property(TARGET randomx PROPERTY CXX_STANDARD 11) | set_property(TARGET randomx PROPERTY CXX_STANDARD 11) | ||||||
| set_property(TARGET randomx PROPERTY CXX_STANDARD_REQUIRED ON) | set_property(TARGET randomx PROPERTY CXX_STANDARD_REQUIRED ON) | ||||||
|  | @ -176,7 +200,7 @@ target_link_libraries(randomx-codegen | ||||||
| set_property(TARGET randomx-codegen PROPERTY POSITION_INDEPENDENT_CODE ON) | set_property(TARGET randomx-codegen PROPERTY POSITION_INDEPENDENT_CODE ON) | ||||||
| set_property(TARGET randomx-codegen PROPERTY CXX_STANDARD 11) | 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) |   set(THREADS_PREFER_PTHREAD_FLAG ON) | ||||||
|   find_package(Threads) |   find_package(Threads) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | @ -61,8 +61,17 @@ struct randomx_cache { | ||||||
| 
 | 
 | ||||||
| //A pointer to a standard-layout struct object points to its initial member
 | //A pointer to a standard-layout struct object points to its initial member
 | ||||||
| static_assert(std::is_standard_layout<randomx_dataset>(), "randomx_dataset must be a standard-layout struct"); | static_assert(std::is_standard_layout<randomx_dataset>(), "randomx_dataset must be a standard-layout struct"); | ||||||
|  | 
 | ||||||
| //the following assert fails when compiling Debug in Visual Studio (JIT mode will crash in Debug)
 | //the following assert fails when compiling Debug in Visual Studio (JIT mode will crash in Debug)
 | ||||||
|  | #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && defined(_DEBUG) | ||||||
|  | #define TO_STR(x) #x | ||||||
|  | #define STR(x) TO_STR(x) | ||||||
|  | #pragma message ( __FILE__ "(" STR(__LINE__) ") warning: check std::is_standard_layout<randomx_cache>() is disabled for Debug configuration. JIT mode will crash." ) | ||||||
|  | #undef STR | ||||||
|  | #undef TO_STR | ||||||
|  | #else | ||||||
| static_assert(std::is_standard_layout<randomx_cache>(), "randomx_cache must be a standard-layout struct"); | static_assert(std::is_standard_layout<randomx_cache>(), "randomx_cache must be a standard-layout struct"); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| namespace randomx { | namespace randomx { | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue