1
1
project (xmr-stak)
2
2
3
- cmake_minimum_required (VERSION 3.1 .0)
3
+ cmake_minimum_required (VERSION 3.4 .0)
4
4
5
5
# enforce C++11
6
6
set (CMAKE_CXX_STANDARD_REQUIRED ON )
@@ -36,10 +36,6 @@ if(NOT CMAKE_BUILD_TYPE)
36
36
endif ()
37
37
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE} " )
38
38
39
- set (XMR-STAK_CURRENCY "all" CACHE STRING "select miner currency" )
40
- set_property (CACHE XMR-STAK_CURRENCY PROPERTY STRINGS "all;monero;aeon" )
41
-
42
-
43
39
set (XMR-STAK_COMPILE "native" CACHE STRING "select CPU compute architecture" )
44
40
set_property (CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic" )
45
41
if (XMR-STAK_COMPILE STREQUAL "native" )
@@ -53,16 +49,6 @@ else()
53
49
message (FATAL_ERROR "XMR-STAK_COMPILE is set to an unknown value '${XMR-STAK_COMPILE}'" )
54
50
endif ()
55
51
56
- if (XMR-STAK_CURRENCY STREQUAL "all" )
57
- message (STATUS "Set miner currency to 'monero' and 'aeon'" )
58
- elseif (XMR-STAK_CURRENCY STREQUAL "aeon" )
59
- message (STATUS "Set miner currency to 'aeon'" )
60
- add_definitions ("-DCONF_NO_MONERO=1" )
61
- elseif (XMR-STAK_CURRENCY STREQUAL "monero" )
62
- message (STATUS "Set miner currency to 'monero'" )
63
- add_definitions ("-DCONF_NO_AEON=1" )
64
- endif ()
65
-
66
52
# option to add static libgcc and libstdc++
67
53
option (CMAKE_LINK_STATIC "link as much as possible libraries static" OFF )
68
54
@@ -114,6 +100,11 @@ if(CUDA_ENABLE)
114
100
list (APPEND DEFAULT_CUDA_ARCH "70" )
115
101
endif ()
116
102
endif ()
103
+ # add Turing support for CUDA >= 10.0
104
+ if (NOT CUDA_VERSION VERSION_LESS 10.0)
105
+ list (APPEND DEFAULT_CUDA_ARCH "75" )
106
+ endif ()
107
+
117
108
set (CUDA_ARCH "${DEFAULT_CUDA_ARCH} " CACHE STRING "Set GPU architecture (semicolon separated list, e.g. '-DCUDA_ARCH=20;35;60')" )
118
109
119
110
# generate comma separated list with architectures
@@ -155,13 +146,17 @@ if(CUDA_ENABLE)
155
146
# set flags to create device code for the given architectures
156
147
set (CLANG_BUILD_FLAGS "${CLANG_BUILD_FLAGS} --cuda-gpu-arch=sm_${CUDA_ARCH_ELEM} " )
157
148
endforeach ()
158
-
159
149
elseif (CUDA_COMPILER STREQUAL "nvcc" )
160
150
# add c++11 for cuda
161
151
if (NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\ +\\ +11" )
162
152
set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )
163
153
endif ()
164
154
155
+ # avoid that nvcc in CUDA 8 complains about sm_20 pending removal
156
+ if (CUDA_VERSION VERSION_EQUAL 8.0)
157
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Wno-deprecated-gpu-targets" )
158
+ endif ()
159
+
165
160
# avoid that nvcc in CUDA < 8 tries to use libc `memcpy` within the kernel
166
161
if (CUDA_VERSION VERSION_LESS 8.0)
167
162
add_definitions (-D_FORCE_INLINES)
@@ -189,14 +184,17 @@ if(CUDA_ENABLE)
189
184
if (CUDA_KEEP_FILES)
190
185
set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} " --keep --keep-dir "${PROJECT_BINARY_DIR} " )
191
186
endif (CUDA_KEEP_FILES)
192
-
187
+
193
188
if (CUDA_VERSION VERSION_LESS 8.0)
194
189
# for CUDA 7.5 fix compile error: https://github.com/fireice-uk/xmr-stak/issues/34
195
190
set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} " "-D_MWAITXINTRIN_H_INCLUDED" )
196
191
endif ()
197
192
198
193
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND
199
- (CUDA_VERSION VERSION_EQUAL 9.0 OR CUDA_VERSION VERSION_EQUAL 9.1)
194
+ (CUDA_VERSION VERSION_EQUAL 9.0 OR
195
+ CUDA_VERSION VERSION_EQUAL 9.1 OR
196
+ CUDA_VERSION VERSION_EQUAL 9.2 OR
197
+ CUDA_VERSION VERSION_EQUAL 10.0)
200
198
)
201
199
# workaround find_package(CUDA) is using the wrong path to the CXX host compiler
202
200
# overwrite the CUDA host compiler variable with the used CXX MSVC
@@ -241,7 +239,7 @@ if(OpenCL_ENABLE)
241
239
"AMD APP/include" )
242
240
243
241
find_library (OpenCL_LIBRARY
244
- NAMES
242
+ NAMES
245
243
OpenCL
246
244
OpenCL.lib
247
245
NO_DEFAULT_PATH
@@ -293,7 +291,7 @@ endif()
293
291
# Find microhttpd
294
292
################################################################################
295
293
296
- option (MICROHTTPD_ENABLE "Enable or disable the requirement of microhttp (http deamon )" ON )
294
+ option (MICROHTTPD_ENABLE "Enable or disable the requirement of microhttp (http daemon )" ON )
297
295
if (MICROHTTPD_ENABLE)
298
296
find_path (MTHD_INCLUDE_DIR
299
297
NAMES
@@ -316,7 +314,7 @@ if(MICROHTTPD_ENABLE)
316
314
PATH_SUFFIXES
317
315
lib)
318
316
if (MHTD STREQUAL "MHTD-NOTFOUND" )
319
- message (FATAL_ERROR "microhttpd NOT found: use `-DMICROHTTPD_ENABLE=OFF` to build without http deamon support" )
317
+ message (FATAL_ERROR "microhttpd NOT found: use `-DMICROHTTPD_ENABLE=OFF` to build without http daemon support" )
320
318
else ()
321
319
set (LIBS ${LIBS} ${MHTD} )
322
320
include_directories (AFTER ${MTHD_INCLUDE_DIR} )
@@ -408,10 +406,10 @@ execute_process(
408
406
)
409
407
410
408
if (NOT GIT_COMMIT_HASH STREQUAL "" )
411
- add_definitions ("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH} " )
409
+ add_definitions ("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH} " )
412
410
endif ()
413
411
if (NOT GIT_BRANCH STREQUAL "" )
414
- add_definitions ("-DGIT_BRANCH=${GIT_BRANCH} " )
412
+ add_definitions ("-DGIT_BRANCH=${GIT_BRANCH} " )
415
413
endif ()
416
414
417
415
# generate backend string
@@ -435,7 +433,19 @@ else()
435
433
# activate sse2 and aes-ni
436
434
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -maes" )
437
435
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -maes" )
436
+ endif ()
438
437
438
+ # add -Wall for debug builds with gcc
439
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
440
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
441
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
442
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall" )
443
+ endif ()
444
+ endif ()
445
+
446
+ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" )
447
+ set (CMAKE_CXX_FLAGS "-Wl,-z,noexecstack ${CMAKE_CXX_FLAGS} " )
448
+ set (CMAKE_C_FLAGS "-Wl,-z,noexecstack ${CMAKE_C_FLAGS} " )
439
449
endif ()
440
450
441
451
# activate static libgcc and libstdc++ linking
@@ -448,6 +458,27 @@ if(CMAKE_LINK_STATIC)
448
458
endif ()
449
459
endif ()
450
460
461
+ if (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
462
+ # asm optimized monero v8 code
463
+ enable_language (ASM_MASM)
464
+ set_property (SOURCE "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.asm" PROPERTY ASM_MASM)
465
+ add_library (xmr-stak-asm
466
+ STATIC
467
+ "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.asm"
468
+ )
469
+ else ()
470
+ # asm optimized monero v8 code
471
+ enable_language (ASM)
472
+ set_property (SOURCE "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" PROPERTY CPP)
473
+ set_source_files_properties ("xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S" PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp" )
474
+ add_library (xmr-stak-asm
475
+ STATIC
476
+ "xmrstak/backend/cpu/crypto/asm/cryptonight_v8_main_loop.S"
477
+ )
478
+ endif ()
479
+
480
+ set_property (TARGET xmr-stak-asm PROPERTY LINKER_LANGUAGE C)
481
+
451
482
# compile C files
452
483
file (GLOB SRCFILES_C "xmrstak/backend/cpu/crypto/*.c" )
453
484
@@ -459,7 +490,7 @@ set_property(TARGET xmr-stak-c PROPERTY C_STANDARD 99)
459
490
if (MICROHTTPD_ENABLE)
460
491
target_link_libraries (xmr-stak-c ${MHTD} )
461
492
endif ()
462
- target_link_libraries (xmr-stak-c ${LIBS} )
493
+ target_link_libraries (xmr-stak-c ${LIBS} xmr-stak-asm )
463
494
464
495
# compile generic backend files
465
496
file (GLOB BACKEND_CPP
@@ -475,11 +506,11 @@ add_library(xmr-stak-backend
475
506
STATIC
476
507
${BACKEND_CPP}
477
508
)
478
- target_link_libraries (xmr-stak-backend xmr-stak-c ${CMAKE_DL_LIBS} )
509
+ target_link_libraries (xmr-stak-backend xmr-stak-c ${CMAKE_DL_LIBS} xmr-stak-asm )
479
510
480
511
# compile CUDA backend
481
512
if (CUDA_FOUND)
482
- file (GLOB CUDASRCFILES
513
+ file (GLOB CUDASRCFILES
483
514
"xmrstak/backend/nvidia/nvcc_code/*.cu"
484
515
"xmrstak/backend/nvidia/*.cpp" )
485
516
@@ -502,60 +533,61 @@ if(CUDA_FOUND)
502
533
)
503
534
endif ()
504
535
target_link_libraries (xmrstak_cuda_backend ${CUDA_LIBRARIES} )
505
- target_link_libraries (xmrstak_cuda_backend xmr-stak-backend)
536
+ target_link_libraries (xmrstak_cuda_backend xmr-stak-backend xmr-stak-asm )
506
537
endif ()
507
538
508
539
# compile AMD backend
509
540
if (OpenCL_FOUND)
510
- file (GLOB OPENCLSRCFILES
541
+ file (GLOB OPENCLSRCFILES
511
542
"xmrstak/backend/amd/amd_gpu/*.cpp"
512
543
"xmrstak/backend/amd/*.cpp" )
513
544
add_library (xmrstak_opencl_backend
514
545
SHARED
515
546
${OPENCLSRCFILES}
516
547
)
517
548
target_link_libraries (xmrstak_opencl_backend ${OpenCL_LIBRARY} )
518
- target_link_libraries (xmrstak_opencl_backend xmr-stak-backend)
549
+ target_link_libraries (xmrstak_opencl_backend xmr-stak-backend xmr-stak-asm )
519
550
endif ()
520
551
521
552
# compile final binary
522
553
file (GLOB SRCFILES_CPP "xmrstak/cli/*.cpp" )
523
554
set_source_files_properties (${SRCFILES_CPP} PROPERTIES LANGUAGE CXX)
524
555
525
- add_executable (xmr-stak
526
- ${SRCFILES_CPP}
527
- )
556
+ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
557
+ add_executable (xmr-stak ${SRCFILES_CPP} xmrstak/cli/xmr-stak.manifest)
558
+ else ()
559
+ add_executable (xmr-stak ${SRCFILES_CPP} )
560
+ endif ()
528
561
529
- set (EXECUTABLE_OUTPUT_PATH "bin" )
530
- set (LIBRARY_OUTPUT_PATH "bin" )
562
+ set (EXECUTABLE_OUTPUT_PATH "bin" CACHE STRING "Path to place executables relative to ${CMAKE_INSTALL_PREFIX} " )
563
+ set (LIBRARY_OUTPUT_PATH "bin" CACHE STRING "Path to place libraries relative to ${CMAKE_INSTALL_PREFIX} " )
531
564
532
- target_link_libraries (xmr-stak ${LIBS} xmr-stak-c xmr-stak-backend)
565
+ target_link_libraries (xmr-stak ${LIBS} xmr-stak-c xmr-stak-backend xmr-stak-asm )
533
566
534
567
################################################################################
535
568
# Install
536
569
################################################################################
537
570
538
-
539
571
# do not install the binary if the project and install are equal
540
572
if ( NOT CMAKE_INSTALL_PREFIX STREQUAL PROJECT_BINARY_DIR )
541
573
install (TARGETS xmr-stak
542
- RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /bin " )
574
+ RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /${EXECUTABLE_OUTPUT_PATH} " )
543
575
if (CUDA_FOUND)
544
576
if (WIN32 )
545
577
install (TARGETS xmrstak_cuda_backend
546
- RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /bin " )
578
+ RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /${LIBRARY_OUTPUT_PATH} " )
547
579
else ()
548
580
install (TARGETS xmrstak_cuda_backend
549
- LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX} /bin " )
581
+ LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX} /${LIBRARY_OUTPUT_PATH} " )
550
582
endif ()
551
583
endif ()
552
584
if (OpenCL_FOUND)
553
585
if (WIN32 )
554
586
install (TARGETS xmrstak_opencl_backend
555
- RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /bin " )
587
+ RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX} /${LIBRARY_OUTPUT_PATH} " )
556
588
else ()
557
589
install (TARGETS xmrstak_opencl_backend
558
- LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX} /bin " )
590
+ LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX} /${LIBRARY_OUTPUT_PATH} " )
559
591
endif ()
560
592
endif ()
561
593
else ()
0 commit comments