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 = ''
@@ -48,7 +52,7 @@ def do_configure(args):
48
52
if args .shared_libs :
49
53
llvm_build_shared_libs = 'ON'
50
54
51
- install_dir = os .path .join (args . obj_dir , "install" )
55
+ install_dir = os .path .join (abs_obj_dir , "install" )
52
56
53
57
cmake_cmd = [
54
58
"cmake" ,
@@ -71,25 +75,30 @@ def do_configure(args):
71
75
"-DLLVM_ENABLE_DOXYGEN={}" .format (llvm_enable_doxygen ),
72
76
"-DLLVM_ENABLE_SPHINX={}" .format (llvm_enable_sphinx ),
73
77
"-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
78
+ "-DSYCL_ENABLE_XPTI_TRACING=ON" # Explicitly turn on XPTI tracing
77
79
]
78
80
79
81
if not args .no_ocl :
80
82
cmake_cmd .extend ([
81
83
"-DOpenCL_INCLUDE_DIR={}" .format (ocl_header_dir ),
82
84
"-DOpenCL_LIBRARY={}" .format (icd_loader_lib )])
83
85
86
+ # Add additional CMake options if provided
87
+ if args .cmake_opt :
88
+ cmake_cmd += args .cmake_opt
89
+
90
+ # Add path to root CMakeLists.txt
91
+ cmake_cmd .append (llvm_dir )
92
+
84
93
print (cmake_cmd )
85
94
86
95
try :
87
- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
96
+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
88
97
except subprocess .CalledProcessError :
89
- cmake_cache = os .path .join (args . obj_dir , "CMakeCache.txt" )
98
+ cmake_cache = os .path .join (abs_obj_dir , "CMakeCache.txt" )
90
99
if os .path .isfile (cmake_cache ):
91
100
os .remove (cmake_cache )
92
- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
101
+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
93
102
94
103
ret = True
95
104
return ret
@@ -113,7 +122,7 @@ def main():
113
122
parser .add_argument ("--docs" , action = 'store_true' , help = "build Doxygen documentation" )
114
123
parser .add_argument ("--no-ocl" , action = 'store_true' , help = "download OpenCL deps via CMake" )
115
124
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" )
125
+ parser .add_argument ("--cmake-opt " , action = 'append' , help = "Additional CMake option not configured via script parameters" )
117
126
118
127
args = parser .parse_args ()
119
128
0 commit comments