55import platform
66
77# TODO:
8- # 1. Add support for relative paths (e.g. relative path to source directory)
8+ # 1. Make all required options optional
99# 2. Create obj_dir from the script if it doesn't exist
1010
1111def do_configure (args ):
1212 ret = False
1313
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" )
2125 llvm_targets_to_build = 'X86'
2226 llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti;libdevice'
2327 libclc_targets_to_build = ''
2428 sycl_build_pi_cuda = 'OFF'
29+ sycl_werror = 'ON'
2530 llvm_enable_assertions = 'ON'
2631 llvm_enable_doxygen = 'OFF'
2732 llvm_enable_sphinx = 'OFF'
@@ -38,8 +43,11 @@ def do_configure(args):
3843 libclc_targets_to_build = 'nvptx64--;nvptx64--nvidiacl'
3944 sycl_build_pi_cuda = 'ON'
4045
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'
4351
4452 if args .docs :
4553 llvm_enable_doxygen = 'ON'
@@ -48,7 +56,7 @@ def do_configure(args):
4856 if args .shared_libs :
4957 llvm_build_shared_libs = 'ON'
5058
51- install_dir = os .path .join (args . obj_dir , "install" )
59+ install_dir = os .path .join (abs_obj_dir , "install" )
5260
5361 cmake_cmd = [
5462 "cmake" ,
@@ -65,31 +73,36 @@ def do_configure(args):
6573 "-DLIBCLC_TARGETS_TO_BUILD={}" .format (libclc_targets_to_build ),
6674 "-DSYCL_BUILD_PI_CUDA={}" .format (sycl_build_pi_cuda ),
6775 "-DLLVM_BUILD_TOOLS=ON" ,
68- "-DSYCL_ENABLE_WERROR=ON" ,
76+ "-DSYCL_ENABLE_WERROR={}" . format ( sycl_werror ) ,
6977 "-DCMAKE_INSTALL_PREFIX={}" .format (install_dir ),
7078 "-DSYCL_INCLUDE_TESTS=ON" , # Explicitly include all kinds of SYCL tests.
7179 "-DLLVM_ENABLE_DOXYGEN={}" .format (llvm_enable_doxygen ),
7280 "-DLLVM_ENABLE_SPHINX={}" .format (llvm_enable_sphinx ),
7381 "-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
7783 ]
7884
79- if not args .no_ocl :
85+ if args .system_ocl :
8086 cmake_cmd .extend ([
8187 "-DOpenCL_INCLUDE_DIR={}" .format (ocl_header_dir ),
8288 "-DOpenCL_LIBRARY={}" .format (icd_loader_lib )])
8389
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+
8497 print (cmake_cmd )
8598
8699 try :
87- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
100+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
88101 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" )
90103 if os .path .isfile (cmake_cache ):
91104 os .remove (cmake_cache )
92- subprocess .check_call (cmake_cmd , cwd = args . obj_dir )
105+ subprocess .check_call (cmake_cmd , cwd = abs_obj_dir )
93106
94107 ret = True
95108 return ret
@@ -109,11 +122,12 @@ def main():
109122 parser .add_argument ("-t" , "--build-type" ,
110123 metavar = "BUILD_TYPE" , required = True , help = "build type, debug or release" )
111124 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" )
113126 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" )
115129 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" )
117131
118132 args = parser .parse_args ()
119133
0 commit comments