ComputeCppCompilerChecks.cmake 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. cmake_minimum_required(VERSION 3.4.3)
  2. if(CMAKE_COMPILER_IS_GNUCXX)
  3. if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
  4. message(FATAL_ERROR "host compiler - gcc version must be > 4.8")
  5. endif()
  6. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  7. if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.6)
  8. message(FATAL_ERROR "host compiler - clang version must be > 3.6")
  9. endif()
  10. endif()
  11. if(MSVC)
  12. set(ComputeCpp_STL_CHECK_SRC __STL_check)
  13. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
  14. "#include <ios>\n"
  15. "int main() { return 0; }\n")
  16. execute_process(
  17. COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
  18. ${COMPUTECPP_DEVICE_COMPILER_FLAGS}
  19. -isystem ${ComputeCpp_INCLUDE_DIRS}
  20. -o ${ComputeCpp_STL_CHECK_SRC}.sycl
  21. -c ${ComputeCpp_STL_CHECK_SRC}.cpp
  22. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  23. RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
  24. ERROR_QUIET
  25. OUTPUT_QUIET)
  26. if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
  27. # Try disabling compiler version checks
  28. execute_process(
  29. COMMAND ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
  30. ${COMPUTECPP_DEVICE_COMPILER_FLAGS}
  31. -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
  32. -isystem ${ComputeCpp_INCLUDE_DIRS}
  33. -o ${ComputeCpp_STL_CHECK_SRC}.cpp.sycl
  34. -c ${ComputeCpp_STL_CHECK_SRC}.cpp
  35. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  36. RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
  37. ERROR_QUIET
  38. OUTPUT_QUIET)
  39. if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
  40. message(STATUS "Device compiler cannot consume hosted STL headers. Using any parts of the STL will likely result in device compiler errors.")
  41. else()
  42. message(STATUS "Device compiler does not meet certain STL version requirements. Disabling version checks and hoping for the best.")
  43. list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH)
  44. endif()
  45. endif()
  46. file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
  47. ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp.sycl)
  48. endif(MSVC)