2020import sys
2121
2222
23- def run (cmd , env = None , cwd = None ):
24- print ("+" , " " .join (cmd ))
25- subprocess .check_call (
26- cmd , env = env or os .environ .copy (), cwd = cwd or os .getcwd ()
27- )
28-
29-
30- def warn (msg : str ):
31- print (f"[build_locally][error] { msg } " , file = sys .stderr )
32-
33-
34- def err (msg : str ):
35- print (f"[build_locally][error] { msg } " , file = sys .stderr )
36-
37-
3823def resolve_compilers (
39- oneapi : bool , c_compiler : str , cxx_compiler : str , compiler_root : str
24+ oneapi : bool ,
25+ c_compiler : str ,
26+ cxx_compiler : str ,
27+ compiler_root : str ,
4028):
4129 is_linux = "linux" in sys .platform
4230
@@ -45,10 +33,14 @@ def resolve_compilers(
4533 ):
4634 return "icx" , ("icpx" if is_linux else "icx" )
4735
48- if not compiler_root or not os .path .exists (compiler_root ):
36+ if (
37+ (c_compiler is None or not os .path .isabs (c_compiler ))
38+ and (cxx_compiler is None or not os .path .isabs (cxx_compiler ))
39+ and (not compiler_root or not os .path .exists (compiler_root ))
40+ ):
4941 raise RuntimeError (
5042 "--compiler-root option must be set when using non-default DPC++ "
51- "layout"
43+ "layout unless absolute paths are provided for both compilers "
5244 )
5345
5446 # default values
@@ -61,34 +53,54 @@ def resolve_compilers(
6153 (c_compiler , "--c-compiler" ),
6254 (cxx_compiler , "--cxx-compiler" ),
6355 ):
64- path = (
65- name if os .path .exists (name ) else os .path .join (compiler_root , name )
66- )
56+ if os .path .isabs (name ):
57+ path = name
58+ else :
59+ path = os .path .join (compiler_root , name )
6760 if not os .path .exists (path ):
6861 raise RuntimeError (f"{ opt_name } value { name } not found" )
6962 return c_compiler , cxx_compiler
7063
7164
65+ def run (cmd : list [str ], env : dict [str , str ] = None , cwd : str = None ):
66+ print ("+" , " " .join (cmd ))
67+ subprocess .check_call (
68+ cmd , env = env or os .environ .copy (), cwd = cwd or os .getcwd ()
69+ )
70+
71+
72+ def get_output (cmd : list [str ], cwd : str = None ):
73+ print ("+" , " " .join (cmd ))
74+ return (
75+ subprocess .check_output (cmd , cwd = cwd or os .getcwd ())
76+ .decode ("utf-8" )
77+ .strip ("\n " )
78+ )
79+
80+
81+ def warn (msg : str , script : str ):
82+ print (f"[{ script } ][warning] { msg } " , file = sys .stderr )
83+
84+
85+ def err (msg : str , script : str ):
86+ print (f"[{ script } ][error] { msg } " , file = sys .stderr )
87+
88+
7289def make_cmake_args (
73- build_type = "Release" ,
74- c_compiler = None ,
75- cxx_compiler = None ,
76- level_zero = True ,
77- glog = False ,
78- generator = None ,
79- verbose = False ,
80- other_opts = "" ,
90+ c_compiler : str = None ,
91+ cxx_compiler : str = None ,
92+ level_zero : bool = True ,
93+ glog : bool = False ,
94+ verbose : bool = False ,
95+ other_opts : str = None ,
8196):
8297 args = [
83- f"-DCMAKE_BUILD_TYPE={ build_type } " ,
8498 f"-DCMAKE_C_COMPILER:PATH={ c_compiler } " if c_compiler else "" ,
8599 f"-DCMAKE_CXX_COMPILER:PATH={ cxx_compiler } " if cxx_compiler else "" ,
86100 f"-DDPCTL_ENABLE_L0_PROGRAM_CREATION={ 'ON' if level_zero else 'OFF' } " ,
87101 f"-DDPTL_ENABLE_GLOG:BOOL={ 'ON' if glog else 'OFF' } " ,
88102 ]
89103
90- if generator :
91- args .append (f"-G{ generator } " )
92104 if verbose :
93105 args .append ("-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON" )
94106 if other_opts :
@@ -97,15 +109,28 @@ def make_cmake_args(
97109 return " " .join (filter (None , args ))
98110
99111
100- def build_extension (setup_dir , env ):
112+ def build_extension (
113+ setup_dir : str ,
114+ env : dict [str , str ],
115+ cmake_executable : str = None ,
116+ generator : str = None ,
117+ build_type : str = None ,
118+ ):
119+ cmd = [sys .executable , "setup.py" , "build_ext" , "--inplace" ]
120+ if cmake_executable :
121+ cmd .append (f"--cmake-executable={ cmake_executable } " )
122+ if generator :
123+ cmd .append (f"--generator={ generator } " )
124+ if build_type :
125+ cmd .append (f"--build-type={ build_type } " )
101126 run (
102- [ sys . executable , "setup.py" , "build_ext" , "--inplace" ] ,
127+ cmd ,
103128 env = env ,
104129 cwd = setup_dir ,
105130 )
106131
107132
108- def install_editable (setup_dir , env ):
133+ def install_editable (setup_dir : str , env : dict [ str , str ] ):
109134 run (
110135 [
111136 sys .executable ,
@@ -121,7 +146,7 @@ def install_editable(setup_dir, env):
121146 )
122147
123148
124- def clean_build_dir (setup_dir ):
149+ def clean_build_dir (setup_dir : str = None ):
125150 target = os .path .join (setup_dir or os .getcwd (), "_skbuild" )
126151 if os .path .exists (target ):
127152 print (f"Cleaning build directory: { target } " )
0 commit comments