Skip to content

Commit efb2b64

Browse files
committed
Add Intel ICC 18 detection/support to CMakeLists.txt
1 parent 35377a4 commit efb2b64

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

CMakeLists.txt

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
2828
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
2929
message(FATAL_ERROR "g++ version must be at least 5.1!")
3030
endif()
31+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
32+
include_directories(BEFORE "/opt/intel/include")
33+
add_definitions(-D__PURE_INTEL_C99_HEADERS__)
34+
link_directories(BEFORE "/opt/intel/lib")
35+
if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 17) AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19))
36+
# locate best gcc version to pass to icc-18 (gcc-8 doesn't work, for example)
37+
# Use -DICC_GCCVER=6 for example to force 'gcc-6' and 'g++-6'
38+
# Otherwise, the newest available and compatible pair will be selected
39+
find_program(ICC_GXX NAMES "g++-${ICC_GCCVER}" "g++-7" "g++-6" "g++")
40+
get_filename_component(ICC_GXX ${ICC_GXX} NAME)
41+
find_program(ICC_GCC NAMES "gcc-${ICC_GCCVER}" "gcc-7" "gcc-6" "gcc")
42+
get_filename_component(ICC_GCC ${ICC_GCC} NAME)
43+
set(ICC_COMPILERS "-gxx-name=${ICC_GXX} -gcc-name=${ICC_GCC}")
44+
unset(ICC_GXX)
45+
unset(ICC_GCC)
46+
endif()
47+
message(STATUS "Intel ICC-18 subcompiler flags: ${ICC_COMPILERS}")
48+
set(CMAKE_CXX_FLAGS "-O3 -no-prec-div -fp-model fast=2 -std=gnu++11 ${ICC_COMPILERS}")
49+
set(CMAKE_C_FLAGS "-O3 -no-prec-div -fp-model fast=2 -std=gnu99 ${ICC_COMPILERS}")
3150
endif()
3251

3352
set(BUILD_TYPE "Release;Debug")
@@ -39,7 +58,11 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${BUILD_TYPE}")
3958
set(XMR-STAK_COMPILE "native" CACHE STRING "select CPU compute architecture")
4059
set_property(CACHE XMR-STAK_COMPILE PROPERTY STRINGS "native;generic")
4160
if(XMR-STAK_COMPILE STREQUAL "native")
42-
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
61+
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
62+
# activate Intel Compiler options: optimize for current host CPU
63+
set(CMAKE_CXX_FLAGS "-xHOST ${CMAKE_CXX_FLAGS}")
64+
set(CMAKE_C_FLAGS "-xHOST ${CMAKE_C_FLAGS}")
65+
elseif(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
4366
set(CMAKE_CXX_FLAGS "-march=native -mtune=native ${CMAKE_CXX_FLAGS}")
4467
set(CMAKE_C_FLAGS "-march=native -mtune=native ${CMAKE_C_FLAGS}")
4568
endif()
@@ -421,7 +444,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
421444
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
422445
# disable min define to allow usage of std::min
423446
add_definitions(-DNOMINMAX)
424-
else()
447+
elseif(NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel")
425448
# activate sse2 and aes-ni
426449
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -maes")
427450
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -maes")
@@ -442,6 +465,8 @@ if(CMAKE_LINK_STATIC)
442465
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
443466
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
444467
set(LIBS "-static-libgcc -static-libstdc++ ${LIBS}")
468+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
469+
set(LIBS "-static-libgcc -static-libstdc++ -static-intel ${LIBS}")
445470
endif()
446471
endif()
447472

0 commit comments

Comments
 (0)