Skip to content

Commit caacb61

Browse files
committed
Adjust MSVC detection/support in CMakeLists.txt fireice-uk#1842
1 parent 27f36e1 commit caacb61

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

CMakeLists.txt

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,13 @@ if(XMR-STAK_COMPILE STREQUAL "native")
6262
# activate Intel Compiler options: optimize for current host CPU
6363
set(CMAKE_CXX_FLAGS "-xHOST ${CMAKE_CXX_FLAGS}")
6464
set(CMAKE_C_FLAGS "-xHOST ${CMAKE_C_FLAGS}")
65-
elseif(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
65+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
66+
#intentionally appending due to how MSVC collects options
67+
# this forces these three flags to override any previous
68+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Ox /GL /EHsc")
69+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Ox /GL /EHsc")
70+
else()
71+
# GCC and all other compilers
6672
set(CMAKE_CXX_FLAGS "-march=native -mtune=native ${CMAKE_CXX_FLAGS}")
6773
set(CMAKE_C_FLAGS "-march=native -mtune=native ${CMAKE_C_FLAGS}")
6874
endif()
@@ -165,9 +171,11 @@ if(CUDA_ENABLE)
165171
set(CLANG_BUILD_FLAGS "${CLANG_BUILD_FLAGS} --cuda-gpu-arch=sm_${CUDA_ARCH_ELEM}")
166172
endforeach()
167173
elseif(CUDA_COMPILER STREQUAL "nvcc")
168-
# add c++11 for cuda
169-
if(NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\+\\+11")
170-
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
174+
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
175+
# add c++11 for cuda, except Windows
176+
if(NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\+\\+11")
177+
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
178+
endif()
171179
endif()
172180

173181
# avoid that nvcc in CUDA 8 complains about sm_20 pending removal
@@ -406,18 +414,18 @@ endif()
406414

407415
# Get the current working branch
408416
execute_process(
409-
COMMAND git rev-parse --abbrev-ref HEAD
410-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
411-
OUTPUT_VARIABLE GIT_BRANCH
412-
OUTPUT_STRIP_TRAILING_WHITESPACE
417+
COMMAND git rev-parse --abbrev-ref HEAD
418+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
419+
OUTPUT_VARIABLE GIT_BRANCH
420+
OUTPUT_STRIP_TRAILING_WHITESPACE
413421
)
414422

415423
# Get the latest abbreviated commit hash of the working branch
416424
execute_process(
417-
COMMAND git log -1 --format=%h
418-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
419-
OUTPUT_VARIABLE GIT_COMMIT_HASH
420-
OUTPUT_STRIP_TRAILING_WHITESPACE
425+
COMMAND git log -1 --format=%h
426+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
427+
OUTPUT_VARIABLE GIT_COMMIT_HASH
428+
OUTPUT_STRIP_TRAILING_WHITESPACE
421429
)
422430

423431
if(NOT GIT_COMMIT_HASH STREQUAL "")
@@ -440,6 +448,10 @@ include_directories(BEFORE .)
440448
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
441449

442450
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
451+
# optimize linking
452+
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
453+
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF")
454+
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF")
443455
# remove warnings that f_open() is not save and f_open_s should be used
444456
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
445457
# disable min define to allow usage of std::min
@@ -604,4 +616,5 @@ if( NOT CMAKE_INSTALL_PREFIX STREQUAL PROJECT_BINARY_DIR )
604616
else()
605617
# this rule is used if the install prefix is the build directory
606618
install(CODE "MESSAGE(\"xmr-stak installed to folder 'bin'\")")
607-
endif()
619+
endif()
620+
# vim: et sw=4 sts=4 ts=4:

0 commit comments

Comments
 (0)