msvc.cmake 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. ## ======================================================================== ##
  2. ## Copyright 2009-2017 Intel Corporation ##
  3. ## ##
  4. ## Licensed under the Apache License, Version 2.0 (the "License"); ##
  5. ## you may not use this file except in compliance with the License. ##
  6. ## You may obtain a copy of the License at ##
  7. ## ##
  8. ## http://www.apache.org/licenses/LICENSE-2.0 ##
  9. ## ##
  10. ## Unless required by applicable law or agreed to in writing, software ##
  11. ## distributed under the License is distributed on an "AS IS" BASIS, ##
  12. ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ##
  13. ## See the License for the specific language governing permissions and ##
  14. ## limitations under the License. ##
  15. ## ======================================================================== ##
  16. # the /QxXXX flags are meant for the Intel Compiler, MSVC ignores them
  17. SET(FLAGS_SSE2 "/QxSSE2")
  18. SET(FLAGS_SSE3 "/QxSSE3")
  19. SET(FLAGS_SSSE3 "/QxSSSE3")
  20. SET(FLAGS_SSE41 "/DCONFIG_SSE41 /QxSSE4.1")
  21. SET(FLAGS_SSE42 "/DCONFIG_SSE42 /QxSSE4.2")
  22. SET(FLAGS_AVX "/arch:AVX /DCONFIG_AVX")
  23. # Intel Compiler 15, Update 1 unfortunately cannot handle /arch:AVX2
  24. IF (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
  25. SET(FLAGS_AVX2 "/DCONFIG_AVX2 /QxCORE-AVX2")
  26. SET(FLAGS_AVX512KNL "/DCONFIG_AVX512KNL /QxMIC-AVX512")
  27. SET(FLAGS_AVX512SKX "/DCONFIG_AVX512SKX /QxCORE-AVX512")
  28. ELSE()
  29. SET(FLAGS_AVX2 "/arch:AVX2 /DCONFIG_AVX2 /QxCORE-AVX2")
  30. SET(FLAGS_AVX512KNL "")
  31. SET(FLAGS_AVX512SKX "")
  32. ENDIF()
  33. SET(COMMON_CXX_FLAGS "/EHsc /MP /GR /GS-")
  34. IF (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
  35. SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /Qdiag-disable:11074 ") # remark #11074: Inlining inhibited by limit max-size
  36. SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /Qdiag-disable:11075 ") # remark #11075: To get full report use -Qopt-report:4 -Qopt-report-phase ipo
  37. ENDIF()
  38. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_CXX_FLAGS}")
  39. SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_CXX_FLAGS} /Ox /Oi /Gy /Qinline-max-total-size- /Qinline-factor=200 ")
  40. SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMMON_CXX_FLAGS} /Ox /Oi /Gy /Qinline-max-total-size- /Qinline-factor=200 ")
  41. SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG")
  42. IF (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
  43. SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /Qdiag-disable:11082 ") # warning #11082: locally defined symbol XXX imported
  44. ENDIF()
  45. SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4217") # locally defined symbol XXX imported in function YYY (happens as the ISPC API layer uses exported library functions)
  46. SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4049") # warning LNK4049: locally defined symbol _rtcOccluded1M imported
  47. SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG")
  48. # optionally use static runtime library
  49. OPTION(EMBREE_STATIC_RUNTIME "Use the static version of the C/C++ runtime library." ON)
  50. IF (EMBREE_STATIC_RUNTIME)
  51. STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
  52. STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
  53. STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
  54. ENDIF()
  55. # remove define NDEBUG and instead set define DEBUG for config RelWithDebInfo
  56. STRING(REPLACE "NDEBUG" "DEBUG" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})