8
8
from pathlib import Path
9
9
10
10
from codebasin import config
11
+ from codebasin .config import ArgumentParser
11
12
12
13
13
14
class TestCompilers (unittest .TestCase ):
@@ -42,120 +43,136 @@ def test_common(self):
42
43
"MACRO_AFTER_SPACE" ,
43
44
"test.cpp" ,
44
45
]
45
- args = config ._parse_compiler_args (argv )
46
- self .assertEqual (
47
- args .defines ,
46
+ parser = ArgumentParser (argv [0 ])
47
+
48
+ passes = parser .parse_args (argv [1 :])
49
+ self .assertEqual (len (passes ), 1 )
50
+
51
+ self .assertEqual (passes [0 ].pass_name , "default" )
52
+
53
+ self .assertCountEqual (
54
+ passes [0 ].defines ,
48
55
["MACRO" , "FUNCTION_MACRO=1" , "MACRO_AFTER_SPACE" ],
49
56
)
50
- self .assertEqual (
51
- args .include_paths ,
57
+ self .assertCountEqual (
58
+ passes [ 0 ] .include_paths ,
52
59
["/path" , "/path/after/space" , "/system/path" ],
53
60
)
54
- self .assertEqual ( args .include_files , ["foo.inc" , "bar.inc" ])
61
+ self .assertCountEqual ( passes [ 0 ] .include_files , ["foo.inc" , "bar.inc" ])
55
62
56
63
def test_gnu (self ):
57
64
"""compilers/gnu"""
58
65
argv = ["g++" , "-fopenmp" , "test.cpp" ]
59
66
60
- parser = config .recognize_compiler (argv [0 ])
61
- self .assertTrue (type (parser ) is config .GnuArgumentParser )
67
+ parser = ArgumentParser (argv [0 ])
62
68
63
69
passes = parser .parse_args (argv [1 :])
64
70
self .assertEqual (len (passes ), 1 )
65
71
66
72
self .assertEqual (passes [0 ].pass_name , "default" )
67
73
68
74
defines = passes [0 ].defines
69
- self .assertEqual (defines , ["_OPENMP" ])
75
+ self .assertCountEqual (defines , ["_OPENMP" ])
70
76
71
77
def test_clang (self ):
72
78
"""compilers/clang"""
73
79
argv = ["clang" , "-fsycl-is-device" , "test.cpp" ]
74
80
75
- parser = config .recognize_compiler (argv [0 ])
76
- self .assertTrue (type (parser ) is config .ClangArgumentParser )
81
+ parser = ArgumentParser (argv [0 ])
77
82
78
83
passes = parser .parse_args (argv [1 :])
79
84
self .assertEqual (len (passes ), 1 )
80
85
81
86
self .assertEqual (passes [0 ].pass_name , "default" )
82
87
83
88
defines = passes [0 ].defines
84
- self .assertEqual (defines , ["__SYCL_DEVICE_ONLY__" ])
89
+ self .assertCountEqual (defines , ["__SYCL_DEVICE_ONLY__" ])
85
90
86
91
def test_intel_sycl (self ):
87
92
"""compilers/intel_sycl"""
88
93
argv = ["icpx" , "-fsycl" , "test.cpp" ]
89
94
90
- parser = config .recognize_compiler (argv [0 ])
91
- self .assertTrue (type (parser ) is config .ClangArgumentParser )
95
+ parser = ArgumentParser (argv [0 ])
92
96
93
97
passes = parser .parse_args (argv [1 :])
94
98
self .assertEqual (len (passes ), 2 )
95
99
96
100
pass_names = {p .pass_name for p in passes }
97
- self .assertEqual (pass_names , {"default" , "spir64" })
101
+ self .assertCountEqual (pass_names , {"default" , "sycl- spir64" })
98
102
99
103
for p in passes :
100
104
if p .pass_name == "default" :
101
- expected = []
105
+ expected = ["SYCL_LANGUAGE_VERSION" ]
102
106
else :
103
- expected = ["__SYCL_DEVICE_ONLY__" , "__SPIR__" , "__SPIRV__" ]
104
- self .assertEqual (p .defines , expected )
107
+ expected = [
108
+ "SYCL_LANGUAGE_VERSION" ,
109
+ "__SYCL_DEVICE_ONLY__" ,
110
+ "__SPIR__" ,
111
+ "__SPIRV__" ,
112
+ ]
113
+ self .assertCountEqual (p .defines , expected )
105
114
106
115
def test_intel_targets (self ):
107
116
"""compilers/intel_targets"""
108
117
argv = [
109
118
"icpx" ,
110
119
"-fsycl" ,
111
- "-fsycl-targets=spir64,x86_64 " ,
120
+ "-fsycl-targets=spir64,spir64_x86_64 " ,
112
121
"-fopenmp" ,
113
122
"test.cpp" ,
114
123
]
115
124
116
- parser = config .recognize_compiler (argv [0 ])
117
- self .assertTrue (type (parser ) is config .ClangArgumentParser )
125
+ parser = ArgumentParser (argv [0 ])
118
126
119
127
passes = parser .parse_args (argv [1 :])
120
128
121
129
pass_names = {p .pass_name for p in passes }
122
- self .assertEqual (pass_names , {"default" , "spir64" , "x86_64" })
130
+ self .assertCountEqual (
131
+ pass_names ,
132
+ {"default" , "sycl-spir64" , "sycl-spir64_x86_64" },
133
+ )
123
134
124
135
for p in passes :
125
136
if p .pass_name == "default" :
126
- expected = ["_OPENMP" ]
127
- self .assertEqual (p .defines , ["_OPENMP" ])
128
- elif p .pass_name == "spir64" or p .pass_name == "x86_64" :
129
- expected = ["__SYCL_DEVICE_ONLY__" , "__SPIR__" , "__SPIRV__" ]
130
- self .assertEqual (p .defines , expected )
137
+ expected = ["SYCL_LANGUAGE_VERSION" , "_OPENMP" ]
138
+ elif (
139
+ p .pass_name == "sycl-spir64"
140
+ or p .pass_name == "sycl-spir64_x86_64"
141
+ ):
142
+ expected = [
143
+ "SYCL_LANGUAGE_VERSION" ,
144
+ "__SYCL_DEVICE_ONLY__" ,
145
+ "__SPIR__" ,
146
+ "__SPIRV__" ,
147
+ ]
148
+ self .assertCountEqual (p .defines , expected )
131
149
132
150
def test_nvcc (self ):
133
151
"""compilers/nvcc"""
134
152
argv = [
135
153
"nvcc" ,
136
154
"-fopenmp" ,
137
- "--gpu-architecture=compute_50 " ,
138
- "--gpu-code=compute_50,sm_50,sm_52 " ,
155
+ "--gpu-architecture=compute_70 " ,
156
+ "--gpu-code=compute_70,sm_70,sm_75 " ,
139
157
"test.cpp" ,
140
158
]
141
159
142
- parser = config .recognize_compiler (argv [0 ])
143
- self .assertTrue (type (parser ) is config .NvccArgumentParser )
160
+ parser = ArgumentParser (argv [0 ])
144
161
145
162
passes = parser .parse_args (argv [1 :])
146
163
147
164
pass_names = {p .pass_name for p in passes }
148
- self .assertEqual (pass_names , {"default" , "50 " , "52 " })
165
+ self .assertCountEqual (pass_names , {"default" , "sm_70 " , "sm_75 " })
149
166
150
167
defaults = ["__NVCC__" , "__CUDACC__" ]
151
168
for p in passes :
152
169
if p .pass_name == "default" :
153
170
expected = defaults + ["_OPENMP" ]
154
- elif p .pass_name == "50 " :
155
- expected = defaults + ["__CUDA_ARCH__=500 " ]
156
- elif p .pass_name == "52 " :
157
- expected = defaults + ["__CUDA_ARCH__=520 " ]
158
- self .assertEqual (p .defines , expected )
171
+ elif p .pass_name == "sm_70 " :
172
+ expected = defaults + ["__CUDA_ARCH__=700 " ]
173
+ elif p .pass_name == "sm_75 " :
174
+ expected = defaults + ["__CUDA_ARCH__=750 " ]
175
+ self .assertCountEqual (p .defines , expected )
159
176
160
177
def test_user_options (self ):
161
178
"""Check that we import user-defined options"""
@@ -166,14 +183,15 @@ def test_user_options(self):
166
183
with open (path / ".cbi" / "config" , mode = "w" ) as f :
167
184
f .write ('[compiler."c++"]\n ' )
168
185
f .write ('options = ["-D", "ASDF"]\n ' )
169
- config .load_importcfg ()
186
+ config ._importcfg = None
187
+ config ._load_compilers ()
170
188
171
189
argv = [
172
190
"c++" ,
173
191
"test.cpp" ,
174
192
]
175
193
176
- parser = config . recognize_compiler (argv [0 ])
194
+ parser = ArgumentParser (argv [0 ])
177
195
passes = parser .parse_args (argv [1 :])
178
196
self .assertEqual (len (passes ), 1 )
179
197
self .assertCountEqual (passes [0 ].defines , ["ASDF" ])
0 commit comments