1# -*- Python -*- 2 3from lit import Test 4import lit.formats 5import lit.util 6import os 7import re 8import subprocess 9 10clang_bolt_mode = config.clang_bolt_mode.lower() 11clang_binary = "clang" 12perf_wrapper = f"{config.python_exe} {config.perf_helper_dir}/perf-helper.py perf " 13 14if clang_bolt_mode == "instrument": 15 perf_wrapper = "" 16 clang_binary = config.clang_bolt_name 17elif clang_bolt_mode == "lbr": 18 perf_wrapper += " --lbr -- " 19elif clang_bolt_mode == "perf": 20 perf_wrapper += " -- " 21else: 22 assert 0, "Unsupported CLANG_BOLT_MODE variable" 23 24clang_nowrapper = os.path.realpath( 25 lit.util.which(clang_binary, config.clang_tools_dir) 26).replace("\\", "/") 27config.clang = perf_wrapper + clang_nowrapper 28config.cmake_compiler_args = "-DCMAKE_C_COMPILER='{0}' -DCMAKE_CXX_COMPILER='{0};--driver-mode=g++'".format( 29 re.sub(r"\s+", ";", clang_nowrapper) 30) 31 32config.name = "Clang Perf Training" 33config.suffixes = [ 34 ".c", 35 ".cc", 36 ".cpp", 37 ".m", 38 ".mm", 39 ".cu", 40 ".ll", 41 ".cl", 42 ".s", 43 ".S", 44 ".modulemap", 45 ".test", 46] 47 48use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL") 49config.test_format = lit.formats.ShTest(use_lit_shell == "0") 50config.substitutions.append( 51 ("%clang_cpp_skip_driver", f" {config.clang} --driver-mode=g++ ") 52) 53config.substitutions.append(("%clang_cpp", f" {config.clang} --driver-mode=g++ ")) 54config.substitutions.append(("%clang_skip_driver", config.clang)) 55config.substitutions.append(("%clang", config.clang)) 56config.substitutions.append(("%test_root", config.test_exec_root)) 57config.substitutions.append(("%cmake_compiler_args", config.cmake_compiler_args)) 58config.substitutions.append(('%cmake_generator', config.cmake_generator)) 59config.substitutions.append(('%cmake', config.cmake_exe)) 60config.substitutions.append(('%llvm_src_dir', config.llvm_src_dir)) 61config.substitutions.append(('%perf_wrapper', perf_wrapper)) 62