1 # -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
2 # Configuration file for the 'lit' test runner.
7 # Tell pylint that we know config and lit_config exist somewhere.
8 if 'PYLINT_IMPORT' in os.environ:
12 # Use the CUDA device as suggested by the env
13 if 'CUDA_VISIBLE_DEVICES' in os.environ:
14 config.environment['CUDA_VISIBLE_DEVICES'] = os.environ['CUDA_VISIBLE_DEVICES']
16 # Use the ROCR device as suggested by the env
17 if 'ROCR_VISIBLE_DEVICES' in os.environ:
18 config.environment['ROCR_VISIBLE_DEVICES'] = os.environ['ROCR_VISIBLE_DEVICES']
20 # Allow running the tests with omptarget debug output
21 if 'LIBOMPTARGET_DEBUG' in os.environ:
22 config.environment['LIBOMPTARGET_DEBUG'] = os.environ['LIBOMPTARGET_DEBUG']
24 # Allow running the tests with nextgen plugins when available
25 if 'LIBOMPTARGET_NEXTGEN_PLUGINS' in os.environ:
26 config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS'] = os.environ['LIBOMPTARGET_NEXTGEN_PLUGINS']
28 if 'LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS' in os.environ:
29 config.environment['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS'] = os.environ['LIBOMPTARGET_LOCK_MAPPED_HOST_BUFFERS']
31 if 'OMP_TARGET_OFFLOAD' in os.environ:
32 config.environment['OMP_TARGET_OFFLOAD'] = os.environ['OMP_TARGET_OFFLOAD']
34 if 'HSA_ENABLE_SDMA' in os.environ:
35 config.environment['HSA_ENABLE_SDMA'] = os.environ['HSA_ENABLE_SDMA']
37 # Architectures like gfx942 may or may not be APUs so an additional environment
38 # variable is required as some tests can be APU specific.
39 if 'IS_APU' in os.environ:
40 config.environment['IS_APU'] = os.environ['IS_APU']
42 # set default environment variables for test
43 if 'CHECK_OPENMP_ENV' in os.environ:
44 test_env = os.environ['CHECK_OPENMP_ENV'].split()
46 name = env.split('=')[0]
47 value = env.split('=')[1]
48 config.environment[name] = value
50 def append_dynamic_library_path(name, value, sep):
51 if name in config.environment:
52 config.environment[name] = value + sep + config.environment[name]
54 config.environment[name] = value
56 # Evaluate the environment variable which is a string boolean value.
57 def evaluate_bool_env(env):
59 possible_true_values = ["on", "true", "1"]
60 for v in possible_true_values:
65 # name: The name of this test suite.
66 config.name = 'libomptarget :: ' + config.libomptarget_current_target
68 # suffixes: A list of file extensions to treat as test files.
69 config.suffixes = ['.c', '.cpp', '.cc', '.f90', '.cu', '.td']
71 # excludes: A list of directories to exclude from the testuites.
72 config.excludes = ['Inputs']
74 # test_source_root: The root path where tests are located.
75 config.test_source_root = os.path.dirname(__file__)
77 # test_exec_root: The root object directory where output is placed
78 config.test_exec_root = config.libomptarget_obj_root
81 config.test_format = lit.formats.ShTest()
84 config.test_flags = " -I " + config.test_source_root + \
85 " -I " + config.omp_header_directory + \
86 " -L " + config.library_dir + \
87 " -L " + config.llvm_lib_directory
89 # compiler specific flags
90 config.test_flags_clang = ""
91 config.test_flags_flang = "-fopenmp-version=52"
93 if config.omp_host_rtl_directory:
94 config.test_flags = config.test_flags + " -L " + \
95 config.omp_host_rtl_directory
97 config.test_flags = config.test_flags + " " + config.test_extra_flags
99 # Allow REQUIRES / UNSUPPORTED / XFAIL to work
100 config.target_triple = [ ]
101 for feature in config.test_compiler_features:
102 config.available_features.add(feature)
104 if config.libomptarget_debug:
105 config.available_features.add('libomptarget-debug')
107 if config.has_libomptarget_ompt:
108 config.available_features.add('ompt')
110 config.available_features.add(config.libomptarget_current_target)
112 if config.libomptarget_has_libc:
113 config.available_features.add('libc')
115 if config.libomptarget_test_pgo:
116 config.available_features.add('pgo')
118 # Determine whether the test system supports unified memory.
119 # For CUDA, this is the case with compute capability 70 (Volta) or higher.
120 # For all other targets, we currently assume it is.
121 supports_unified_shared_memory = True
123 if config.libomptarget_current_target.startswith('nvptx'):
125 cuda_arch = int(config.cuda_test_arch[:3])
127 supports_unified_shared_memory = False
129 # If the architecture is invalid, assume it is supported.
130 supports_unified_shared_memory = True
131 elif config.libomptarget_current_target.startswith('amdgcn'):
132 # amdgpu_test_arch contains a list of AMD GPUs in the system
133 # only check the first one assuming that we will run the test on it.
134 if not (config.amdgpu_test_arch.startswith("gfx90a") or
135 config.amdgpu_test_arch.startswith("gfx940") or
136 config.amdgpu_test_arch.startswith("gfx942")):
137 supports_unified_shared_memory = False
138 # check if AMD architecture is an APU:
139 if (config.amdgpu_test_arch.startswith("gfx940") or
140 (config.amdgpu_test_arch.startswith("gfx942") and
141 evaluate_bool_env(config.environment['IS_APU']))):
143 if supports_unified_shared_memory:
144 config.available_features.add('unified_shared_memory')
146 config.available_features.add('apu')
148 # Setup environment to find dynamic library at runtime
149 if config.operating_system == 'Windows':
150 append_dynamic_library_path('PATH', config.library_dir, ";")
151 append_dynamic_library_path('PATH', config.omp_host_rtl_directory, ";")
152 elif config.operating_system == 'Darwin':
153 append_dynamic_library_path('DYLD_LIBRARY_PATH', config.library_dir, ":")
154 append_dynamic_library_path('DYLD_LIBRARY_PATH', \
155 config.omp_host_rtl_directory, ";")
156 config.test_flags += " -Wl,-rpath," + config.library_dir
157 config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
159 if config.libomptarget_current_target != "nvptx64-nvidia-cuda":
160 config.test_flags += " -nogpulib"
161 config.test_flags += " -Wl,-rpath," + config.library_dir
162 config.test_flags += " -Wl,-rpath," + config.omp_host_rtl_directory
163 config.test_flags += " -Wl,-rpath," + config.llvm_lib_directory
164 if config.cuda_libdir:
165 config.test_flags += " -Wl,-rpath," + config.cuda_libdir
166 if config.libomptarget_current_target.startswith('nvptx'):
167 config.test_flags_clang += " --libomptarget-nvptx-bc-path=" + config.library_dir + '/DeviceRTL'
168 if config.libomptarget_current_target.endswith('-LTO'):
169 config.test_flags += " -foffload-lto"
170 if config.libomptarget_current_target.endswith('-JIT-LTO') and evaluate_bool_env(
171 config.environment['LIBOMPTARGET_NEXTGEN_PLUGINS']
173 config.test_flags += " -foffload-lto"
174 config.test_flags += " -Wl,--embed-bitcode"
176 def remove_suffix_if_present(name):
177 if name.endswith('-LTO'):
179 elif name.endswith('-JIT-LTO'):
184 def add_libraries(source):
185 if config.libomptarget_has_libc:
186 return source + " -Xoffload-linker " + "-lc " + \
187 "-Xoffload-linker " + "-lm " + \
188 config.llvm_library_intdir + "/libomptarget.devicertl.a"
190 return source + " " + config.llvm_library_intdir + "/libomptarget.devicertl.a"
192 # Add platform targets
194 "aarch64-unknown-linux-gnu",
195 "aarch64-unknown-linux-gnu-LTO",
196 "x86_64-unknown-linux-gnu",
197 "x86_64-unknown-linux-gnu-LTO",
198 "s390x-ibm-linux-gnu",
199 "s390x-ibm-linux-gnu-LTO",
201 if config.libomptarget_current_target.startswith('nvptx'):
202 config.available_features.add('gpu')
203 config.available_features.add('nvidiagpu')
204 if config.libomptarget_current_target.startswith('amdgcn'):
205 config.available_features.add('gpu')
206 config.available_features.add('amdgpu')
207 if config.libomptarget_current_target in host_targets:
208 config.available_features.add('host')
211 # - for targets that exist in the system create the actual command.
212 # - for valid targets that do not exist in the system, return false, so that the
213 # same test can be used for different targets.
215 # Scan all the valid targets.
216 for libomptarget_target in config.libomptarget_all_targets:
217 # Is this target in the current system? If so create a compile, run and test
218 # command. Otherwise create command that return false.
219 if libomptarget_target == config.libomptarget_current_target:
220 config.substitutions.append(("%libomptarget-compilexx-run-and-check-generic",
221 "%libomptarget-compilexx-run-and-check-" + libomptarget_target))
222 config.substitutions.append(("%libomptarget-compile-run-and-check-generic",
223 "%libomptarget-compile-run-and-check-" + libomptarget_target))
224 config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-generic",
225 "%libomptarget-compile-fortran-run-and-check-" + libomptarget_target))
226 config.substitutions.append(("%libomptarget-compilexx-and-run-generic",
227 "%libomptarget-compilexx-and-run-" + libomptarget_target))
228 config.substitutions.append(("%libomptarget-compile-and-run-generic",
229 "%libomptarget-compile-and-run-" + libomptarget_target))
230 config.substitutions.append(("%libomptarget-compilexx-generic",
231 "%libomptarget-compilexx-" + libomptarget_target))
232 config.substitutions.append(("%libomptarget-compilexxx-generic-force-usm",
233 "%libomptarget-compilexxx-force-usm-" + libomptarget_target))
234 config.substitutions.append(("%libomptarget-compile-generic",
235 "%libomptarget-compile-" + libomptarget_target))
236 config.substitutions.append(("%libomptarget-compile-fortran-generic",
237 "%libomptarget-compile-fortran-" + libomptarget_target))
238 config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-generic",
239 "%libomptarget-compileoptxx-run-and-check-" + libomptarget_target))
240 config.substitutions.append(("%libomptarget-compileopt-run-and-check-generic",
241 "%libomptarget-compileopt-run-and-check-" + libomptarget_target))
242 config.substitutions.append(("%libomptarget-compileoptxx-and-run-generic",
243 "%libomptarget-compileoptxx-and-run-" + libomptarget_target))
244 config.substitutions.append(("%libomptarget-compileopt-and-run-generic",
245 "%libomptarget-compileopt-and-run-" + libomptarget_target))
246 config.substitutions.append(("%libomptarget-compileoptxx-generic",
247 "%libomptarget-compileoptxx-" + libomptarget_target))
248 config.substitutions.append(("%libomptarget-compileopt-generic",
249 "%libomptarget-compileopt-" + libomptarget_target))
250 config.substitutions.append(("%libomptarget-run-generic",
251 "%libomptarget-run-" + libomptarget_target))
252 config.substitutions.append(("%libomptarget-run-fail-generic",
253 "%libomptarget-run-fail-" + libomptarget_target))
254 config.substitutions.append(("%clangxx-generic",
255 "%clangxx-" + libomptarget_target))
256 config.substitutions.append(("%clang-generic",
257 "%clang-" + libomptarget_target))
258 config.substitutions.append(("%fcheck-generic",
259 config.libomptarget_filecheck + " %s"))
260 config.substitutions.append(("%fcheck-plain-generic",
261 config.libomptarget_filecheck))
264 config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
265 libomptarget_target, \
266 "%libomptarget-compilexx-and-run-" + libomptarget_target + \
267 " | " + config.libomptarget_filecheck + " %s"))
268 config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
269 libomptarget_target, \
270 "%libomptarget-compile-and-run-" + libomptarget_target + \
271 " | " + config.libomptarget_filecheck + " %s"))
272 config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
273 libomptarget_target, \
274 "%libomptarget-compile-fortran-and-run-" + libomptarget_target + \
275 " | " + config.libomptarget_filecheck + " %s"))
276 config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
277 libomptarget_target, \
278 "%libomptarget-compilexx-" + libomptarget_target + " && " + \
279 "%libomptarget-run-" + libomptarget_target))
280 config.substitutions.append(("%libomptarget-compile-and-run-" + \
281 libomptarget_target, \
282 "%libomptarget-compile-" + libomptarget_target + " && " + \
283 "%libomptarget-run-" + libomptarget_target))
284 config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
285 libomptarget_target, \
286 "%libomptarget-compile-fortran-" + libomptarget_target + " && " + \
287 "%libomptarget-run-" + libomptarget_target))
288 config.substitutions.append(("%libomptarget-compilexx-" + \
289 libomptarget_target, \
290 "%clangxx-" + libomptarget_target + add_libraries(" %s -o %t")))
291 config.substitutions.append(("%libomptarget-compilexxx-force-usm-" +
292 libomptarget_target, "%clangxxx-force-usm-" + libomptarget_target + \
293 add_libraries(" %s -o %t")))
294 config.substitutions.append(("%libomptarget-compile-" + \
295 libomptarget_target, \
296 "%clang-" + libomptarget_target + add_libraries(" %s -o %t")))
297 config.substitutions.append(("%libomptarget-compile-fortran-" + \
298 libomptarget_target, \
299 "%flang-" + libomptarget_target + add_libraries(" %s -o %t")))
300 config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
301 libomptarget_target, \
302 "%libomptarget-compileoptxx-and-run-" + libomptarget_target + \
303 " | " + config.libomptarget_filecheck + " %s"))
304 config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
305 libomptarget_target, \
306 "%libomptarget-compileopt-and-run-" + libomptarget_target + \
307 " | " + config.libomptarget_filecheck + " %s"))
308 config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
309 libomptarget_target, \
310 "%libomptarget-compileoptxx-" + libomptarget_target + " && " + \
311 "%libomptarget-run-" + libomptarget_target))
312 config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
313 libomptarget_target, \
314 "%libomptarget-compileopt-" + libomptarget_target + " && " + \
315 "%libomptarget-run-" + libomptarget_target))
316 config.substitutions.append(("%libomptarget-compileoptxx-" + \
317 libomptarget_target, \
318 "%clangxx-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
319 config.substitutions.append(("%libomptarget-compileopt-" + \
320 libomptarget_target, \
321 "%clang-" + libomptarget_target + add_libraries(" -O3 %s -o %t")))
322 config.substitutions.append(("%libomptarget-run-" + \
323 libomptarget_target, \
325 config.substitutions.append(("%libomptarget-run-fail-" + \
326 libomptarget_target, \
328 config.substitutions.append(("%clangxx-" + libomptarget_target, \
329 "%clangxx %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
330 remove_suffix_if_present(libomptarget_target)))
331 config.substitutions.append(("%clangxxx-force-usm-" + libomptarget_target, \
332 "%clangxx %openmp_flags -fopenmp-force-usm %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
333 remove_suffix_if_present(libomptarget_target)))
334 config.substitutions.append(("%clang-" + libomptarget_target, \
335 "%clang %openmp_flags %cuda_flags %flags %flags_clang -fopenmp-targets=" +\
336 remove_suffix_if_present(libomptarget_target)))
337 config.substitutions.append(("%flang-" + libomptarget_target, \
338 "%flang %openmp_flags %flags %flags_flang -fopenmp-targets=" +\
339 remove_suffix_if_present(libomptarget_target)))
340 config.substitutions.append(("%fcheck-" + libomptarget_target, \
341 config.libomptarget_filecheck + " %s"))
343 config.substitutions.append(("%libomptarget-compile-run-and-check-" + \
344 libomptarget_target, \
345 "echo ignored-command"))
346 config.substitutions.append(("%libomptarget-compile-fortran-run-and-check-" + \
347 libomptarget_target, \
348 "echo ignored-command"))
349 config.substitutions.append(("%libomptarget-compilexx-run-and-check-" + \
350 libomptarget_target, \
351 "echo ignored-command"))
352 config.substitutions.append(("%libomptarget-compile-and-run-" + \
353 libomptarget_target, \
354 "echo ignored-command"))
355 config.substitutions.append(("%libomptarget-compile-fortran-and-run-" + \
356 libomptarget_target, \
357 "echo ignored-command"))
358 config.substitutions.append(("%libomptarget-compilexx-and-run-" + \
359 libomptarget_target, \
360 "echo ignored-command"))
361 config.substitutions.append(("%libomptarget-compilexx-" + \
362 libomptarget_target, \
363 "echo ignored-command"))
364 config.substitutions.append(("%libomptarget-compile-" + \
365 libomptarget_target, \
366 "echo ignored-command"))
367 config.substitutions.append(("%libomptarget-compile-fortran-" + \
368 libomptarget_target, \
369 "echo ignored-command"))
370 config.substitutions.append(("%libomptarget-compileopt-run-and-check-" + \
371 libomptarget_target, \
372 "echo ignored-command"))
373 config.substitutions.append(("%libomptarget-compileoptxx-run-and-check-" + \
374 libomptarget_target, \
375 "echo ignored-command"))
376 config.substitutions.append(("%libomptarget-compileopt-and-run-" + \
377 libomptarget_target, \
378 "echo ignored-command"))
379 config.substitutions.append(("%libomptarget-compileoptxx-and-run-" + \
380 libomptarget_target, \
381 "echo ignored-command"))
382 config.substitutions.append(("%libomptarget-compileoptxx-" + \
383 libomptarget_target, \
384 "echo ignored-command"))
385 config.substitutions.append(("%libomptarget-compileopt-" + \
386 libomptarget_target, \
387 "echo ignored-command"))
388 config.substitutions.append(("%libomptarget-run-" + \
389 libomptarget_target, \
390 "echo ignored-command"))
391 config.substitutions.append(("%libomptarget-run-fail-" + \
392 libomptarget_target, \
393 "echo ignored-command"))
394 config.substitutions.append(("%clang-" + libomptarget_target, \
395 "echo ignored-command"))
396 config.substitutions.append(("%clangxx-" + libomptarget_target, \
397 "echo ignored-command"))
398 config.substitutions.append(("%fcheck-" + libomptarget_target, \
399 "echo ignored-command"))
400 config.substitutions.append(("%flang-" + libomptarget_target, \
401 "echo ignored-command"))
403 config.substitutions.append(("%clangxx", config.test_cxx_compiler))
404 config.substitutions.append(("%clang", config.test_c_compiler))
406 if config.test_fortran_compiler:
407 config.available_features.add('flang')
408 config.substitutions.append(("%flang", config.test_fortran_compiler))
410 config.substitutions.append(("%openmp_flags", config.test_openmp_flags))
411 if config.libomptarget_current_target.startswith('nvptx') and config.cuda_path:
412 config.substitutions.append(("%cuda_flags", "--cuda-path=" + config.cuda_path))
414 config.substitutions.append(("%cuda_flags", ""))
415 config.substitutions.append(("%flags_clang", config.test_flags_clang))
416 config.substitutions.append(("%flags_flang", config.test_flags_flang))
417 config.substitutions.append(("%flags", config.test_flags))
418 config.substitutions.append(("%not", config.libomptarget_not))
419 config.substitutions.append(("%offload-device-info",
420 config.offload_device_info))
421 config.substitutions.append(("%offload-tblgen", config.offload_tblgen))