|
1 | 1 | # Setup building flags for SYCL device and host codes.
|
2 | 2 |
|
| 3 | +function(CHECK_SYCL_FLAG FLAG VARIABLE_NAME) |
| 4 | + set(TEMP_DIR "${CMAKE_BINARY_DIR}/temp") |
| 5 | + file(MAKE_DIRECTORY ${TEMP_DIR}) |
| 6 | + set(TEST_SRC_FILE "${TEMP_DIR}/check_options.cpp") |
| 7 | + set(TEST_EXE_FILE "${TEMP_DIR}/check_options.out") |
| 8 | + file(WRITE ${TEST_SRC_FILE} "#include <iostream>\nint main() { std::cout << \"Checking compiler options ...\" << std::endl; return 0; }\n") |
| 9 | + execute_process( |
| 10 | + COMMAND ${SYCL_COMPILER} -fsycl ${TEST_SRC_FILE} -o ${TEST_EXE_FILE} ${FLAG} |
| 11 | + WORKING_DIRECTORY ${TEMP_DIR} |
| 12 | + OUTPUT_VARIABLE output |
| 13 | + ERROR_VARIABLE output |
| 14 | + RESULT_VARIABLE result |
| 15 | + TIMEOUT 60 |
| 16 | + ) |
| 17 | + if(result EQUAL 0) |
| 18 | + set(${VARIABLE_NAME} TRUE PARENT_SCOPE) |
| 19 | + else() |
| 20 | + set(${VARIABLE_NAME} FALSE PARENT_SCOPE) |
| 21 | + endif() |
| 22 | + file(REMOVE_RECURSE ${TEMP_DIR}) |
| 23 | +endfunction() |
| 24 | + |
3 | 25 | # Support GCC on Linux and MSVC on Windows at the moment.
|
4 | 26 | if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
5 | 27 | # # -- Host flags (SYCL_CXX_FLAGS)
|
@@ -64,8 +86,16 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "MSVC"
|
64 | 86 | set(SYCL_KERNEL_OPTIONS ${SYCL_KERNEL_OPTIONS} -D_GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI})
|
65 | 87 | endif()
|
66 | 88 |
|
67 |
| - set(SYCL_KERNEL_OPTIONS ${SYCL_KERNEL_OPTIONS} -fsycl-fp64-conv-emu) |
68 |
| - |
| 89 | + CHECK_SYCL_FLAG("-fsycl-fp64-conv-emu" SUPPORTS_FP64_CONV_EMU) |
| 90 | + if(SUPPORTS_FP64_CONV_EMU) |
| 91 | + set(SYCL_KERNEL_OPTIONS ${SYCL_KERNEL_OPTIONS} -fsycl-fp64-conv-emu) |
| 92 | + else() |
| 93 | + message(WARNING "The compiler does not support the '-fsycl-fp64-conv-emu' flag, \ |
| 94 | + will disable it. On some platforms that don't support FP64, \ |
| 95 | + running operations with the FP64 datatype will raise a Runtime error: Required aspect fp64 is not supported on the device \ |
| 96 | + or a Native API failed error.") |
| 97 | + endif() |
| 98 | + |
69 | 99 | set(SYCL_FLAGS ${SYCL_FLAGS} ${SYCL_KERNEL_OPTIONS})
|
70 | 100 |
|
71 | 101 | set(TORCH_XPU_OPS_FLAGS ${SYCL_HOST_FLAGS})
|
|
0 commit comments