18
18
"""
19
19
20
20
21
- def build_backend (l0_support = False ):
21
+ def build_backend (
22
+ l0_support = False , code_coverage = False , sycl_compiler_prefix = None
23
+ ):
22
24
import glob
23
25
import os
24
26
import shutil
@@ -35,13 +37,19 @@ def build_backend(l0_support=False):
35
37
else :
36
38
assert False , sys .platform + " not supported"
37
39
38
- CODE_COVERAGE = os .environ .get ("CODE_COVERAGE" )
39
- ONEAPI_ROOT = os .environ .get ("ONEAPI_ROOT" )
40
+ if sycl_compiler_prefix is None :
41
+ oneapi_root = os .getenv ("ONEAPI_ROOT" )
42
+ if IS_LIN :
43
+ DPCPP_ROOT = os .path .join (oneapi_root , r"compiler/latest/linux" )
44
+ elif IS_WIN :
45
+ DPCPP_ROOT = os .path .join (oneapi_root , r"compiler\latest\windows" )
46
+ else :
47
+ DPCPP_ROOT = os .path .join (sycl_compiler_prefix )
40
48
41
- if IS_LIN :
42
- DPCPP_ROOT = os . path . join ( ONEAPI_ROOT , r"compiler/latest/linux" )
43
- elif IS_WIN :
44
- DPCPP_ROOT = os . path . join ( ONEAPI_ROOT , r"compiler\latest\windows" )
49
+ if not os . path . isdir ( DPCPP_ROOT ) :
50
+ raise ValueError (
51
+ "SYCL compile prefix {} is not a directry" . format ( DPCPP_ROOT )
52
+ )
45
53
46
54
dpctl_dir = os .getcwd ()
47
55
build_cmake_dir = os .path .join (dpctl_dir , "build_cmake" )
@@ -71,45 +79,60 @@ def build_backend(l0_support=False):
71
79
ENABLE_LO_PROGRAM_CREATION = "ON" if l0_support else "OFF"
72
80
73
81
if IS_LIN :
74
- if CODE_COVERAGE :
75
- cmake_args = [
76
- "cmake" ,
77
- "-DCMAKE_BUILD_TYPE=Debug" ,
78
- "-DCMAKE_INSTALL_PREFIX=" + INSTALL_PREFIX ,
79
- "-DCMAKE_PREFIX_PATH=" + INSTALL_PREFIX ,
80
- "-DDPCPP_INSTALL_DIR=" + DPCPP_ROOT ,
82
+ if os .path .exists (os .path .join (DPCPP_ROOT , "bin" , "dpcpp" )):
83
+ cmake_compiler_args = [
81
84
"-DCMAKE_C_COMPILER:PATH="
82
85
+ os .path .join (DPCPP_ROOT , "bin" , "clang" ),
83
86
"-DCMAKE_CXX_COMPILER:PATH="
84
87
+ os .path .join (DPCPP_ROOT , "bin" , "dpcpp" ),
85
- "-DDPCTL_ENABLE_LO_PROGRAM_CREATION="
86
- + ENABLE_LO_PROGRAM_CREATION ,
87
- "-DDPCTL_BUILD_CAPI_TESTS=ON" ,
88
- "-DDPCTL_GENERATE_COVERAGE=ON" ,
89
- "-DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=" + dpctl_dir ,
90
- backends ,
91
88
]
89
+ else :
90
+ cmake_compiler_args = [
91
+ "-DDPCTL_CUSTOM_DPCPP_INSTALL_DIR=" + DPCPP_ROOT ,
92
+ "-DCMAKE_C_COMPILER:PATH="
93
+ + os .path .join (DPCPP_ROOT , "bin" , "clang" ),
94
+ "-DCMAKE_CXX_COMPILER:PATH="
95
+ + os .path .join (DPCPP_ROOT , "bin" , "clang++" ),
96
+ ]
97
+ if code_coverage :
98
+ cmake_args = (
99
+ [
100
+ "cmake" ,
101
+ "-DCMAKE_BUILD_TYPE=Debug" ,
102
+ "-DCMAKE_INSTALL_PREFIX=" + INSTALL_PREFIX ,
103
+ "-DCMAKE_PREFIX_PATH=" + INSTALL_PREFIX ,
104
+ ]
105
+ + cmake_compiler_args
106
+ + [
107
+ "-DDPCTL_ENABLE_LO_PROGRAM_CREATION="
108
+ + ENABLE_LO_PROGRAM_CREATION ,
109
+ "-DDPCTL_BUILD_CAPI_TESTS=ON" ,
110
+ "-DDPCTL_GENERATE_COVERAGE=ON" ,
111
+ "-DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=" + dpctl_dir ,
112
+ backends ,
113
+ ]
114
+ )
92
115
subprocess .check_call (
93
116
cmake_args , stderr = subprocess .STDOUT , shell = False
94
117
)
95
118
subprocess .check_call (["make" , "V=1" , "-j" , "4" ])
96
119
subprocess .check_call (["make" , "install" ])
97
120
subprocess .check_call (["make" , "lcov-genhtml" ])
98
121
else :
99
- cmake_args = [
100
- "cmake" ,
101
- "-DCMAKE_BUILD_TYPE=Release " ,
102
- "-DCMAKE_INSTALL_PREFIX=" + INSTALL_PREFIX ,
103
- "-DCMAKE_PREFIX_PATH =" + INSTALL_PREFIX ,
104
- "-DDPCPP_INSTALL_DIR =" + DPCPP_ROOT ,
105
- "-DCMAKE_C_COMPILER:PATH="
106
- + os . path . join ( DPCPP_ROOT , "bin" , "clang" ),
107
- "-DCMAKE_CXX_COMPILER:PATH="
108
- + os . path . join ( DPCPP_ROOT , "bin" , "dpcpp" ),
109
- "-DDPCTL_ENABLE_LO_PROGRAM_CREATION="
110
- + ENABLE_LO_PROGRAM_CREATION ,
111
- backends ,
112
- ]
122
+ cmake_args = (
123
+ [
124
+ "cmake " ,
125
+ "-DCMAKE_BUILD_TYPE=Release" ,
126
+ "-DCMAKE_INSTALL_PREFIX =" + INSTALL_PREFIX ,
127
+ "-DCMAKE_PREFIX_PATH =" + INSTALL_PREFIX ,
128
+ ]
129
+ + cmake_compiler_args
130
+ + [
131
+ "-DDPCTL_ENABLE_LO_PROGRAM_CREATION="
132
+ + ENABLE_LO_PROGRAM_CREATION ,
133
+ backends ,
134
+ ]
135
+ )
113
136
subprocess .check_call (
114
137
cmake_args , stderr = subprocess .STDOUT , shell = False
115
138
)
@@ -122,21 +145,37 @@ def build_backend(l0_support=False):
122
145
):
123
146
shutil .copy (file , os .path .join (dpctl_dir , "dpctl" ))
124
147
elif IS_WIN :
125
- cmake_args = [
126
- "cmake" ,
127
- "-G" ,
128
- "Ninja" ,
129
- "-DCMAKE_BUILD_TYPE=Release" ,
130
- "-DCMAKE_INSTALL_PREFIX=" + INSTALL_PREFIX ,
131
- "-DCMAKE_PREFIX_PATH=" + INSTALL_PREFIX ,
132
- "-DDPCPP_INSTALL_DIR=" + DPCPP_ROOT ,
133
- "-DCMAKE_C_COMPILER:PATH="
134
- + os .path .join (DPCPP_ROOT , "bin" , "clang-cl.exe" ),
135
- "-DCMAKE_CXX_COMPILER:PATH="
136
- + os .path .join (DPCPP_ROOT , "bin" , "dpcpp.exe" ),
137
- "-DDPCTL_ENABLE_LO_PROGRAM_CREATION=" + ENABLE_LO_PROGRAM_CREATION ,
138
- backends ,
139
- ]
148
+ if os .path .exists (os .path .join (DPCPP_ROOT , "bin" , "dpcpp.exe" )):
149
+ cmake_compiler_args = [
150
+ "-DCMAKE_C_COMPILER:PATH="
151
+ + os .path .join (DPCPP_ROOT , "bin" , "clang-cl.exe" ),
152
+ "-DCMAKE_CXX_COMPILER:PATH="
153
+ + os .path .join (DPCPP_ROOT , "bin" , "dpcpp.exe" ),
154
+ ]
155
+ else :
156
+ cmake_compiler_args = [
157
+ "-DDPCTL_CUSTOM_DPCPP_INSTALL_DIR=" + DPCPP_ROOT ,
158
+ "-DCMAKE_C_COMPILER:PATH="
159
+ + os .path .join (DPCPP_ROOT , "bin" , "clang-cl.exe" ),
160
+ "-DCMAKE_CXX_COMPILER:PATH="
161
+ + os .path .join (DPCPP_ROOT , "bin" , "clang++.exe" ),
162
+ ]
163
+ cmake_args = (
164
+ [
165
+ "cmake" ,
166
+ "-G" ,
167
+ "Ninja" ,
168
+ "-DCMAKE_BUILD_TYPE=Release" ,
169
+ "-DCMAKE_INSTALL_PREFIX=" + INSTALL_PREFIX ,
170
+ "-DCMAKE_PREFIX_PATH=" + INSTALL_PREFIX ,
171
+ ]
172
+ + cmake_compiler_args
173
+ + [
174
+ "-DDPCTL_ENABLE_LO_PROGRAM_CREATION="
175
+ + ENABLE_LO_PROGRAM_CREATION ,
176
+ backends ,
177
+ ]
178
+ )
140
179
subprocess .check_call (cmake_args , stderr = subprocess .STDOUT , shell = False )
141
180
subprocess .check_call (["ninja" , "-n" ])
142
181
subprocess .check_call (["ninja" , "install" ])
0 commit comments