5
5
import platform
6
6
7
7
# TODO:
8
- # 1. Add support for relative paths (e.g. relative path to source directory)
8
+ # 1. Make all required options optional
9
9
# 2. Create obj_dir from the script if it doesn't exist
10
10
11
11
def do_configure (args ):
12
12
ret = False
13
13
14
- llvm_dir = os .path .join (args .src_dir , "llvm" )
15
- sycl_dir = os .path .join (args .src_dir , "sycl" )
16
- spirv_dir = os .path .join (args .src_dir , "llvm-spirv" )
17
- xpti_dir = os .path .join (args .src_dir , "xpti" )
18
- libdevice_dir = os .path .join (args .src_dir , "libdevice" )
19
- ocl_header_dir = os .path .join (args .obj_dir , "OpenCL-Headers" )
20
- icd_loader_lib = os .path .join (args .obj_dir , "OpenCL-ICD-Loader" , "build" )
14
+ # Get absolute paths
15
+ abs_src_dir = os .path .abspath (args .src_dir )
16
+ abs_obj_dir = os .path .abspath (args .obj_dir )
17
+
18
+ llvm_dir = os .path .join (abs_src_dir , "llvm" )
19
+ sycl_dir = os .path .join (abs_src_dir , "sycl" )
20
+ spirv_dir = os .path .join (abs_src_dir , "llvm-spirv" )
21
+ xpti_dir = os .path .join (abs_src_dir , "xpti" )
22
+ libdevice_dir = os .path .join (abs_src_dir , "libdevice" )
23
+ ocl_header_dir = os .path .join (abs_obj_dir , "OpenCL-Headers" )
24
+ icd_loader_lib = os .path .join (abs_obj_dir , "OpenCL-ICD-Loader" , "build" )
21
25
llvm_targets_to_build = 'X86'
22
26
llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti;libdevice'
23
27
libclc_targets_to_build = ''
24
28
sycl_build_pi_cuda = 'OFF'
29
+ sycl_werror = 'ON'
25
30
llvm_enable_assertions = 'ON'
26
31
llvm_enable_doxygen = 'OFF'
27
32
llvm_enable_sphinx = 'OFF'
@@ -38,8 +43,11 @@ def do_configure(args):
38
43
libclc_targets_to_build = 'nvptx64--;nvptx64--nvidiacl'
39
44
sycl_build_pi_cuda = 'ON'
40
45
41
- if args .assertions :
42
- llvm_enable_assertions = 'ON'
46
+ if args .no_werror :
47
+ sycl_werror = 'OFF'
48
+
49
+ if args .no_assertions :
50
+ llvm_enable_assertions = 'OFF'
43
51
44
52
if args .docs :
45
53
llvm_enable_doxygen = 'ON'
@@ -48,7 +56,7 @@ def do_configure(args):
48
56
if args .shared_libs :
49
57
llvm_build_shared_libs = 'ON'
50
58
51
- install_dir = os .path .join (args . obj_dir , "install" )
59
+ install_dir = os .path .join (abs_obj_dir , "install" )
52
60
53
61
cmake_cmd = [
54
62
"cmake" ,
@@ -65,31 +73,36 @@ def do_configure(args):
65
73
"-DLIBCLC_TARGETS_TO_BUILD={}" .format (libclc_targets_to_build ),
66
74
"-DSYCL_BUILD_PI_CUDA={}" .format (sycl_build_pi_cuda ),
67
75
"-DLLVM_BUILD_TOOLS=ON" ,
68
- "-DSYCL_ENABLE_WERROR=ON" ,
76
+ "-DSYCL_ENABLE_WERROR={}" . format ( sycl_werror ) ,
69
77
"-DCMAKE_INSTALL_PREFIX={}" .format (install_dir ),
70
78
"-DSYCL_INCLUDE_TESTS=ON" , # Explicitly include all kinds of SYCL tests.
71
79
"-DLLVM_ENABLE_DOXYGEN={}" .format (llvm_enable_doxygen ),
72
80
"-DLLVM_ENABLE_SPHINX={}" .format (llvm_enable_sphinx ),
73
81
"-DBUILD_SHARED_LIBS={}" .format (llvm_build_shared_libs ),
74
- "-DSYCL_ENABLE_XPTI_TRACING=ON" , # Explicitly turn on XPTI tracing
75
- "{}" .format (args .cmake_opts ),
76
- llvm_dir
82
+ "-DSYCL_ENABLE_XPTI_TRACING=ON" # Explicitly turn on XPTI tracing
77
83
]
78
84
79
- if not args .no_ocl :
85
+ if args .system_ocl :
80
86
cmake_cmd .extend ([
81
87
"-DOpenCL_INCLUDE_DIR={}" .format (ocl_header_dir ),
82
88
"-DOpenCL_LIBRARY={}" .format (icd_loader_lib )])
83
89
90
+ # Add additional CMake options if provided
91
+ if args .cmake_opt :
92
+ cmake_cmd += args .cmake_opt
93
+
94
+ # Add path to root CMakeLists.txt
95
+ cmake_cmd .append (llvm_dir )
96
+
84
97
print (cmake_cmd )
85
98
86
99
try :
87
- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
100
+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
88
101
except subprocess .CalledProcessError :
89
- cmake_cache = os .path .join (args . obj_dir , "CMakeCache.txt" )
102
+ cmake_cache = os .path .join (abs_obj_dir , "CMakeCache.txt" )
90
103
if os .path .isfile (cmake_cache ):
91
104
os .remove (cmake_cache )
92
- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
105
+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
93
106
94
107
ret = True
95
108
return ret
@@ -109,11 +122,12 @@ def main():
109
122
parser .add_argument ("-t" , "--build-type" ,
110
123
metavar = "BUILD_TYPE" , required = True , help = "build type, debug or release" )
111
124
parser .add_argument ("--cuda" , action = 'store_true' , help = "switch from OpenCL to CUDA" )
112
- parser .add_argument ("--assertions" , action = 'store_true' , help = "build with assertions" )
125
+ parser .add_argument ("--no- assertions" , action = 'store_true' , help = "build without assertions" )
113
126
parser .add_argument ("--docs" , action = 'store_true' , help = "build Doxygen documentation" )
114
- parser .add_argument ("--no-ocl" , action = 'store_true' , help = "download OpenCL deps via CMake" )
127
+ parser .add_argument ("--system-ocl" , action = 'store_true' , help = "use OpenCL deps from system (no download)" )
128
+ parser .add_argument ("--no-werror" , action = 'store_true' , help = "Don't treat warnings as errors" )
115
129
parser .add_argument ("--shared-libs" , action = 'store_true' , help = "Build shared libraries" )
116
- parser .add_argument ("--cmake-opts " , metavar = "CMAKE_OPTS" , help = "Additional CMake options not configured via script parameters" )
130
+ parser .add_argument ("--cmake-opt " , action = 'append' , help = "Additional CMake option not configured via script parameters" )
117
131
118
132
args = parser .parse_args ()
119
133
0 commit comments