Skip to content

Commit a519545

Browse files
committed
Adjust MSVC detection/support in CMakeLists.txt
1 parent 35377a4 commit a519545

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

CMakeLists.txt

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE}")
3939
set(XMR-STAK_COMPILE "native" CACHE STRING "select CPU compute architecture")
4040
set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic")
4141
if(XMR-STAK_COMPILE STREQUAL "native")
42-
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
42+
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
43+
#intentionally appending due to how MSVC collects options
44+
# this forces these three flags to override any previous
45+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Ox /GL /EHsc")
46+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Ox /GL /EHsc")
47+
else()
48+
# GCC and all other compilers
4349
set(CMAKE_CXX_FLAGS "-march=native -mtune=native ${CMAKE_CXX_FLAGS}")
4450
set(CMAKE_C_FLAGS "-march=native -mtune=native ${CMAKE_C_FLAGS}")
4551
endif()
@@ -142,9 +148,11 @@ if(CUDA_ENABLE)
142148
set(CLANG_BUILD_FLAGS "${CLANG_BUILD_FLAGS} --cuda-gpu-arch=sm_${CUDA_ARCH_ELEM}")
143149
endforeach()
144150
elseif(CUDA_COMPILER STREQUAL "nvcc")
145-
# add c++11 for cuda
146-
if(NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\+\\+11")
147-
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
151+
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
152+
# add c++11 for cuda, except Windows
153+
if(NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\+\\+11")
154+
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11")
155+
endif()
148156
endif()
149157

150158
# avoid that nvcc in CUDA 8 complains about sm_20 pending removal
@@ -383,18 +391,18 @@ endif()
383391

384392
# Get the current working branch
385393
execute_process(
386-
COMMAND git rev-parse --abbrev-ref HEAD
387-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
388-
OUTPUT_VARIABLE GIT_BRANCH
389-
OUTPUT_STRIP_TRAILING_WHITESPACE
394+
COMMAND git rev-parse --abbrev-ref HEAD
395+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
396+
OUTPUT_VARIABLE GIT_BRANCH
397+
OUTPUT_STRIP_TRAILING_WHITESPACE
390398
)
391399

392400
# Get the latest abbreviated commit hash of the working branch
393401
execute_process(
394-
COMMAND git log -1 --format=%h
395-
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
396-
OUTPUT_VARIABLE GIT_COMMIT_HASH
397-
OUTPUT_STRIP_TRAILING_WHITESPACE
402+
COMMAND git log -1 --format=%h
403+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
404+
OUTPUT_VARIABLE GIT_COMMIT_HASH
405+
OUTPUT_STRIP_TRAILING_WHITESPACE
398406
)
399407

400408
if(NOT GIT_COMMIT_HASH STREQUAL "")
@@ -417,6 +425,10 @@ include_directories(BEFORE .)
417425
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
418426

419427
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
428+
# optimize linking
429+
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
430+
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF")
431+
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF")
420432
# remove warnings that f_open() is not save and f_open_s should be used
421433
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
422434
# disable min define to allow usage of std::min
@@ -560,3 +572,4 @@ else()
560572
# this rule is used if the install prefix is the build directory
561573
install(CODE "MESSAGE(\"xmr-stak installed to folder 'bin'\")")
562574
endif()
575+
# vim: et sw=4 sts=4 ts=4:

0 commit comments

Comments
 (0)