Updated CxxProject

This commit is contained in:
kobalicek
2017-08-08 20:15:41 +02:00
parent 63d1c228d7
commit cec9f76fc7

View File

@@ -15,7 +15,7 @@ if (NOT __CXX_INCLUDED)
set(out_array ${${out}}) set(out_array ${${out}})
foreach(flag ${ARGN}) foreach(flag ${ARGN})
string(REGEX REPLACE "[-=:;/.]" "_" flag_signature "${flag}") string(REGEX REPLACE "[-=:;/.\+]" "_" flag_signature "${flag}")
check_cxx_compiler_flag(${flag} "__CxxFlag_${flag_signature}") check_cxx_compiler_flag(${flag} "__CxxFlag_${flag_signature}")
if(${__CxxFlag_${flag_signature}}) if(${__CxxFlag_${flag_signature}})
list(APPEND out_array "${flag}") list(APPEND out_array "${flag}")
@@ -76,41 +76,28 @@ if (NOT __CXX_INCLUDED)
set(CXX_DEFINE "/D") set(CXX_DEFINE "/D")
set(CXX_INCLUDE "/I") set(CXX_INCLUDE "/I")
if(CMAKE_CL_64) # 64-bit MSVC compiler doesn't like /arch:SSE[2] as it's implicit.
# 64-bit MSVC compiler doesn't like /arch:SSE[2] as it's implicit. if(NOT CMAKE_CL_64)
list(APPEND CXX_CFLAGS_SSE "${CXX_DEFINE}__SSE__=1") list(APPEND CXX_CFLAGS_SSE "/arch:SSE")
list(APPEND CXX_CFLAGS_SSE2 "${CXX_DEFINE}__SSE__=1;${CXX_DEFINE}__SSE2__=1") list(APPEND CXX_CFLAGS_SSE2 "/arch:SSE2")
else() list(APPEND CXX_CFLAGS_SSE3 "/arch:SSE2")
cxx_detect_cflags(CXX_CFLAGS_SSE "/arch:SSE") list(APPEND CXX_CFLAGS_SSSE3 "/arch:SSE2")
if(CXX_CFLAGS_SSE) list(APPEND CXX_CFLAGS_SSE4_1 "/arch:SSE2")
list(APPEND CXX_CFLAGS_SSE "${CXX_DEFINE}__SSE__=1") list(APPEND CXX_CFLAGS_SSE4_2 "/arch:SSE2")
endif()
cxx_detect_cflags(CXX_CFLAGS_SSE2 "/arch:SSE2")
if(CXX_CFLAGS_SSE2)
list(APPEND CXX_CFLAGS_SSE2 "${CXX_DEFINE}__SSE__=1;${CXX_DEFINE}__SSE2__=1")
endif()
endif() endif()
# MSVC doesn't provide any preprocessor definitions to detect SSE3+, # MSVC doesn't provide any preprocessor definitions to detect SSE3+,
# these unify MSVC with definitions defined by Clang|GCC|Intel. # these unify MSVC with definitions defined by Intel|Clang|GCC.
if(CXX_CFLAGS_SSE2) list(APPEND CXX_CFLAGS_SSE "${CXX_DEFINE}__SSE__")
list(APPEND CXX_CFLAGS_SSE3 "${CXX_CFLAGS_SSE2};${CXX_DEFINE}__SSE3__=1") list(APPEND CXX_CFLAGS_SSE2 "${CXX_DEFINE}__SSE2__")
list(APPEND CXX_CFLAGS_SSSE3 "${CXX_CFLAGS_SSE3};${CXX_DEFINE}__SSSE3__=1") list(APPEND CXX_CFLAGS_SSE3 "${CXX_DEFINE}__SSE3__")
list(APPEND CXX_CFLAGS_SSE4_1 "${CXX_CFLAGS_SSSE3};${CXX_DEFINE}__SSE4_1__=1") list(APPEND CXX_CFLAGS_SSSE3 "${CXX_DEFINE}__SSSE3__")
list(APPEND CXX_CFLAGS_SSE4_2 "${CXX_CFLAGS_SSE4_1};${CXX_DEFINE}__SSE4_2__=1") list(APPEND CXX_CFLAGS_SSE4_1 "${CXX_DEFINE}__SSE4_1__")
endif() list(APPEND CXX_CFLAGS_SSE4_2 "${CXX_DEFINE}__SSE4_2__")
# When using AVX and AVX2 MSVC does define '__AVX__' and '__AVX2__', respectively. # AVX/AVX2 doesn't need custom defs as MSVC does define __AVX[2]__ by itself.
cxx_detect_cflags(CXX_CFLAGS_AVX "/arch:AVX") cxx_detect_cflags(CXX_CFLAGS_AVX "/arch:AVX")
cxx_detect_cflags(CXX_CFLAGS_AVX2 "/arch:AVX2") cxx_detect_cflags(CXX_CFLAGS_AVX2 "/arch:AVX2")
if(CXX_CFLAGS_AVX)
list(APPEND CXX_CFLAGS_AVX "${CXX_DEFINE}__SSE__=1;${CXX_DEFINE}__SSE2__=1;${CXX_DEFINE}__SSE3__=1;${CXX_DEFINE}__SSSE3__=1;${CXX_DEFINE}__SSE4_1__=1;${CXX_DEFINE}__SSE4_2__=1")
endif()
if(CXX_CFLAGS_AVX2)
list(APPEND CXX_CFLAGS_AVX2 "${CXX_DEFINE}__SSE__=1;${CXX_DEFINE}__SSE2__=1;${CXX_DEFINE}__SSE3__=1;${CXX_DEFINE}__SSSE3__=1;${CXX_DEFINE}__SSE4_1__=1;${CXX_DEFINE}__SSE4_2__=1")
endif()
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND WIN32) elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND WIN32)
# Intel on Windows uses CL syntax. # Intel on Windows uses CL syntax.
set(CXX_DEFINE "/D") set(CXX_DEFINE "/D")
@@ -272,8 +259,14 @@ if (NOT __CXX_INCLUDED)
list(APPEND src_cflags ${CXX_CFLAGS_AVX2}) list(APPEND src_cflags ${CXX_CFLAGS_AVX2})
endif() endif()
# HACK: Setting `COMPILE_FLAGS` property cannot be used when your input
# is LIST, even when you use `VALUE1 VALUE2 ...` as cmake would insert
# escaped semicolons instead of spaces. So let's make it the cmake way:
# - nonituitive, verbose, and idiotic.
if(NOT "${src_cflags}" STREQUAL "") if(NOT "${src_cflags}" STREQUAL "")
set_source_files_properties(${src_file} PROPERTIES COMPILE_FLAGS ${src_cflags}) foreach(src_cflag ${src_cflags})
set_property(SOURCE "${src_file}" APPEND_STRING PROPERTY COMPILE_FLAGS " ${src_cflag}")
endforeach()
endif() endif()
endif() endif()
list(APPEND src_array ${src_file}) list(APPEND src_array ${src_file})
@@ -310,9 +303,9 @@ if (NOT __CXX_INCLUDED)
endif() endif()
if(NOT ${PRODUCT}_STATIC) if(NOT ${PRODUCT}_STATIC)
install(TARGETS ${target} LIBRARY DESTINATION lib${LIB_SUFFIX} install(TARGETS ${target} RUNTIME DESTINATION "bin"
ARCHIVE DESTINATION lib${LIB_SUFFIX} LIBRARY DESTINATION "lib${LIB_SUFFIX}"
RUNTIME DESTINATION bin) ARCHIVE DESTINATION "lib${LIB_SUFFIX}")
endif() endif()
endfunction() endfunction()