xref: /aosp_15_r20/external/pytorch/cmake/Modules/FindSYCLToolkit.cmake (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# This will define the following variables:
2*da0073e9SAndroid Build Coastguard Worker# SYCL_FOUND               : True if the system has the SYCL library.
3*da0073e9SAndroid Build Coastguard Worker# SYCL_INCLUDE_DIR         : Include directories needed to use SYCL.
4*da0073e9SAndroid Build Coastguard Worker# SYCL_LIBRARY_DIR         :The path to the SYCL library.
5*da0073e9SAndroid Build Coastguard Worker# SYCL_LIBRARY             : SYCL library fullname.
6*da0073e9SAndroid Build Coastguard Worker
7*da0073e9SAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs)
8*da0073e9SAndroid Build Coastguard Worker
9*da0073e9SAndroid Build Coastguard Workerset(SYCL_ROOT "")
10*da0073e9SAndroid Build Coastguard Workerif(DEFINED ENV{SYCL_ROOT})
11*da0073e9SAndroid Build Coastguard Worker  set(SYCL_ROOT $ENV{SYCL_ROOT})
12*da0073e9SAndroid Build Coastguard Workerelseif(DEFINED ENV{CMPLR_ROOT})
13*da0073e9SAndroid Build Coastguard Worker  set(SYCL_ROOT $ENV{CMPLR_ROOT})
14*da0073e9SAndroid Build Coastguard Workerendif()
15*da0073e9SAndroid Build Coastguard Worker
16*da0073e9SAndroid Build Coastguard Workerstring(COMPARE EQUAL "${SYCL_ROOT}" "" nosyclfound)
17*da0073e9SAndroid Build Coastguard Workerif(nosyclfound)
18*da0073e9SAndroid Build Coastguard Worker  set(SYCL_FOUND False)
19*da0073e9SAndroid Build Coastguard Worker  set(SYCL_REASON_FAILURE "SYCL library not set!!")
20*da0073e9SAndroid Build Coastguard Worker  set(SYCL_NOT_FOUND_MESSAGE "${SYCL_REASON_FAILURE}")
21*da0073e9SAndroid Build Coastguard Worker  return()
22*da0073e9SAndroid Build Coastguard Workerendif()
23*da0073e9SAndroid Build Coastguard Worker
24*da0073e9SAndroid Build Coastguard Worker# Find include path from binary.
25*da0073e9SAndroid Build Coastguard Workerfind_file(
26*da0073e9SAndroid Build Coastguard Worker  SYCL_INCLUDE_DIR
27*da0073e9SAndroid Build Coastguard Worker  NAMES include
28*da0073e9SAndroid Build Coastguard Worker  HINTS ${SYCL_ROOT}
29*da0073e9SAndroid Build Coastguard Worker  NO_DEFAULT_PATH
30*da0073e9SAndroid Build Coastguard Worker  )
31*da0073e9SAndroid Build Coastguard Worker
32*da0073e9SAndroid Build Coastguard Worker# Find include/sycl path from include path.
33*da0073e9SAndroid Build Coastguard Workerfind_file(
34*da0073e9SAndroid Build Coastguard Worker  SYCL_INCLUDE_SYCL_DIR
35*da0073e9SAndroid Build Coastguard Worker  NAMES sycl
36*da0073e9SAndroid Build Coastguard Worker  HINTS ${SYCL_ROOT}/include/
37*da0073e9SAndroid Build Coastguard Worker  NO_DEFAULT_PATH
38*da0073e9SAndroid Build Coastguard Worker  )
39*da0073e9SAndroid Build Coastguard Worker
40*da0073e9SAndroid Build Coastguard Worker# Due to the unrecognized compilation option `-fsycl` in other compiler.
41*da0073e9SAndroid Build Coastguard Workerlist(APPEND SYCL_INCLUDE_DIR ${SYCL_INCLUDE_SYCL_DIR})
42*da0073e9SAndroid Build Coastguard Worker
43*da0073e9SAndroid Build Coastguard Worker# Find library directory from binary.
44*da0073e9SAndroid Build Coastguard Workerfind_file(
45*da0073e9SAndroid Build Coastguard Worker  SYCL_LIBRARY_DIR
46*da0073e9SAndroid Build Coastguard Worker  NAMES lib lib64
47*da0073e9SAndroid Build Coastguard Worker  HINTS ${SYCL_ROOT}
48*da0073e9SAndroid Build Coastguard Worker  NO_DEFAULT_PATH
49*da0073e9SAndroid Build Coastguard Worker  )
50*da0073e9SAndroid Build Coastguard Worker
51*da0073e9SAndroid Build Coastguard Worker# Find SYCL library fullname.
52*da0073e9SAndroid Build Coastguard Workerif(LINUX)
53*da0073e9SAndroid Build Coastguard Worker  find_library(
54*da0073e9SAndroid Build Coastguard Worker    SYCL_LIBRARY
55*da0073e9SAndroid Build Coastguard Worker    NAMES sycl-preview
56*da0073e9SAndroid Build Coastguard Worker    HINTS ${SYCL_LIBRARY_DIR}
57*da0073e9SAndroid Build Coastguard Worker    NO_DEFAULT_PATH
58*da0073e9SAndroid Build Coastguard Worker  )
59*da0073e9SAndroid Build Coastguard Workerendif()
60*da0073e9SAndroid Build Coastguard Worker# On Windows, currently there's no sycl.lib. Only sycl7.lib with version suffix,
61*da0073e9SAndroid Build Coastguard Worker# where the current version of the SYCL runtime is 7.
62*da0073e9SAndroid Build Coastguard Worker# Until oneAPI adds support to sycl.lib without the version suffix,
63*da0073e9SAndroid Build Coastguard Worker# sycl_runtime_version needs to be hardcoded and uplifted when SYCL runtime version uplifts.
64*da0073e9SAndroid Build Coastguard Worker# TODO: remove this when sycl.lib is supported on Windows
65*da0073e9SAndroid Build Coastguard Workerif(WIN32)
66*da0073e9SAndroid Build Coastguard Worker  set(sycl_runtime_version 7)
67*da0073e9SAndroid Build Coastguard Worker  find_library(
68*da0073e9SAndroid Build Coastguard Worker    SYCL_LIBRARY
69*da0073e9SAndroid Build Coastguard Worker    NAMES "sycl${sycl_runtime_version}"
70*da0073e9SAndroid Build Coastguard Worker    HINTS ${SYCL_LIBRARY_DIR}
71*da0073e9SAndroid Build Coastguard Worker    NO_DEFAULT_PATH
72*da0073e9SAndroid Build Coastguard Worker  )
73*da0073e9SAndroid Build Coastguard Worker  if(SYCL_LIBRARY STREQUAL "SYCL_LIBRARY-NOTFOUND")
74*da0073e9SAndroid Build Coastguard Worker    message(FATAL_ERROR "Cannot find a SYCL library on Windows")
75*da0073e9SAndroid Build Coastguard Worker  endif()
76*da0073e9SAndroid Build Coastguard Workerendif()
77*da0073e9SAndroid Build Coastguard Worker
78*da0073e9SAndroid Build Coastguard Workerfind_library(
79*da0073e9SAndroid Build Coastguard Worker  OCL_LIBRARY
80*da0073e9SAndroid Build Coastguard Worker  NAMES OpenCL
81*da0073e9SAndroid Build Coastguard Worker  HINTS ${SYCL_LIBRARY_DIR}
82*da0073e9SAndroid Build Coastguard Worker  NO_DEFAULT_PATH
83*da0073e9SAndroid Build Coastguard Worker)
84*da0073e9SAndroid Build Coastguard Worker
85*da0073e9SAndroid Build Coastguard Workerif((NOT SYCL_INCLUDE_DIR) OR (NOT SYCL_LIBRARY_DIR) OR (NOT SYCL_LIBRARY))
86*da0073e9SAndroid Build Coastguard Worker  set(SYCL_FOUND False)
87*da0073e9SAndroid Build Coastguard Worker  set(SYCL_REASON_FAILURE "SYCL library is incomplete!!")
88*da0073e9SAndroid Build Coastguard Worker  set(SYCL_NOT_FOUND_MESSAGE "${SYCL_REASON_FAILURE}")
89*da0073e9SAndroid Build Coastguard Worker  return()
90*da0073e9SAndroid Build Coastguard Workerendif()
91*da0073e9SAndroid Build Coastguard Worker
92*da0073e9SAndroid Build Coastguard Workerfind_package_handle_standard_args(
93*da0073e9SAndroid Build Coastguard Worker  SYCL
94*da0073e9SAndroid Build Coastguard Worker  FOUND_VAR SYCL_FOUND
95*da0073e9SAndroid Build Coastguard Worker  REQUIRED_VARS SYCL_INCLUDE_DIR SYCL_LIBRARY_DIR SYCL_LIBRARY
96*da0073e9SAndroid Build Coastguard Worker  REASON_FAILURE_MESSAGE "${SYCL_REASON_FAILURE}")
97