mesytec-mnode/external/taskflow-3.8.0/cmake/ComputeCpp/Modules/ComputeCppCompilerChecks.cmake
2025-01-04 01:25:05 +01:00

65 lines
2.8 KiB
CMake

cmake_minimum_required(VERSION 3.4.3)
if(CMAKE_COMPILER_IS_GNUCXX)
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
message(FATAL_ERROR "host compiler - gcc version must be > 4.8")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.6)
message(FATAL_ERROR "host compiler - clang version must be > 3.6")
endif()
endif()
if(MSVC)
set(ComputeCpp_STL_CHECK_SRC __STL_check)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
"#include <CL/sycl.hpp> \n"
"int main() { return 0; }\n")
set(_stl_test_command ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}
-sycl
${COMPUTECPP_DEVICE_COMPILER_FLAGS}
-isystem ${ComputeCpp_INCLUDE_DIRS}
-isystem ${OpenCL_INCLUDE_DIRS}
-o ${ComputeCpp_STL_CHECK_SRC}.sycl
-c ${ComputeCpp_STL_CHECK_SRC}.cpp)
execute_process(
COMMAND ${_stl_test_command}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
ERROR_QUIET
OUTPUT_QUIET)
if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
# Try disabling compiler version checks
execute_process(
COMMAND ${_stl_test_command}
-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
ERROR_QUIET
OUTPUT_QUIET)
if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
# Try again with __CUDACC__ and _HAS_CONDITIONAL_EXPLICIT=0. This relaxes the restritions in the MSVC headers
execute_process(
COMMAND ${_stl_test_command}
-D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
-D_HAS_CONDITIONAL_EXPLICIT=0
-D__CUDACC__
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
RESULT_VARIABLE ComputeCpp_STL_CHECK_RESULT
ERROR_QUIET
OUTPUT_QUIET)
if(NOT ${ComputeCpp_STL_CHECK_RESULT} EQUAL 0)
message(FATAL_ERROR "compute++ cannot consume hosted STL headers. This means that compute++ can't \
compile a simple program in this platform and will fail when used in this system.")
else()
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH
-D_HAS_CONDITIONAL_EXPLICIT=0
-D__CUDACC__)
endif()
else()
list(APPEND COMPUTECPP_DEVICE_COMPILER_FLAGS -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH)
endif()
endif()
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp
${CMAKE_CURRENT_BINARY_DIR}/${ComputeCpp_STL_CHECK_SRC}.cpp.sycl)
endif(MSVC)